在Wildfly

时间:2015-08-06 09:19:09

标签: java web-services jboss jax-ws wildfly

我目前正在 Glassfish 4.0 下运行Web应用程序,并希望将其修改为在Wildfly 8.2下运行。我目前遇到的问题是:

我有一些Web服务(注释@WebService)目前在/ws/下发布

f.e。 “PanelService”将在/myAppContextRoot/ws/PanelService

下公开

我是通过将Glassfish-WS-Servlet(ergo JAXWS-RI)绑定到/ws/*中的web.xml来实现的。 如果不使用 Wildfly 特定注释, Wildfly 是否有可比的方法 - 仅仅通过配置?我不希望jboss-classes中有classpath

我当前的“解决方案”是将JAXWS-RI添加到类路径并发布服务两次 - JBoss-WSJAXWS-RI: - (

€编辑:

Terrence Curran 的解决方案实际上有效.....但....我不得不添加一些细微的变化。

  • 我不知道的事情:必须将文件放在src/main/webapp/META-INF(Maven Web项目)下 - 尝试src/main/resources/META-INF之前......
  • context-root必须包​​含我的app-name .....我的jboss-webservices.xml现在是:

<webservices>
    <context-root>myApp/ws</context-root>
</webservices>
  • 我必须将至少一个的webservices标记为@Stateless EJB。不要问我为什么 - 但如果我删除注释,文件似乎不会被解析和应用。只有当一个WS也作为EJB存在时,我的野外才会应用jboss-webservices.xml。 (错误?)

3 个答案:

答案 0 :(得分:2)

知道了。

在Wildfly下,可以将WebServices映射为web.xml中的“servlet”。 因此,我只需删除JAX-WS RI并将以下代码段添加到web.xml

<servlet>
    <servlet-name>PanelService</servlet-name>
    <servlet-class>org.myapp.ws.PanelService</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>PanelService</servlet-name>
    <url-pattern>/ws/PanelService</url-pattern>
</servlet-mapping>

答案 1 :(得分:2)

@cljk很好的捷径。

要完成答案,如果您不想使用web.xml,@WebServlet注释也会有效:

@WebServlet("/soap/test")
@WebService(name = "test", serviceName = "testService", portName = "testPort")
@SOAPBinding(style = Style.DOCUMENT)
@MTOM(enabled = true, threshold = 4194304)
public class SoapTestService
{
    ...
}

你会得到:

JBWS024061: Adding service endpoint metadata: id=it.shape.myapp.ws.soap.test.SoapTestService
 address=http://localhost:8080/myapp/soap/test
 implementor=it.shape.myapp.ws.soap.test.SoapTestService
 serviceName={http://test.soap.ws.myapp.shape.it/}testService
 portName={http://test.soap.ws.myapp.shape.it/}testPort
 annotationWsdlLocation=null
 wsdlLocationOverride=null
 mtomEnabled=true

在Wildfly 10.0.0.Final上进行测试

答案 2 :(得分:1)

我还会考虑在jboss-webservices.xml文件中定义context-root。这样您就可以避免修改web.xml,这将破坏您在GlassFish中的部署。

<webservices>
    <context-root>ws</context-root>
</webservices>