java - JBoss 仅在 linux 服务器上部署时抛出 ClassNotFoundException com.sun.org.apache.xml.internal.resolver.CatalogManager
问题描述
我正在尝试将具有工作部署的工作 JBoss EAP 7.2 安装从 Windows 移动到 Linux。为此,我将 EAP 目录复制到了 linux。当开始部署失败时:
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.company.app.core.services.foo.message.FooMessageClientProducer]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: com/sun/org/apache/xml/internal/resolver/CatalogManager
at deployment.my-deployment.war//org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:184)
at deployment.my-deployment.war//org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:117)
at deployment.my-deployment.war//org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:300)
... 51 more
Caused by: java.lang.NoClassDefFoundError: com/sun/org/apache/xml/internal/resolver/CatalogManager
at deployment.my-deployment.war//com.sun.xml.ws.util.xml.XmlUtil.createDefaultCatalogResolver(XmlUtil.java:296)
at deployment.my-deployment.war//com.sun.xml.ws.client.WSServiceDelegate.createCatalogResolver(WSServiceDelegate.java:348)
at deployment.my-deployment.war//com.sun.xml.ws.client.WSServiceDelegate.parseWSDL(WSServiceDelegate.java:334)
at deployment.my-deployment.war//com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:292)
at deployment.my-deployment.war//com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:201)
at deployment.my-deployment.war//com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:182)
at deployment.my-deployment.war//com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:178)
at deployment.my-deployment.war//com.sun.xml.ws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:89)
at deployment.my-deployment.war//javax.xml.ws.Service.<init>(Service.java:82)
at deployment.my-deployment.war//com.company.app.foo.generated.message.Service.<init>(Service.java:56)
at deployment.my-deployment.war//com.company.app.core.services.foo.message.FooMessageClientProducer.<init>(FooMessageClientProducer.java:28)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at deployment.my-deployment.war//org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:172)
... 53 more
Caused by: java.lang.ClassNotFoundException: com.sun.org.apache.xml.internal.resolver.CatalogManager from [Module "deployment.my-deployment.war" from Service Module Loader]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:255)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:410)
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:116)
... 69 more
由于此部署在 Windows 上运行良好,我很困惑。两个系统都使用 Oracle JDK 11.0.1+13。Windows 10 和 Ubuntu 18.04。删除了 jboss tmp 文件。服务器无需部署即可启动。
解决方法
当提供包含缺失类的依赖项时,部署也可以在 Linux 上运行。这是意料之中的,但是我仍然不明白为什么这个问题只发生在 Linux 上。
<dependency>
<groupId>com.sun.org.apache.xml.internal</groupId>
<artifactId>resolver</artifactId>
<version>20050927</version>
</dependency>
解决方案
推荐阅读
- python - 我正在尝试导入我的数据库值,但没有显示结果,即使表结构是正确的
- java - Jenkins - 从 Groovy 访问 JAVA“getProperties”
- django - djstripe 客户订阅删除 webhook 事件无法正常工作
- java - 使用selenium java在excel中读取三列并写入两列
- nested - 您可以使用动态实例化的对象调用赛普拉斯中的方法吗?
- java - 尝试在空对象上调用虚拟方法 'void androidx.appcompat.widget.Toolbar.setNavigationIcon(android.graphics.drawable.Drawable)'
- image - 是否可以将 coreml 模型中输入张量的类型从多数组更改为图像?
- spring-security - 不允许直接调用微服务。只允许通过 Zuul API Gateway
- powershell - 为每个文件创建文件夹并将文件移动到文件夹中
- javascript - Html 视频支持不同的视频 src 类型