首页 > 解决方案 > 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>

标签: javajboss-eap-7

解决方案


推荐阅读