[ 
https://issues.apache.org/jira/browse/BEAM-2701?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Luke Cwik resolved BEAM-2701.
-----------------------------
       Resolution: Fixed
    Fix Version/s: 2.2.0

> 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: Romain Manni-Bucau
>             Fix For: 2.2.0
>
>
> 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)

Reply via email to