我正在尝试创建一个WebService存根。我喜欢在一个地方对所有请求做出反应。我有一个示例值生成器,它处理请求的类型并创建一个示例响应,所以我不需要有很多类的代码生成器。只是一个非常简单的。
我找到了http://jax-ws.java.net/nonav/2.2.1/docs/provider.html WebServiceProvider,它完全用于获取原始SOAP消息,并在一个地方创建响应。
主要问题是我是这个神奇的EE世界的新手:)我无论如何都无法启动WebServiceProvider示例。
我有Spring,SpringSource ToolSuit,Axis已安装/配置,所有其他功能都正常。
谢谢大家的帮助,如果问题对你来说太简单,请原谅。也许我只是没找到/读过的东西。 微米。
答案 0 :(得分:2)
最后我找到了解决方案(感谢我的同事的帮助)。 如果您使用的是JAX-WS,则有一个简单的解决方案。
您的WEB-INF文件夹中需要sun-jaxws.xml,其中包含以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0">
<endpoint
name="RawWS"
implementation="com.stg.pack.MyServiceProvider"
url-pattern="/HotelServices200631"/>
</endpoints>
你需要一个com.stg.pack.MyServiceProvider类,它看起来像:
package com.stg.pack;
@ServiceMode(value = Service.Mode.MESSAGE)
@WebServiceProvider(portName = "ThePortNameOfWebService",
serviceName = "TheNameOfWebService",
targetNamespace = "http://www.example.com/target/namespace/uri")
public class MyServiceProvider implements Provider<SOAPMessage> {
@Override
public SOAPMessage invoke(SOAPMessage request) {
SOAPMessage result = null;
// create response SOAPMessage
return result;
}
}
在我忘记之前,你需要在web.xml中定义一些东西:
<listener>
<listener-class>
com.sun.xml.ws.transport.http.servlet.WSServletContextListener
</listener-class>
</listener>
<servlet>
<servlet-name>RawWS</servlet-name>
<servlet-class>
com.sun.xml.ws.transport.http.servlet.WSServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RawWS</servlet-name>
<url-pattern>/TheNameOfWebService</url-pattern>
</servlet-mapping>
如果你这样使用它,所有的请求都由invoke方法处理。
答案 1 :(得分:0)
您基本上必须将您的提供商部署到某种Container。在J / EE中开发基本上要求您编译某种EAR或WAR或JAR并告诉应用服务器部署它(该应用服务器是JBOSS,glassfish,Weblogic,Websphere,Tomcat等)。
你试过这个吗?
也可以使用javax.xml.ws.Endpoint类测试你的提供者,虽然我不得不承认我从来没有选择过这个,而是支持部署到app服务器。