[
https://issues.apache.org/jira/browse/BEAM-2701?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16194804#comment-16194804
]
ASF GitHub Bot commented on BEAM-2701:
--------------------------------------
Github user asfgit closed the pull request at:
https://github.com/apache/beam/pull/3871
> use a custom implementation of java.io.ObjectInputStream
> --------------------------------------------------------
>
> Key: BEAM-2701
> URL: https://issues.apache.org/jira/browse/BEAM-2701
> Project: Beam
> Issue Type: Bug
> Components: sdk-java-core
> Reporter: Romain Manni-Bucau
> Assignee: Jean-Baptiste Onofré
>
> java.io.ObjectInputStream should override resolve[Proxy]Class using the TCCL
> to support any classloader and not fallback into some JVM pitfall using
> another classloader (default). This will enable beam to use any classloader
> instead of requiring to run in the JVM using java serialization.
> {code}
> @Override
> protected Class<?> resolveClass(final ObjectStreamClass classDesc) throws
> IOException, ClassNotFoundException {
> final String n = classDesc.getName();
> final ClassLoader classloader = getClassloader();
> try {
> return Class.forName(n, false, classloader);
> } catch (ClassNotFoundException e) {
> if (n.equals("boolean")) {
> return boolean.class;
> }
> if (n.equals("byte")) {
> return byte.class;
> }
> if (n.equals("char")) {
> return char.class;
> }
> if (n.equals("short")) {
> return short.class;
> }
> if (n.equals("int")) {
> return int.class;
> }
> if (n.equals("long")) {
> return long.class;
> }
> if (n.equals("float")) {
> return float.class;
> }
> if (n.equals("double")) {
> return double.class;
> }
> //Last try - Let runtime try and find it.
> return Class.forName(n, false, null);
> }
> }
> @Override
> protected Class resolveProxyClass(final String[] interfaces) throws
> IOException, ClassNotFoundException {
> final Class[] cinterfaces = new Class[interfaces.length];
> for (int i = 0; i < interfaces.length; i++) {
> cinterfaces[i] = getClassloader().loadClass(interfaces[i]);
> }
> try {
> return Proxy.getProxyClass(getClassloader(), cinterfaces);
> } catch (IllegalArgumentException e) {
> throw new ClassNotFoundException(null, e);
> }
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)