加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

远程对象中javax.json.JsonValue的Java RMI NoClassDefFoundErro

发布时间:2020-12-15 01:04:29 所属栏目:Java 来源:网络整理
导读:在调用UnicastRemoteObject.exportObject()期间遇到异常. javax.json.jar位于类路径中,并且在应用程序的许多其他位置使用,没有任何问题. 应用程序的这一部分工作正常,直到我添加了一个将JsonValue返回给远程对象的方法. 有任何想法吗? java.rmi.ServerError

在调用UnicastRemoteObject.exportObject()期间遇到异常.

javax.json.jar位于类路径中,并且在应用程序的许多其他位置使用,没有任何问题.

应用程序的这一部分工作正常,直到我添加了一个将JsonValue返回给远程对象的方法.

有任何想法吗?

java.rmi.ServerError: Error occurred in server thread; nested exception is: 
    java.lang.NoClassDefFoundError: javax/json/JsonValue
    at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:416)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:267)
    at sun.rmi.transport.Transport$1.run(Transport.java:177)
    at sun.rmi.transport.Transport$1.run(Transport.java:174)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:556)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:811)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:670)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
    at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:275)
    at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:252)
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:378)
    at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)

注意:
我也尝试使用直接指向javax.json.jar的codebase运行rmiregistry,但异常仍然存在

rmiregistry -J-Djava.rmi.server.codebase=file:///JarLibrary/javax.json.jar &
最佳答案

Running into Exception caused during call to UnicastRemoteObject.exportObject().

不,你不是.查看堆栈跟踪.它发生在Registry.bind()中.

您需要使用java.rmi.server.codebase属性集运行服务器,但是file:// codebase URL不会起作用,除非所有客户端都在服务器主机中运行,在这种情况下,您不能确实需要代码库功能,或者指向注册表和客户端都可以使用的表单中的共享文件夹.它通常是HTTP.

但我怀疑你是否需要代码库功能.您只需确保相关的jar文件位于Registry和客户端的CLASSPATH上.确保Registry的最简单方法是在服务器JVM中使用LocateRegistry.createRegistry()而不是外部rmiregistry程序.

我也想知道你为什么要使用JSON. RMI建立在对象序列化之上.您不需要添加其他序列化程序.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读