I'm using the AltrmiAuthentication to authenticate users against the altrmi server. If an ExceptionReply was returned as part of the lookup, a ClassCastException would occur. I have modified lookup() to check the object type of the AltrmiReply to see if it is an ExceptionReply (which would occur if authorization failed), which is the cause of the CCE.
I also noticed that lookup() was the same between both the ClientClass and ServerClass factories so I moved the lookup() implementation into their abstract superclass. I'm using instanceOf to check the reply type, rather than checking the code since the existing code did that for problem replies. -pete -- peter royal -> [EMAIL PROTECTED]
? docs Index: src/java/org/apache/excalibur/altrmi/client/impl/AbstractAltrmiFactory.java =================================================================== RCS file: /home/cvspublic/jakarta-avalon-excalibur/altrmi/src/java/org/apache/excalibur/altrmi/client/impl/AbstractAltrmiFactory.java,v retrieving revision 1.2 diff -u -r1.2 AbstractAltrmiFactory.java --- src/java/org/apache/excalibur/altrmi/client/impl/AbstractAltrmiFactory.java 10 Apr 2002 23:36:58 -0000 1.2 +++ src/java/org/apache/excalibur/altrmi/client/impl/AbstractAltrmiFactory.java 17 Apr 2002 17:45:27 -0000 @@ -10,23 +10,24 @@ +import java.io.IOException; +import java.lang.ref.WeakReference; +import java.util.HashMap; + import org.apache.excalibur.altrmi.client.AltrmiFactory; import org.apache.excalibur.altrmi.client.AltrmiHostContext; import org.apache.excalibur.altrmi.client.AltrmiProxy; +import org.apache.excalibur.altrmi.common.AltrmiAuthentication; import org.apache.excalibur.altrmi.common.AltrmiConnectionException; import org.apache.excalibur.altrmi.common.AltrmiReply; +import org.apache.excalibur.altrmi.common.ExceptionReply; +import org.apache.excalibur.altrmi.common.ListReply; +import org.apache.excalibur.altrmi.common.ListRequest; +import org.apache.excalibur.altrmi.common.LookupReply; import org.apache.excalibur.altrmi.common.LookupRequest; -import org.apache.excalibur.altrmi.common.OpenConnectionRequest; -import org.apache.excalibur.altrmi.common.AltrmiInvocationException; +import org.apache.excalibur.altrmi.common.NotPublishedReply; import org.apache.excalibur.altrmi.common.OpenConnectionReply; -import org.apache.excalibur.altrmi.common.ListRequest; -import org.apache.excalibur.altrmi.common.ListReply; - -import java.util.HashMap; -import java.util.Vector; - -import java.io.IOException; -import java.lang.ref.WeakReference; +import org.apache.excalibur.altrmi.common.OpenConnectionRequest; /** @@ -34,6 +35,7 @@ * * * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> + * @author Peter Royal <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> * @version $Revision: 1.2 $ */ public abstract class AbstractAltrmiFactory implements AltrmiFactory { @@ -95,6 +97,66 @@ //TODO } + } + + /** + * Method lookup + * + * + * @param publishedServiceName + * @param altrmiAuthentication + * + * @return + * + * @throws AltrmiConnectionException + * + */ + public Object lookup(String publishedServiceName, AltrmiAuthentication altrmiAuthentication) + throws AltrmiConnectionException { + + AltrmiReply ar = + mHostContext.getInvocationHandler() + .handleInvocation(new LookupRequest(publishedServiceName, altrmiAuthentication, mSession)); + + if (ar.getReplyCode() >= AltrmiReply.PROBLEMREPLY) { + if (ar instanceof NotPublishedReply) { + throw new AltrmiConnectionException("Service " + publishedServiceName + + " not published"); + } else if (ar instanceof ExceptionReply) { + ExceptionReply er = (ExceptionReply) ar; + + throw (AltrmiConnectionException) er.getReplyException(); + } else { + throw new AltrmiConnectionException("Problem doing lookup on service"); + } + } else if (ar instanceof ExceptionReply) { + ExceptionReply er = (ExceptionReply) ar; + Throwable t = er.getReplyException(); + + if (t instanceof AltrmiConnectionException) { + throw (AltrmiConnectionException) t; + } else if (t instanceof Error) { + throw (Error) t; + } else if (t instanceof RuntimeException) { + throw (RuntimeException) t; + } else { + throw new AltrmiConnectionException("Problem doing lookup on service [exception: " + + t.getMessage() + "]"); + } + } else if (!(ar instanceof LookupReply)) { + throw new UnsupportedOperationException("Unexpected reply to lookup [reply: " + ar + "]"); + } + + LookupReply lr = (LookupReply) ar; + DefaultProxyHelper baseObj = new DefaultProxyHelper(this, + mHostContext.getInvocationHandler(), + publishedServiceName, "Main", + lr.getReferenceID(), mSession); + Object retVal = getInstance(publishedServiceName, "Main", baseObj, isBeanOnly()); + + baseObj.registerImplObject(retVal); + + return retVal; } protected abstract Class getFacadeClass(String publishedServiceName, String objectName, boolean beanOnly) throws AltrmiConnectionException, ClassNotFoundException; Index: src/java/org/apache/excalibur/altrmi/client/impl/ClientClassAltrmiFactory.java =================================================================== RCS file: /home/cvspublic/jakarta-avalon-excalibur/altrmi/src/java/org/apache/excalibur/altrmi/client/impl/ClientClassAltrmiFactory.java,v retrieving revision 1.2 diff -u -r1.2 ClientClassAltrmiFactory.java --- src/java/org/apache/excalibur/altrmi/client/impl/ClientClassAltrmiFactory.java 10 Apr 2002 23:36:58 -0000 1.2 +++ src/java/org/apache/excalibur/altrmi/client/impl/ClientClassAltrmiFactory.java 17 Apr 2002 17:45:27 -0000 @@ -10,19 +10,11 @@ -import org.apache.excalibur.altrmi.client.AltrmiFactory; -import org.apache.excalibur.altrmi.client.AltrmiHostContext; -import org.apache.excalibur.altrmi.common.AltrmiConnectionException; -import org.apache.excalibur.altrmi.common.LookupReply; -import org.apache.excalibur.altrmi.common.LookupRequest; -import org.apache.excalibur.altrmi.common.AltrmiReply; -import org.apache.excalibur.altrmi.common.NotPublishedReply; -import org.apache.excalibur.altrmi.common.AltrmiAuthentication; -import org.apache.excalibur.altrmi.common.ExceptionReply; - import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; +import org.apache.excalibur.altrmi.common.AltrmiConnectionException; + /** * Class ClientClassAltrmiFactory @@ -48,49 +40,6 @@ // super(beanOnly, classLoader); //} - /** - * Method lookup - * - * - * @param publishedServiceName - * @param altrmiAuthentication - * - * @return - * - * @throws AltrmiConnectionException - * - */ - public Object lookup(String publishedServiceName, AltrmiAuthentication altrmiAuthentication) - throws AltrmiConnectionException { - - AltrmiReply ar = - mHostContext.getInvocationHandler() - .handleInvocation(new LookupRequest(publishedServiceName, altrmiAuthentication, mSession)); - - if (ar.getReplyCode() >= AltrmiReply.PROBLEMREPLY) { - if (ar instanceof NotPublishedReply) { - throw new AltrmiConnectionException("Service " + publishedServiceName - + " not published"); - } else if (ar instanceof ExceptionReply) { - ExceptionReply er = (ExceptionReply) ar; - - throw (AltrmiConnectionException) er.getReplyException(); - } else { - throw new AltrmiConnectionException("Problem doing lookup on service"); - } - } - - LookupReply lr = (LookupReply) ar; - DefaultProxyHelper baseObj = new DefaultProxyHelper(this, - mHostContext.getInvocationHandler(), - publishedServiceName, "Main", - lr.getReferenceID(), mSession); - Object retVal = getInstance(publishedServiceName, "Main", baseObj, isBeanOnly()); - - baseObj.registerImplObject(retVal); - - return retVal; - } protected Class getFacadeClass(String publishedServiceName, String objectName, boolean beanOnly) throws AltrmiConnectionException, ClassNotFoundException { String code = "2"; Index: src/java/org/apache/excalibur/altrmi/client/impl/ServerClassAltrmiFactory.java =================================================================== RCS file: /home/cvspublic/jakarta-avalon-excalibur/altrmi/src/java/org/apache/excalibur/altrmi/client/impl/ServerClassAltrmiFactory.java,v retrieving revision 1.3 diff -u -r1.3 ServerClassAltrmiFactory.java --- src/java/org/apache/excalibur/altrmi/client/impl/ServerClassAltrmiFactory.java 10 Apr 2002 23:36:58 -0000 1.3 +++ src/java/org/apache/excalibur/altrmi/client/impl/ServerClassAltrmiFactory.java 17 Apr 2002 17:45:28 -0000 @@ -10,25 +10,17 @@ -import org.apache.excalibur.altrmi.client.AltrmiFactory; -import org.apache.excalibur.altrmi.client.AltrmiHostContext; -import org.apache.excalibur.altrmi.common.ClassReply; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.util.HashMap; + import org.apache.excalibur.altrmi.common.AltrmiConnectionException; +import org.apache.excalibur.altrmi.common.AltrmiReply; +import org.apache.excalibur.altrmi.common.ClassReply; import org.apache.excalibur.altrmi.common.ClassRequest; +import org.apache.excalibur.altrmi.common.ClassRetrievalFailedReply; import org.apache.excalibur.altrmi.common.NotPublishedException; -import org.apache.excalibur.altrmi.common.LookupReply; -import org.apache.excalibur.altrmi.common.LookupRequest; -import org.apache.excalibur.altrmi.common.AltrmiReply; -import org.apache.excalibur.altrmi.common.NotPublishedReply; import org.apache.excalibur.altrmi.common.RequestFailedReply; -import org.apache.excalibur.altrmi.common.AltrmiAuthentication; -import org.apache.excalibur.altrmi.common.ExceptionReply; -import org.apache.excalibur.altrmi.common.ClassRetrievalFailedReply; - -import java.util.HashMap; - -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; /** @@ -54,51 +46,6 @@ super(beanOnly); } - - /** - * Method lookup - * - * - * @param publishedServiceName - * @param altrmiAuthentication - * - * @return - * - * @throws AltrmiConnectionException - * - */ - public Object lookup(String publishedServiceName, AltrmiAuthentication altrmiAuthentication) - throws AltrmiConnectionException { - - AltrmiReply ar = - mHostContext.getInvocationHandler() - .handleInvocation(new LookupRequest(publishedServiceName, altrmiAuthentication, - mSession)); - - if (ar.getReplyCode() >= AltrmiReply.PROBLEMREPLY) { - if (ar instanceof NotPublishedReply) { - throw new AltrmiConnectionException("Service " + publishedServiceName - + " not published"); - } else if (ar instanceof ExceptionReply) { - ExceptionReply er = (ExceptionReply) ar; - - throw (AltrmiConnectionException) er.getReplyException(); - } else { - throw new AltrmiConnectionException("Problem doing lookup on service"); - } - } - - LookupReply lr = (LookupReply) ar; - DefaultProxyHelper baseObj = new DefaultProxyHelper(this, - mHostContext.getInvocationHandler(), - publishedServiceName, "Main", - lr.getReferenceID(), mSession); - Object retVal = getInstance(publishedServiceName, "Main", baseObj, isBeanOnly()); - - baseObj.registerImplObject(retVal); - - return retVal; - } protected Class getFacadeClass(String publishedServiceName, String objectName, boolean beanOnly) throws AltrmiConnectionException, ClassNotFoundException{
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
