【问题标题】:JBOSS MalformedURLException: unknown protocol: vfs using RMIJBOSS MalformedURLException:未知协议:vfs 使用 RMI
【发布时间】:2024-04-21 20:50:01
【问题描述】:

我最近尝试在 JBOSS EAP 6.4 环境中部署我的应用程序,使其在 Tomcat 上完全运行,但在 JBOSS 上,每当我的应用程序尝试从客户端发送文件时,似乎都会出现格式错误的 URL 异常在进行 RMI 调用(特别是 rmiio)时发送给服务器。

我的错误日志包含在下面

    16:38:31,793 INFO  [stdout] (Thread-89) java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
16:38:31,794 INFO  [stdout] (Thread-89)     java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
16:38:31,794 INFO  [stdout] (Thread-89)     java.net.MalformedURLException: unknown protocol: vfs
16:38:31,795 INFO  [stdout] (Thread-89)     at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source) ~[?:?]
16:38:31,795 INFO  [stdout] (Thread-89)     at sun.rmi.transport.Transport$1.run(Unknown Source) ~[?:?]
16:38:31,795 INFO  [stdout] (Thread-89)     at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_92]
16:38:31,795 INFO  [stdout] (Thread-89)     at sun.rmi.transport.Transport.serviceCall(Unknown Source) ~[?:?]
16:38:31,796 INFO  [stdout] (Thread-89)     at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source) ~[?:?]
16:38:31,796 INFO  [stdout] (Thread-89)     at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source) ~[?:?]
16:38:31,796 INFO  [stdout] (Thread-89)     at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source) ~[?:?]
16:38:31,796 INFO  [stdout] (Thread-89)     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) ~[?:1.8.0_92]
16:38:31,796 INFO  [stdout] (Thread-89)     at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[?:1.8.0_92]
16:38:31,797 INFO  [stdout] (Thread-89)     at java.lang.Thread.run(Unknown Source) ~[?:1.8.0_92]
16:38:31,797 INFO  [stdout] (Thread-89)     at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:276) ~[?:?]
16:38:31,797 INFO  [stdout] (Thread-89)     at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:253) ~[?:?]
16:38:31,797 INFO  [stdout] (Thread-89)     at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:162) ~[?:?]
16:38:31,798 INFO  [stdout] (Thread-89)     at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:227) ~[?:1.8.0_92]
16:38:31,798 INFO  [stdout] (Thread-89)     at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:179) ~[?:1.8.0_92]
16:38:31,798 INFO  [stdout] (Thread-89)     at com.sun.proxy.$Proxy107.sendFile(Unknown Source) ~[?:?]
16:38:31,798 INFO  [stdout] (Thread-89)     at rmiclient.RmiTaskStarter.sendFile(RmiTaskStarter.java:98) ~[rmiclient-1.0.0.jar:1.0.0]
16:38:31,798 INFO  [stdout] (Thread-89)     at rmiclient.RmiTaskStarter.compute(RmiTaskStarter.java:56) ~[rmiclient-1.0.0.jar:1.0.0]
16:38:31,799 INFO  [stdout] (Thread-89)     at webapp.FrontEnd.Worker.runTask(Worker.java:68) [classes:?]
16:38:31,799 INFO  [stdout] (Thread-89)     at webapp.FrontEnd.Worker.run(Worker.java:52) [classes:?]
16:38:31,799 INFO  [stdout] (Thread-89)     at java.lang.Thread.run(Thread.java:745) [?:1.8.0_92]
16:38:31,799 INFO  [stdout] (Thread-89) Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
16:38:31,799 INFO  [stdout] (Thread-89)     java.net.MalformedURLException: unknown protocol: vfs
16:38:31,800 INFO  [stdout] (Thread-89)     at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source) ~[?:?]
16:38:31,800 INFO  [stdout] (Thread-89)     at sun.rmi.transport.Transport$1.run(Unknown Source) ~[?:?]
16:38:31,800 INFO  [stdout] (Thread-89)     at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_92]
16:38:31,800 INFO  [stdout] (Thread-89)     at sun.rmi.transport.Transport.serviceCall(Unknown Source) ~[?:?]
16:38:31,801 INFO  [stdout] (Thread-89)     at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source) ~[?:?]
16:38:31,801 INFO  [stdout] (Thread-89)     at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source) ~[?:?]
16:38:31,802 INFO  [stdout] (Thread-89)     at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source) ~[?:?]
16:38:31,802 INFO  [stdout] (Thread-89)     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) ~[?:1.8.0_92]
16:38:31,802 INFO  [stdout] (Thread-89)     at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[?:1.8.0_92]
16:38:31,802 INFO  [stdout] (Thread-89)     at java.lang.Thread.run(Unknown Source) ~[?:1.8.0_92]
16:38:31,802 INFO  [stdout] (Thread-89) Caused by: java.net.MalformedURLException: unknown protocol: vfs
16:38:31,803 INFO  [stdout] (Thread-89)     at java.net.URL.<init>(Unknown Source) ~[?:1.8.0_92]
16:38:31,803 INFO  [stdout] (Thread-89)     at java.net.URL.<init>(Unknown Source) ~[?:1.8.0_92]
16:38:31,803 INFO  [stdout] (Thread-89)     at java.net.URL.<init>(Unknown Source) ~[?:1.8.0_92]
16:38:31,803 INFO  [stdout] (Thread-89)     at sun.rmi.server.LoaderHandler.pathToURLs(Unknown Source) ~[?:?]
16:38:31,804 INFO  [stdout] (Thread-89)     at sun.rmi.server.LoaderHandler.loadProxyClass(Unknown Source) ~[?:?]
16:38:31,804 INFO  [stdout] (Thread-89)     at java.rmi.server.RMIClassLoader$2.loadProxyClass(Unknown Source) ~[?:1.8.0_92]
16:38:31,804 INFO  [stdout] (Thread-89)     at java.rmi.server.RMIClassLoader.loadProxyClass(Unknown Source) ~[?:1.8.0_92]
16:38:31,805 INFO  [stdout] (Thread-89)     at sun.rmi.server.MarshalInputStream.resolveProxyClass(Unknown Source) ~[?:?]
16:38:31,805 INFO  [stdout] (Thread-89)     at java.io.ObjectInputStream.readProxyDesc(Unknown Source) ~[?:1.8.0_92]
16:38:31,805 INFO  [stdout] (Thread-89)     at java.io.ObjectInputStream.readClassDesc(Unknown Source) ~[?:1.8.0_92]
16:38:31,805 INFO  [stdout] (Thread-89)     at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source) ~[?:1.8.0_92]
16:38:31,805 INFO  [stdout] (Thread-89)     at java.io.ObjectInputStream.readObject0(Unknown Source) ~[?:1.8.0_92]
16:38:31,806 INFO  [stdout] (Thread-89)     at java.io.ObjectInputStream.readObject(Unknown Source) ~[?:1.8.0_92]
16:38:31,806 INFO  [stdout] (Thread-89)     at sun.rmi.server.UnicastRef.unmarshalValue(Unknown Source) ~[?:?]
16:38:31,806 INFO  [stdout] (Thread-89)     at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source) ~[?:?]
16:38:31,806 INFO  [stdout] (Thread-89)     at sun.rmi.transport.Transport$1.run(Unknown Source) ~[?:?]
16:38:31,806 INFO  [stdout] (Thread-89)     at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_92]
16:38:31,807 INFO  [stdout] (Thread-89)     at sun.rmi.transport.Transport.serviceCall(Unknown Source) ~[?:?]
16:38:31,807 INFO  [stdout] (Thread-89)     at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source) ~[?:?]
16:38:31,807 INFO  [stdout] (Thread-89)     at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source) ~[?:?]
16:38:31,807 INFO  [stdout] (Thread-89)     at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source) ~[?:?]
16:38:31,808 INFO  [stdout] (Thread-89)     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) ~[?:1.8.0_92]
16:38:31,808 INFO  [stdout] (Thread-89)     at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[?:1.8.0_92]
16:38:31,808 INFO  [stdout] (Thread-89)     at java.lang.Thread.run(Unknown Source) ~[?:1.8.0_92]

通过查看其他示例,我注意到其他格式错误的urlexceptions 包含no protocolunknown exception c,但其中大多数似乎是由代码库设置问题引起的,我不相信我有。此外,即使与 RMI 一起使用,我似乎也找不到任何提及 vfs 的内容。任何建议将不胜感激,谢谢!

【问题讨论】:

    标签: java jboss rmi malformedurlexception


    【解决方案1】:

    您在java.rmi.server.codebase 设置中的某处使用vfs:。您只能使用 Java 识别的协议。代码库 URL 几乎总是 HTTP。

    【讨论】:

    • 感谢您的回复!因为我使用了System.setProperty("java.rmi.server.codebase", class.getProtectionDomain().getCodeSource() .getLocation().toString());,所以我错过了这一点,并且我假设我的所有路径都只使用文件协议。所以要使用 JBOSS 运行它,我需要设置自己的 HTTP 网络服务器 like so?