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:[EMAIL PROTECTED]">[EMAIL PROTECTED]</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:[EMAIL PROTECTED]">[EMAIL PROTECTED]</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:[EMAIL PROTECTED]">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:[EMAIL PROTECTED]">[EMAIL PROTECTED]</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: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>