You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by ha...@apache.org on 2002/02/03 00:39:41 UTC

cvs commit: jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/server/impl/adapters MarshalledInovcationHandlerAdapter.java

hammant     02/02/02 15:39:41

  Modified:    altrmi/src/java/org/apache/commons/altrmi/client/impl/direct
                        DirectMarshalledHostContext.java
                        DirectMarshalledInvocationHandler.java
               altrmi/src/java/org/apache/commons/altrmi/common
                        SerializationHelper.java
               altrmi/src/java/org/apache/commons/altrmi/server/impl/adapters
                        MarshalledInovcationHandlerAdapter.java
  Added:       altrmi/src/java/org/apache/commons/altrmi/common
                        ClassLoaderObjectInputStream.java
  Log:
  Small mods for class visibility issues while deserializing.
  
  Revision  Changes    Path
  1.2       +6 -1      jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/client/impl/direct/DirectMarshalledHostContext.java
  
  Index: DirectMarshalledHostContext.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/client/impl/direct/DirectMarshalledHostContext.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DirectMarshalledHostContext.java	26 Jan 2002 15:22:16 -0000	1.1
  +++ DirectMarshalledHostContext.java	2 Feb 2002 23:39:41 -0000	1.2
  @@ -19,7 +19,7 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.1 $
  + * @version $Revision: 1.2 $
    */
   public class DirectMarshalledHostContext extends AbstractHostContext {
   
  @@ -34,7 +34,12 @@
        */
       public DirectMarshalledHostContext(AltrmiMarshalledInvocationHandler altrmiInvocationHandler)
               throws AltrmiConnectionException {
  -        super(new DirectMarshalledInvocationHandler(altrmiInvocationHandler));
  +        this(altrmiInvocationHandler, DirectMarshalledHostContext.class.getClassLoader());
  +    }
  +
  +    public DirectMarshalledHostContext(AltrmiMarshalledInvocationHandler altrmiInvocationHandler, ClassLoader classLoader)
  +            throws AltrmiConnectionException {
  +        super(new DirectMarshalledInvocationHandler(altrmiInvocationHandler, classLoader));
       }
   
   
  
  
  
  1.3       +10 -2     jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/client/impl/direct/DirectMarshalledInvocationHandler.java
  
  Index: DirectMarshalledInvocationHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/client/impl/direct/DirectMarshalledInvocationHandler.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DirectMarshalledInvocationHandler.java	27 Jan 2002 15:47:40 -0000	1.2
  +++ DirectMarshalledInvocationHandler.java	2 Feb 2002 23:39:41 -0000	1.3
  @@ -36,11 +36,12 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.2 $
  + * @version $Revision: 1.3 $
    */
   public final class DirectMarshalledInvocationHandler extends AbstractDirectInvocationHandler {
   
       private AltrmiMarshalledInvocationHandler mAltrmiInvocationHandler;
  +    private ClassLoader mClassLoader;
   
   
       /**
  @@ -55,6 +56,13 @@
       public DirectMarshalledInvocationHandler(AltrmiMarshalledInvocationHandler altrmiInvocationHandler)
               throws AltrmiConnectionException {
           mAltrmiInvocationHandler = altrmiInvocationHandler;
  +        mClassLoader = this.getClass().getClassLoader();
  +    }
  +
  +    public DirectMarshalledInvocationHandler(AltrmiMarshalledInvocationHandler altrmiInvocationHandler, ClassLoader classLoader)
  +            throws AltrmiConnectionException {
  +        mAltrmiInvocationHandler = altrmiInvocationHandler;
  +        mClassLoader = classLoader;
       }
   
       protected AltrmiReply performInvocation(AltrmiRequest request) throws IOException {
  @@ -62,7 +70,7 @@
           try {
               byte[] serRequest = SerializationHelper.getBytesFromInstance(request);
               byte[] serReply = mAltrmiInvocationHandler.handleInvocation(serRequest);
  -            return (AltrmiReply) SerializationHelper.getInstanceFromBytes(serReply);
  +            return (AltrmiReply) SerializationHelper.getInstanceFromBytes(serReply, mClassLoader);
           } catch (IOException e) {
               e.printStackTrace();
               return new RequestFailedReply("Some IO Exception on server side : " + e.getMessage());
  
  
  
  1.2       +5 -1      jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/common/SerializationHelper.java
  
  Index: SerializationHelper.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/common/SerializationHelper.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- SerializationHelper.java	26 Jan 2002 15:22:17 -0000	1.1
  +++ SerializationHelper.java	2 Feb 2002 23:39:41 -0000	1.2
  @@ -36,9 +36,13 @@
       }
   
       public static Object getInstanceFromBytes(byte[] byteArray) throws IOException, ClassNotFoundException {
  +        return getInstanceFromBytes(byteArray, SerializationHelper.class.getClassLoader());
  +    }
  +    public static Object getInstanceFromBytes(byte[] byteArray, ClassLoader classLoader) throws IOException, ClassNotFoundException {
   
           ByteArrayInputStream bAIS = new ByteArrayInputStream(byteArray);
  -        ObjectInputStream oIs = new ObjectInputStream(bAIS);
  +        ObjectInputStream oIs = //new ObjectInputStream(bAIS);
  +                 new ClassLoaderObjectInputStream(classLoader, bAIS);
           Object obj = oIs.readObject();
           oIs.close();
           return obj;
  
  
  
  1.1                  jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/common/ClassLoaderObjectInputStream.java
  
  Index: ClassLoaderObjectInputStream.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE.txt file.
   */
  package org.apache.commons.altrmi.common;
  
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.ObjectInputStream;
  import java.io.ObjectOutputStream;
  import java.io.ObjectStreamClass;
  import java.io.OutputStream;
  import java.io.StreamCorruptedException;
  
  /**
   * A special ObjectInputStream to handle highly transient classes hosted
   * by Avalon components that are juggling many classloaders.
   *
   * @author <a href="mailto:paul_hammant@yahoo.com">Paul Hammant</a>
   */
  public class ClassLoaderObjectInputStream
      extends ObjectInputStream
  {
      private ClassLoader m_classLoader;
  
      public ClassLoaderObjectInputStream( final ClassLoader classLoader,
                                         final InputStream inputStream )
          throws IOException, StreamCorruptedException
      {
          super( inputStream );
          m_classLoader = classLoader;
      }
  
      protected Class resolveClass( final ObjectStreamClass objectStreamClass )
          throws IOException, ClassNotFoundException
      {
          final Class clazz =
              Class.forName( objectStreamClass.getName(), false, m_classLoader );
  
          if( null != clazz )
          {
              return clazz; // the classloader knows of the class
          }
          else
          {
              // classloader knows not of class, let the super classloader do it
              return super.resolveClass( objectStreamClass );
          }
      }
  }
  
  
  
  1.2       +9 -1      jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/server/impl/adapters/MarshalledInovcationHandlerAdapter.java
  
  Index: MarshalledInovcationHandlerAdapter.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/server/impl/adapters/MarshalledInovcationHandlerAdapter.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- MarshalledInovcationHandlerAdapter.java	28 Jan 2002 14:04:54 -0000	1.1
  +++ MarshalledInovcationHandlerAdapter.java	2 Feb 2002 23:39:41 -0000	1.2
  @@ -24,11 +24,12 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.1 $
  + * @version $Revision: 1.2 $
    */
   public class MarshalledInovcationHandlerAdapter implements AltrmiMarshalledInvocationHandler {
   
       private AltrmiInvocationHandler mAltrmiInvocationHandler;
  +    private ClassLoader mClassLoader;
   
       /**
        * Constructor MarshalledInovcationHandlerAdapter
  @@ -39,8 +40,15 @@
        */
       public MarshalledInovcationHandlerAdapter(AltrmiInvocationHandler altrmiInvocationHandler) {
           mAltrmiInvocationHandler = altrmiInvocationHandler;
  +        mClassLoader = getClass().getClassLoader();
       }
   
  +    public MarshalledInovcationHandlerAdapter(AltrmiInvocationHandler altrmiInvocationHandler, ClassLoader classLoader) {
  +        mAltrmiInvocationHandler = altrmiInvocationHandler;
  +        mClassLoader = classLoader;
  +    }
  +
  +
       /**
        * Method handleInvocation
        *
  @@ -52,7 +60,7 @@
        */
       public byte[] handleInvocation(byte[] request) {
           try {
  -            AltrmiRequest ar = (AltrmiRequest) SerializationHelper.getInstanceFromBytes(request);
  +            AltrmiRequest ar = (AltrmiRequest) SerializationHelper.getInstanceFromBytes(request, mClassLoader);
               AltrmiReply reply = mAltrmiInvocationHandler.handleInvocation(ar);
               return SerializationHelper.getBytesFromInstance(reply);
           } catch (IOException e) {
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>