java - 部署在 weblogic 上的 RMI 客户端获取 ClassNotFoundException
问题描述
这是我得到的例外:
]] Root cause of ServletException.
java.lang.NullPointerException
at com.xyz.ServiceFactory.getAppName(ServiceFactory.java:190)
at com.xyz.ServiceFactory.getApplicationName(ServiceFactory.java:128)
at com.xyz.SomeServiceAccessorProxy.<init>(SomeServiceAccessorProxy.java:10)
at com.xyz.SomeServiceAccessorImpl.getService(SomeServiceAccessorImpl.java:41)
at com.xyz.validateUserLogin(SomeCommon.java:89)
Truncated. see log file for complete stacktrace
所以上面的异常是只能看到的。令人惊讶的是,关闭 weblogic - 我们在下面粘贴的日志中获得了更多详细信息:(完整日志)
<23/05/2019 10:49:25 AM EST> <Notice> <WebLogicServer> <BEA-000388> <JVM
called the WebLogic Server shutdown hook. The server will force shutdown
now.>
<23/05/2019 10:49:25 AM EST> <Notice> <WebLogicServer> <BEA-000396> <Server
shutdown has been requested by <WLS Kernel>.>
<23/05/2019 10:49:25 AM EST> <Notice> <WebLogicServer> <BEA-000365> <Server
state changed to FORCE_SUSPENDING.>
<23/05/2019 10:49:25 AM EST> <Notice> <WebLogicServer> <BEA-000365> <Server
state changed to ADMIN.>
<23/05/2019 10:49:25 AM EST> <Notice> <WebLogicServer> <BEA-000365> <Server
state changed to FORCE_SHUTTING_DOWN.>
<23/05/2019 10:49:25 AM EST> <Notice> <Server> <BEA-002607> <Channel
"Default[7]", listening on fe80:0:0:0:515e:8ad6:9c96:b298:7001, was shut
down.>
<23/05/2019 10:49:25 AM EST> <Notice> <Server> <BEA-002607> <Channel
"Default[6]", listening on fe80:0:0:0:9857:44d:606c:9ebd:7001, was shut
down.>
<23/05/2019 10:49:25 AM EST> <Notice> <Server> <BEA-002607> <Channel
"Default[5]", listening on fe80:0:0:0:162:e6b1:5031:79e5:7001, was shut
down.>
<23/05/2019 10:49:25 AM EST> <Notice> <Server> <BEA-002607> <Channel
"Default[1]", listening on 172.26.11.12:7001, was shut down.>
<23/05/2019 10:49:25 AM EST> <Notice> <Server> <BEA-002607> <Channel
"Default[4]", listening on fe80:0:0:0:f4a9:ad8e:35cf:ad32:7001, was shut
down.>
<23/05/2019 10:49:25 AM EST> <Notice> <Server> <BEA-002607> <Channel
"Default[2]", listening on fe80:0:0:0:2154:84d6:eba1:3618:7001, was shut
down.>
<23/05/2019 10:49:25 AM EST> <Notice> <Server> <BEA-002607> <Channel
"Default[3]", listening on fe80:0:0:0:2562:eb0f:7c68:7a63:7001, was shut
down.>
<23/05/2019 10:49:25 AM EST> <Notice> <Server> <BEA-002607> <Channel
"Default", listening on 192.168.56.1:7001, was shut down.>
<23/05/2019 10:49:25 AM EST> <Notice> <Server> <BEA-002607> <Channel
"Default[9]", listening on 127.0.0.1:7001, was shut down.>
<23/05/2019 10:49:25 AM EST> <Notice> <Server> <BEA-002607> <Channel
"Default[10]", listening on 0:0:0:0:0:0:0:1:7001, was shut down.>
<23/05/2019 10:49:25 AM EST> <Notice> <Server> <BEA-002607> <Channel
"Default[8]", listening on fe80:0:0:0:dc3e:fba8:561c:e9ca:7001, was shut
down.>
<23/05/2019 10:49:25 AM EST> <Error> <WebLogicServer> <BEA-000381>
<ServerLifeCycle operation failed.
Message: halt call on RuntimeServerService failed
java.lang.ExceptionInInitializerError
java.lang.ExceptionInInitializerError
at weblogic.iiop.IIOPOutputStream.<clinit>(IIOPOutputStream.java:138)
at weblogic.iiop.Message.getOutputStream(Message.java:175)
at weblogic.iiop.LocateRequestMessage.<init>
(LocateRequestMessage.java:93)
at weblogic.iiop.IORManager.locateNameService(IORManager.java:196)
at weblogic.iiop.IORManager.createInitialReference(IORManager.java:120)
Truncated. see log file for complete stacktrace
Caused By: org.omg.CORBA.INITIALIZE: Cannot instantiate
com.ibm.ws.orb.WSUtilDelegateImpl vmcid: 0x0 minor code: 0
completed: No
at javax.rmi.CORBA.Util.createDelegate(Util.java:355)
at javax.rmi.CORBA.Util.<clinit>(Util.java:67)
at weblogic.iiop.IIOPOutputStream.<clinit>(IIOPOutputStream.java:138)
at weblogic.iiop.Message.getOutputStream(Message.java:175)
at weblogic.iiop.LocateRequestMessage.<init>
(LocateRequestMessage.java:93)
Truncated. see log file for complete stacktrace
Caused By: java.lang.ClassNotFoundException:
com.ibm.ws.orb.WSUtilDelegateImpl (no security manager: RMI class loader
disabled)
at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:393)
at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:185)
at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:637)
at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:219)
at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:152)
Truncated. see log file for complete stacktrace
>
<23/05/2019 10:49:25 AM EST> <Error> <WebLogicServer> <BEA-000381>
<ServerLifeCycle operation failed.
Message: halt call on EditServerService failed
java.lang.NoClassDefFoundError: Could not initialize class
weblogic.iiop.IIOPOutputStream
java.lang.NoClassDefFoundError: Could not initialize class
weblogic.iiop.IIOPOutputStream
at weblogic.iiop.Message.getOutputStream(Message.java:175)
at weblogic.iiop.LocateRequestMessage.<init>
(LocateRequestMessage.java:93)
at weblogic.iiop.IORManager.locateNameService(IORManager.java:196)
at weblogic.iiop.IORManager.createInitialReference(IORManager.java:120)
at weblogic.corba.orb.ORB.string_to_object(ORB.java:341)
Truncated. see log file for complete stacktrace
>
<23/05/2019 10:49:25 AM EST> <Error> <WebLogicServer> <BEA-000381> <ServerLifeCycle operation failed.
Message: halt call on DomainRuntimeServerService failed
java.lang.NoClassDefFoundError: Could not initialize class weblogic.iiop.IIOPOutputStream
java.lang.NoClassDefFoundError: Could not initialize class weblogic.iiop.IIOPOutputStream
at weblogic.iiop.Message.getOutputStream(Message.java:175)
at weblogic.iiop.LocateRequestMessage.<init>(LocateRequestMessage.java:93)
at weblogic.iiop.IORManager.locateNameService(IORManager.java:196)
at weblogic.iiop.IORManager.createInitialReference(IORManager.java:120)
at weblogic.corba.orb.ORB.string_to_object(ORB.java:341)
Truncated. see log file for complete stacktrace
类未找到 weblogic 抱怨的异常:WsnInitialContextFactory存在于 web-inf\lib 中的 jar 文件中
已经仔细检查过了。注意 - com.xyz.ServiceFactory 类也存在于不同的 jar 中,该 jar 也位于 web-inf\lib 中。
所以来自 web-inf\lib 的类被找到并被调用,但是当代码命中类时:'WsnInitialContextFactory'我们遇到 ClassNotFoundException。
NOTE2:要注意的另一件事是,在进行上述调用之前,我明确设置了以下代码行:
System.setProperty("java.naming.factory.initial", "com.ibm.websphere.naming.WsnInitialContextFactory");
注意 3:如果我通过 weblogic 启动脚本将这些 jar 放在全局类路径中 - 那么我不会遇到这个问题:
set JAVA_PROPERTIES=%JAVA_PROPERTIES% -Dweblogic.ext.dirs=C:\rmi_ibm_jars
我不想将它们放在全局类路径中,因为不建议也不推荐这样做。
解决方案
推荐阅读
- python - 如何获取最近的订单日期?
- reactjs - 删除创建反应应用程序默认样式
- amazon-web-services - 通过 AWS Websockets 网关调用 SignalR
- ruby-on-rails - 如何构建两个模型之间的对话?
- scala - 使用 play-json-extensions 在序列化期间排除某些字段
- excel - 循环以根据组合框过滤器项保存多个单独的文件
- javascript - 从对象中弹出键,值
- javascript - 从 Java 转换为 Javascript,整数数学问题
- .net-core - 使用 .net core 从 Active Directory 获取 Windows 用户组
- powerbi - 如何在卡片中显示切片器的多选值?