[
https://jira.jboss.org/jira/browse/JBAS-6912?page=com.atlassian.jira.plug...
]
Adrian Brock closed JBAS-6912.
------------------------------
Resolution: Incomplete Description
Assignee: (was: Scott M Stark)
I'm closing this as "incomplete description" since it is not clear how this
relates to any JBoss code.
The specific failure is in the RMIClassLoader where it tries to determine the
"annotation"
from the URLs of the classloader.
For any jboss classloader the annotations are always "null" because we use a
different
mechanism to control remote classloading, so you couldn't possibly get the error
shown.
This is partly because sending the urls across the wire on every RMI request leads to a
lot
of bloat and inefficiency. See getURLs() here:
http://viewvc.jboss.org/cgi-bin/viewvc.cgi/jbossas/tags/JBoss_4_0_1/syste...
As for the File.toURL() bug in the JDK, this is a known issue mentioned in the javadoc
with a "workaround" so it isn't a JBoss issue (unless we have code that is
not using the
correct mechanism).
http://java.sun.com/javase/6/docs/api/java/io/File.html#toURL()
The method is actually deprecated because of this problem.
If current class loader is a URLClassLoader then spaces anywhere in
the url list causes MalformedURLExceptions to be reported on JNDI lookup
--------------------------------------------------------------------------------------------------------------------------------------------
Key: JBAS-6912
URL:
https://jira.jboss.org/jira/browse/JBAS-6912
Project: JBoss Application Server
Issue Type: Bug
Security Level: Public(Everyone can see)
Components: Naming
Affects Versions: JBossAS-4.2.1.GA
Environment: Observed on Windows
Reporter: David Crighton
Our product (Websphere Message Broker) integrates with several JMS providers. We recently
got a customer reporting excepetions on JBoss 4.2.1 which we tracked down to be during
JNDI lookup of the JMS Destinations from JBoss. It turns out that if the threads
classloader is a URLClassLoader and any of its URLs contain a space then the following
exception is observed:
javax.naming.CommunicationException [Root exception is java.rmi.ServerException:
RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.net.MalformedURLException: no protocol:
files/jboss/jboss-4.2.1.GA/client/blah.jar]
com.ibm.mqst.broker.jmsService.BrokerJMSService::handleNamingException: Rethrowing for
application level handling
javax.naming.CommunicationException [Root exception is java.rmi.ServerException:
RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.net.MalformedURLException: no protocol:
files/jboss/jboss-4.2.1.GA/client/blah.jar]
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:724)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:589)
at javax.naming.InitialContext.lookup(InitialContext.java:363)
at
com.ibm.mqst.broker.jmsService.BrokerJMSService.<init>(BrokerJMSService.java:402)
at com.ibm.mqst.broker.jmsService.JBossConnector.main(JBossConnector.java:52)
Caused by: java.rmi.ServerException: RemoteException occurred in server thread; nested
exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.net.MalformedURLException: no protocol: files/jboss/jboss-4.2.1.GA/client/blah.jar
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:341)
at sun.rmi.transport.Transport$1.run(Transport.java:171)
at java.security.AccessController.doPrivileged(AccessController.java:284)
at sun.rmi.transport.Transport.serviceCall(Transport.java:167)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:547)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:802)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:661)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:896)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:735)
at
sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:263)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:239)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:141)
at org.jnp.server.NamingServer_Stub.lookup(Unknown Source)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:627)
... 4 more
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception
is:
java.net.MalformedURLException: no protocol: files/jboss/jboss-4.2.1.GA/client/blah.jar
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:298)
at sun.rmi.transport.Transport$1.run(Transport.java:171)
at java.security.AccessController.doPrivileged(AccessController.java:284)
at sun.rmi.transport.Transport.serviceCall(Transport.java:167)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:547)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:802)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:661)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:896)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:735)
Caused by: java.net.MalformedURLException: no protocol:
files/jboss/jboss-4.2.1.GA/client/blah.jar
at java.lang.Throwable.<init>(Throwable.java:67)
at java.net.URL.<init>(URL.java:489)
at java.net.URL.<init>(URL.java:464)
at java.net.URL.<init>(URL.java:413)
at sun.rmi.server.LoaderHandler.pathToURLs(LoaderHandler.java:751)
at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:147)
at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:631)
at org.jboss.system.JBossRMIClassLoader.loadClass(JBossRMIClassLoader.java:91)
at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:258)
at sun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:209)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1586)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1507)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1743)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1340)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:362)
at javax.naming.CompoundName.readObject(CompoundName.java:796)
at sun.reflect.GeneratedMethodAccessor70.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
at java.lang.reflect.Method.invoke(Method.java:599)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:985)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1860)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1764)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1340)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:362)
at sun.rmi.server.UnicastRef.unmarshalValue(UnicastRef.java:318)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:295)
... 9 more
The customer was able to recreate outside the broker using the following code:
URL[] urls = new URL[4];
try {
File file1 = new File("c:\\program
files\\jboss\\jboss-4.2.1.GA\\client\\blah.jar");
File file2 = new
File("c:\\temp\\jboss\\jboss-4.2.1.GA\\client\\jbossall-client.jar");
File file3 = new File("c:\\program
files\\jboss\\jboss-4.2.1.GA\\client\\blah.jar");
File file4 = new File("c:\\program
files\\jboss\\jboss-4.2.1.GA\\client\\blah.jar");
System.out.println("example url: " + file1.toURL().toExternalForm() +
"--" + file1.toURI().toURL().toExternalForm());
urls[0] = file1.toURL();
urls[1] = file2.toURL();
urls[2] = file3.toURL();
urls[3] = file4.toURL();
} catch (MalformedURLException e1) {
// TODO Auto-generated catch block
System.println("Malformed URI for JRE");
e1.printStackTrace();
System.exit(-1);
}
URLClassLoader cl = new URLClassLoader(urls);
Thread.currentThread().setContextClassLoader(cl);
Hashtable environment = new Hashtable();
environment.put(Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
environment.put(Context.PROVIDER_URL, "jnp://server_address:1099");
environment.put(Context.REFERRAL, "throw");
try{
Context c = new InitialDirContext(environment);
ConnectionFactory connectionFactory = (ConnectionFactory)
c.lookup("ConnectionFactory");
}
catch(Exception e){
//this is where we catch the NamingException
e.printStackTrace();
}
Escaping the spaces resolves problem ie/
urls[0] = file1.toURI().toURL();
We will be using this workaround in our product so impact can be considered small.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira