我正在尝试使用Apache CXF创建一个基于WSDL的简单Web服务,以部署在Wildfly上。我尝试了使用wsdl文件的标准web.xml,cxf-servlet.xml配置,但是服务器给了我以下错误
在ws端点部署中检测到Apache CXF库(cxf-api-2.7.3.jar);要么提供适当的部署,要么使用容器模块依赖项替换嵌入式库,要么为当前部署禁用webservices子系统,添加适当的jboss-deployment-structure.xml
我正在使用Maven进行构建和部署过程。在进一步阅读时,我意识到Wildfly使用JBossWS堆栈并且不鼓励基于Spring的CXF配置。我也应该使用wsdl2java或wsprovide / wsconsume吗? 有谁可以请指导我如何设置一个简单的项目来创建WSDL第一个Web服务并在Wildfly上部署或指向我的工作示例。
感谢您的帮助,谢谢。
答案 0 :(得分:1)
上面消息的原因正是WildFly的webservices子系统在部署中发现了Apache CXF库。这并不是说如何在像WildFly这样的JavaEE容器上提供和部署使用Web服务的JavaEE应用程序,主要是因为容器负责提供WS引擎功能。特别是,当谈到WildFly时,Apache CXF在内部使用,因此在他的部署中添加了一些cxf库,用户可能最终会遇到他可能无法轻易解决的复杂类加载问题。 无论如何,消息说明要做什么:(JBoss)模块依赖关系必须在部署中定义。这可以在部署MANIFEST.MF中轻松完成;一些文档在https://docs.jboss.org/author/display/JBWS/JBoss+Modules(但你可以谷歌搜索JBoss模块并找到很多信息)。
一般来说,我真的建议阅读https://docs.jboss.org/author/display/JBWS/Apache+CXF+integration#ApacheCXFintegration-BuildingWSapplicationstheJBossway上的文档,它解释了JBossWS与Apache CXF的集成,并详细介绍了正确的打包应用程序。
答案 1 :(得分:1)
添加所有提供范围的依赖项,因为wildfly有自己的cxf jar。 wildfly不需要cxf jar来执行ws。只有你需要IDE的cxf jar来编译项目。
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>${cxf.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>${cxf.version}</version>
<scope>provided</scope>
</dependency>
<!-- Jetty is needed if you're are not using the CXFServlet -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>${cxf.version}</version>
<scope>provided</scope>
</dependency>
你可以找到答案here
答案 2 :(得分:0)
附加建议:阅读http://jbossws.blogspot.it/2014/09/how-to-kick-start-ws-project-in-few.html并尝试所描述的maven原型以构建正确的设置&amp;在几秒钟内完成WS客户端。
如果您有兴趣,我也会写一本涵盖此主题的书,请参阅http://jbossws.blogspot.it/2014/09/a-book-on-jax-ws-in-wildfly-and-more.html