gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 20:18:13 27 4
gpt4 key购买 nike

调用 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 的代码库运行 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 属性集来运行 server,但是 file://codebase URL 将无法工作,除非要么所有客户端都在服务器主机上运行,​​在这种情况下您根本不需要代码库功能,要么它指向注册表和客户端都可以使用的形式的共享文件夹。通常是 HTTP。

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

我也想知道您为什么要使用 JSON。 RMI 建立在对象序列化之上。您不需要添加另一个序列化程序。

关于远程对象中 javax.json.JsonValue 的 Java RMI NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34146160/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com