JBoss 6 EAP JaxWsProxyFactoryBean NoClassDefFoundError
我正在从JBoss 6.1.0 JBoss EAP 4.2.xa迁移一个应用程序 我知道我已经改变了很多东西,其中最重要的一点是JBoss现在包含了大多数框架/最常用的库(模块),这很好(war文件更小) 现在,我有两个应用程序,都安装了Spring/CXF和Maven2。一个公开web服务,第二个公开第一个客户机的web服务 问题出在客户端应用程序中,在运行时,当我尝试实例化代理web服务时,会出现以下错误:JBoss 6 EAP JaxWsProxyFactoryBean NoClassDefFoundError,jboss,cxf,noclassdeffounderror,classnotfoundexception,Jboss,Cxf,Noclassdeffounderror,Classnotfoundexception,我正在从JBoss 6.1.0 JBoss EAP 4.2.xa迁移一个应用程序 我知道我已经改变了很多东西,其中最重要的一点是JBoss现在包含了大多数框架/最常用的库(模块),这很好(war文件更小) 现在,我有两个应用程序,都安装了Spring/CXF和Maven2。一个公开web服务,第二个公开第一个客户机的web服务 问题出在客户端应用程序中,在运行时,当我尝试实例化代理web服务时,会出现以下错误: ------ java.lang.NoClassDefFoundError: org
------ java.lang.NoClassDefFoundError: org/apache/cxf/jaxws/JaxWsProxyFactoryBean
at es....MyFactory.getService_WSC(MyFactory.java:59)
...
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
...
at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169)
...
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:920)
at java.lang.Thread.run(Thread.java:662) Caused by: java.lang.ClassNotFoundException: org.apache.cxf.jaxws.JaxWsProxyFactoryBean from [Module "deployment.myapp.war:main" from Service Module Loader]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:196)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:444)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:432)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:399)
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:374)
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:119) ... 21 more ------
在我的pom.xml中,我有以下内容(提供的CXF):
2.6.6
假如
org.apache.cxf
cxf rt前端jaxws
${cxf.version}
${cxf.scope}
org.apache.cxf
cxf rt传输http
${cxf.version}
公用记录
公用记录
${cxf.scope}
org.apache.cxf
cxf rt ws-security
${cxf.version}
${cxf.scope}
可以包括CXF库,但这可能不是必需的,而且JBoss EAP 6已经有了它们?但是,如果是这样,为什么我会在NoClassDefFoundError->上面得到错误,原因是:java.lang.ClassNotFoundException
谢谢大家! 您的CXF库范围是
提供的
。我不确定JBoss EAP 6是否嵌入了CXF JAXR(CXF的其余部分-您应该检查JBoss版本的CXF 2.4.x-redhat-1)。我认为它使用了Rest-Easy。因此它不会找到org/apache/cxf/jaxws/JaxWsProxyFactoryBean
将cxf-rt前端jaxws
的范围从提供的
更改为编译
查看以获取Jboss EAP 6.x中所有嵌入式lib的列表,最后我解决了它 首先,感谢willome的回应。 由于服务体系结构(使用ApacheCXF实现)的性质,我倾向于使用CXF解决问题 JBoss EAP 6嵌入了完整版本的CXF框架,其特殊性是“划分”为模块,关键在于准确识别应用程序中包含的模块 所有这一切的好处是,现在的战争非常轻,你不能包括绝大多数框架/库。。。在我的例子中,我从一场30MB的战争变成了最后一场5MB的战争 最后我将该文件添加到应用程序jboss-deployment-structure.xml中,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="org.jboss.ws.cxf.jbossws-cxf-client" services="import" />
<module name="org.apache.cxf.impl">
<imports>
<include path="META-INF"/>
<include path="META-INF/cxf"/>
</imports>
</module>
<!-- ... -->
</dependencies>
</deployment>
</jboss-deployment-structure>
我在pom.xm for CXF框架中保留了“提供”的范围。感谢您的评论。我是模块列表的有用链接;)。。。这就是问题所在,有很多模块,很难(至少最初)确定哪些是您需要的。非常感谢jpadron,您救了我一天。我正是使用这两个依赖项cxf-rt前端jaxws和cxf-rt-transports-http将httpconductor添加到SOAP请求中,以禁用传输编码。在提供的范围内,war的部署不会失败,但我有org.jboss.resteasy.spi.UnhandledException:java.lang.NoClassDefFoundError:org/apache/cxf/frontend/ClientProxy。我将此依赖项添加到jboss-deployment-structure.xml中,它可以正常工作!非常感谢!
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="org.jboss.ws.cxf.jbossws-cxf-client" services="import" />
<module name="org.apache.cxf.impl">
<imports>
<include path="META-INF"/>
<include path="META-INF/cxf"/>
</imports>
</module>
<!-- ... -->
</dependencies>
</deployment>
</jboss-deployment-structure>