Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java11和jacorb。ClassNotFoundException:javax.rmi.CORBA.Stub_Java_Java 11_Jacorb - Fatal编程技术网

java11和jacorb。ClassNotFoundException:javax.rmi.CORBA.Stub

java11和jacorb。ClassNotFoundException:javax.rmi.CORBA.Stub,java,java-11,jacorb,Java,Java 11,Jacorb,我正在尝试使用jacorb 3.9执行我的java 11(openjdk)应用程序。该应用程序开始执行,但因缺少以下内容而崩溃: javax.rmi.CORBA.Stub 我已经在类路径中包含了所有jacorb库 set CLASSPATH = ${JACORB_PATH}/jacorb.jar:${CLASSPATH} set CLASSPATH = ${JACORB_PATH}/jacorb-3.9.jar:${CLASSPATH} set CLASSPATH = ${JACORB_PAT

我正在尝试使用jacorb 3.9执行我的java 11(openjdk)应用程序。该应用程序开始执行,但因缺少以下内容而崩溃:

javax.rmi.CORBA.Stub
我已经在类路径中包含了所有jacorb库

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}
执行时,我得到以下信息:

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_选项:

--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”

执行程序的命令是:

java -classpath $CLASSPATH myprog.MYPROG 
该应用程序最初是为Java 8编写的,可以使用jacorb将以下参数传递给Java命令:

-Djava.endorsed.dirs=JACORB_PATH
-Dorg.omg.CORBA.ORBClass=org.jacorb.orb.ORB
-Dorg.omg.CORBA.ORBSingletonClass=org.jacorb.orb.ORBSingleton

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

似乎该问题已在项目中提出。解决方法是在jacorb-3.8.jar和sfl4j jar旁边的类路径上添加以下2个:

  • jacorb-omgapi-3.8.jar-来自jacorb发行版
  • jboss-rmi-api_1.0_spec-1.0.6.Final.jar-来自。该库提供JacORB最初从JRE使用的javarmi API。()

根据JEYs的建议,用JDKs9和更高版本中缺少的类
javax.rmi.CORBA.Stub
替换,我用十几个相关的JDK-8类组成了一个Stub组件,这很有效。
javax.rmi.CORBA.Stub
的代码覆盖率最终降低为
Stub.toString()
方法,该方法通过上下文再次调用超级类方法

因此JDK9、10(可能更高版本)的解决方案是使用一个空的Java类代理,以满足类加载器的要求;JacOrb源代码可以使用类ObjectImpl来代替,以最终确定暂时的RMI内容

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
{
}

JacOrb库和类名替换的认可在JDK 8之后已经过时。

java SE 11中删除了java.corba模块,更多信息请参见JEP 320。谢谢,这就是我使用JacOrb的原因。好的,但您的问题包括使用“-add modules java.corba”进行测试,这表明您正在寻找一种方法将其恢复。我对JacORB一无所知,但例外情况表明它依赖JDK来提供RMI-IIOP类。这些类在java.corba模块中,我只是想使用jacorb。我在java 11和jacorb 3.9中编译……如果我不使用--add模块,我会得到上面描述的javax错误,即使所有jacorb lib都在classPath中,就是这样。我在类路径中已经有了jacorb omgapi,但是我缺少了一个javarmi api。非常感谢您的帮助是的,这是因为@AlanBateman说JEP 320从JDK中删除了模块,非常感谢您的帮助!!它就像一个符咒。我只是用上面的代码创建了一个jar,并将其添加到$CLASSPATH for jaco脚本中。简单有效。不再依赖jboss rmi库