首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 11和jacorb。ClassNotFoundException: javax.rmi.CORBA.Stub

Java 11和jacorb。ClassNotFoundException: javax.rmi.CORBA.Stub
EN

Stack Overflow用户
提问于 2019-05-27 22:05:03
回答 2查看 4.2K关注 0票数 2

我正在尝试使用jacorb 3.9执行我的java 11 (openjdk)应用程序。该应用程序开始执行,但崩溃,并报告缺少:

代码语言:javascript
复制
javax.rmi.CORBA.Stub

我已经在CLASSPATH中包含了所有的jacorb库

代码语言:javascript
复制
set CLASSPATH = ${JACORB_PATH}/jacorb.jar:${CLASSPATH}
set CLASSPATH = ${JACORB_PATH}/jacorb-3.9.jar:${CLASSPATH}
set CLASSPATH = ${JACORB_PATH}/jacorb-omgapi.jar:${CLASSPATH}
set CLASSPATH = ${JACORB_PATH}/slf4j-api.jar:${CLASSPATH}
set CLASSPATH = ${JACORB_PATH}/slf4j-jdk14-1.7.14.jar:${CLASSPATH}
set CLASSPATH = ${JACORB_PATH}/jacorb-services.jar:${CLASSPATH}
set CLASSPATH = ${JACORB_PATH}/picocontainer.jar:${CLASSPATH}
set CLASSPATH = ${JACORB_PATH}/wrapper.jar:${CLASSPATH}
set CLASSPATH = ${JACORB_PATH}/antlr.jar:${CLASSPATH}
set CLASSPATH = ${JACORB_PATH}/idl.jar:${CLASSPATH}

在执行时,我会得到这样的结果:

代码语言:javascript
复制
java.lang.reflect.InvocationTargetException
...
Caused by: java.lang.ClassNotFoundException: javax.rmi.CORBA.Stub
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)

我还尝试使用以下命令来设置JDK_JAVA_OPTIONS:

代码语言:javascript
复制
--module-path ${JACORB_PATH} --add-modules java.corba 
-Dorg.omg.CORBA.ORBClass=org.jacorb.orb.ORB -Dorg.omg.CORBA.ORBSingletonClass=org.jacorb.orb.ORBSingleton

但是抱怨“发现了两个版本的模块slf4j.jdk14”

执行该程序的命令为:

代码语言:javascript
复制
java -classpath $CLASSPATH myprog.MYPROG 

该应用程序最初是为Java 8编写的,使用jacorb将以下参数传递给java命令可以正常工作:

代码语言:javascript
复制
-Djava.endorsed.dirs=JACORB_PATH
-Dorg.omg.CORBA.ORBClass=org.jacorb.orb.ORB
-Dorg.omg.CORBA.ORBSingletonClass=org.jacorb.orb.ORBSingleton

应用程序根本不使用rmi。它是一个“经典”的CORBA客户端。在尝试解析命名服务的初始引用时,它会崩溃

EN

回答 2

Stack Overflow用户

发布于 2019-05-28 17:09:49

这个问题似乎已经在mailing list项目中被提出了。一种解决方法是在jacorb-3.8.jar和sfl4j jars旁边的类路径上添加以下2个:

票数 6
EN

Stack Overflow用户

发布于 2020-12-16 08:43:27

遵循JEYs的建议,替换JDKs9和更高版本中缺少的类javax.rmi.CORBA.Stub,我用十几个相关的JDK-8类组成了一个存根组件,并且这个方法奏效了。javax.rmi.CORBA.Stub的代码覆盖率最终缩减为Stub.toString()方法,该方法同样通过上下文调用超类方法。

因此,JDK9、10 (以及更高版本)的解决方案是有一个空的Java类代理,以满足类加载器的要求;JacOrb源代码可以使用类ObjectImpl来代替,以最终删除临时的RMI物。

代码语言:javascript
复制
package javax.rmi.CORBA;

import org.omg.CORBA_2_3.portable.ObjectImpl;

/**
 * JacOrb 3.9 surrogate 
 * [Base class from which all RMI-IIOP stubs must inherit.]
 */
public abstract class Stub extends ObjectImpl implements java.io.Serializable
{
}

在JDK8之后,JacOrb库和类名替换的背书就过时了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56327632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档