我正在开发一个包含Soap客户端的web应用程序,该应用程序需要访问cxf客户端实现,因为我们必须为对远程端点的不同调用使用不同的证书。
Wildfly附带了一个模块jbossws-cxf客户端,该客户端依赖于所需的所有不同cxf模块。这个模块还有一个maven版本。
在maven模块pom文件中,我们有这样一个依赖项:
<dependency>
<groupId>org.jboss.ws.cxf</groupId>
<artifactId>jbossws-cxf-client</artifactId>
<version>4.3.2.Final</version>
<scope>provided</scope>
</dependency>
请注意,该版本已与wildfly 8.2发行说明中提到的版本相匹配:http://wildfly.org/news/2014/11/20/WildFly82-Final-Released/
当部署我们的应用程序时,我们从日志中得到以下消息:
14:22:12,492 INFO [org.jboss.weld.Bootstrap] (weld-worker-1) WELD-000119: Not generating any bean definitions from nl.topicuszorg.lsp.service.MultipleCertificatePingStubServiceImpl because of underlying class loading error: Type org.apache.cxf.transport.Conduit from [Module "deployment.kdplus-lsphub-server-1.1-SNAPSHOT.war:main" from Service Module Loader] not found. If this is unexpected, enable DEBUG logging to see the full error.
14:22:12,689 INFO [org.apache.deltaspike.core.util.ProjectStageProducer] (MSC service thread 1-2) Computed the following DeltaSpike ProjectStage: Production
14:22:13,628 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2) MSC000001: Failed to start service jboss.deployment.unit."kdplus-lsphub-server-1.1-SNAPSHOT.war".WeldStartService: org.jboss.msc.service.StartException in service jboss.deployment.unit."kdplus-lsphub-server-1.1-SNAPSHOT.war".WeldStartService: Failed to start service
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1904) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_25]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_25]
at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_25]
Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type PingStubService with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject nl.topicuszorg.lsp.service.PingPongServiceImpl.pingStubService
at nl.topicuszorg.lsp.service.PingPongServiceImpl.pingStubService(PingPongServiceImpl.java:0)
奇怪的是,真正的问题被记录为INFO。org.apache.cxf.transport.无法装载导管。这是org.apache.cxf模块的一部分,应该通过加载jbossws-cxf客户端模块来进行转换加载。
这应该不是必要的,但我们也在jboss-deployment-structure.xml 中隐含地声明模块依赖关系
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<excludes>
</excludes>
<dependencies>
<module name="org.slf4j"/>
<module name="org.apache.cxf"/>
<module name="jbossws-cxf-client"/>
<module name="org.apache.cxf.impl"/>
</dependencies>
</deployment>
</jboss-deployment-structure>
模块似乎没有加载,我不知道为什么。我找不到检查哪些模块已加载的方法。
这里出了什么问题?
结果我不得不将jboss-deployment-structure.xml从META-INF目录移到WEB-INF目录。真倒霉