消息级别Jax-WS服务

时间:2011-03-03 13:16:40

标签: java web-services spring jax-ws

我正在尝试创建一个WebService存根。我喜欢在一个地方对所有请求做出反应。我有一个示例值生成器,它处理请求的类型并创建一个示例响应,所以我不需要有很多类的代码生成器。只是一个非常简单的。

我找到了http://jax-ws.java.net/nonav/2.2.1/docs/provider.html WebServiceProvider,它完全用于获取原始SOAP消息,并在一个地方创建响应。

主要问题是我是这个神奇的EE世界的新手:)我无论如何都无法启动WebServiceProvider示例。

我有Spring,SpringSource ToolSuit,Axis已安装/配置,所有其他功能都正常。

谢谢大家的帮助,如果问题对你来说太简单,请原谅。也许我只是没找到/读过的东西。 微米。

2 个答案:

答案 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服务器。