jpa*_*ron 3 jboss cxf noclassdeffounderror classnotfoundexception
我正在从JBoss 6.1.0 JBoss EAP 4.2.xa迁移一个应用程序.
我知道我已经改变了很多东西,其中最重要的是JBoss现在包含了大部分框架/最常用的库(模块),这很棒(war文件更小).
现在,我有两个应用程序,都安装了Spring/CXF和Maven2.一个公开Web服务,第二个公开第一个客户端.
问题是在客户端应用程序中,在运行时,当我尝试实例化代理Web服务时,我收到以下错误:
------ 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 ------
Run Code Online (Sandbox Code Playgroud)
在我的pom.xml中,我有以下内容(提供的CXF):
<properties>
<cxf.version>2.6.6</cxf.version>
<cxf.scope>provided</cxf.scope>
</properties>
<!-- CXF -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>${cxf.version}</version>
<scope>${cxf.scope}</scope>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>${cxf.version}</version>
<exclusions>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
<scope>${cxf.scope}</scope>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-ws-security</artifactId>
<version>${cxf.version}</version>
<scope>${cxf.scope}</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
可能包括CXF库但可能这不是必需的并且JBoss EAP 6已经有它们了吗?但是,如果是这样的话,为什么我会得到NoClassDefFoundError以上的错误 - >引起:java.lang.ClassNotFoundException?
谢谢!
最后我解决了.
首先,感谢遗嘱回复.根据服务架构的性质(使用Apache CXF实现),我更倾向于使用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>
Run Code Online (Sandbox Code Playgroud)
我将范围"提供"保存在我的pom.xm中,用于CXF框架.
归档时间: |
|
查看次数: |
5439 次 |
最近记录: |