java.lang.IllegalArgumentException: repeated interface: java.io.Serializable while
creating proxy in ExternalContext
---------------------------------------------------------------------------------------------------------------------
Key: JBAS-4755
URL:
http://jira.jboss.com/jira/browse/JBAS-4755
Project: JBoss Application Server
Issue Type: Bug
Security Level: Public (Everyone can see)
Affects Versions: JBossAS-4.2.1.GA
Reporter: Roland Räz
A java.lang.reflect.Proxy.getProxyClass may not be called with multiple identical class
object. This could be ensured in ExternalContext$CachedContext.createProxyContext.
Changing the signature of org.jboss.util.Classes form (List allIfaces, Class c) to (Set
allIfaces, Class c) and refactoring all calls to this method could be even better.
This bug was probably caused by fixing JBAS-4048.
The following fix worked for me:
static Context createProxyContext(Context ctx)
{
ClassLoader loader = Thread.currentThread().getContextClassLoader();
ArrayList<Class> ifaces = new ArrayList<Class>();
Classes.getAllInterfaces(ifaces, ctx.getClass());
Set ifacesSet = new HashSet(ifaces);
Class[] interfaces = new Class[ifacesSet.size()];
ifacesSet.toArray(interfaces);
InvocationHandler handler = new CachedContext(ctx);
Context proxyCtx = (Context) Proxy.newProxyInstance(loader, interfaces, handler);
return proxyCtx;
}
Exception:
java.lang.IllegalArgumentException: repeated interface: java.io.Serializable
at java.lang.reflect.Proxy.getProxyClass(Proxy.java:370)
at java.lang.reflect.Proxy.newProxyInstance(Proxy.java:581)
at
org.jboss.naming.ExternalContext$CachedContext.createProxyContext(ExternalContext.java:503)
at org.jboss.naming.ExternalContext.rebind(ExternalContext.java:291)
at org.jboss.naming.ExternalContext.startService(ExternalContext.java:208)
at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289)
at org.jboss.system.ServiceMBeanSupport.start(ServiceMBeanSupport.java:196)
at
com.winterthur.jackpot.jboss.jndi.JBossJndiUnbindTest.setUp(JBossJndiUnbindTest.java:190)
at junit.framework.TestCase.runBare(TestCase.java:125)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at
org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira