我目前正在 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-WS
和JAXWS-RI
: - (
€编辑:
Terrence Curran 的解决方案实际上有效.....但....我不得不添加一些细微的变化。
src/main/webapp/META-INF
(Maven Web项目)下 - 尝试src/main/resources/META-INF
之前...... jboss-webservices.xml
现在是:
<webservices>
<context-root>myApp/ws</context-root>
</webservices>
@Stateless
EJB。不要问我为什么 - 但如果我删除注释,文件似乎不会被解析和应用。只有当一个WS也作为EJB存在时,我的野外才会应用jboss-webservices.xml
。 (错误?)答案 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>