private static boolean checkType( String what, Object object, Class wrongClass, boolean isException) { final String type = isException ? "exception" : "object"; final String rendered = isException ? "thrown" : "returned"; System.out.println("For " + type + " " + rendered + " by " + what + ":"); if (wrongClass.isInstance(object)) { System.out.println("TEST FAILS: " + type + " loaded by test " + "classloader"); return false; } String className = object.getClass().getName(); if (!className.equals(wrongClass.getName())) { System.out.println( "TEST FAILS: " + rendered + " " + type + " has wrong class name: " + className); return false; } System.out.println( "Test passes: " + rendered + " " + type + " has same class name but is not same class"); return true; }
private static void checkStub(Remote stub, Class<? extends Remote> stubClass) { // Check remote stub is from the expected class. // if (stub.getClass() != stubClass) { if (!Proxy.isProxyClass(stub.getClass())) { throw new SecurityException("Expecting a " + stubClass.getName() + " stub!"); } else { InvocationHandler handler = Proxy.getInvocationHandler(stub); if (handler.getClass() != RemoteObjectInvocationHandler.class) { throw new SecurityException( "Expecting a dynamic proxy instance with a " + RemoteObjectInvocationHandler.class.getName() + " invocation handler!"); } else { stub = (Remote) handler; } } } // Check RemoteRef in stub is from the expected class // "sun.rmi.server.UnicastRef2". // RemoteRef ref = ((RemoteObject) stub).getRef(); if (ref.getClass() != UnicastRef2.class) { throw new SecurityException( "Expecting a " + UnicastRef2.class.getName() + " remote reference in stub!"); } // Check RMIClientSocketFactory in stub is from the expected class // "javax.rmi.ssl.SslRMIClientSocketFactory". // LiveRef liveRef = ((UnicastRef2) ref).getLiveRef(); RMIClientSocketFactory csf = liveRef.getClientSocketFactory(); if (csf == null || csf.getClass() != SslRMIClientSocketFactory.class) { throw new SecurityException( "Expecting a " + SslRMIClientSocketFactory.class.getName() + " RMI client socket factory in stub!"); } }