2011-03-03 41 views
1

我正在尝试创建WebService存根。我喜欢在一个地方对所有请求做出反应。我有一个样本值生成器,它处理请求的类型并创建一个样本响应,所以我不需要用很多类来生成代码。只有一个非常简单的。消息级别Jax-WS服务

我发现http://jax-ws.java.net/nonav/2.2.1/docs/provider.html WebServiceProvider正是为了获取原始SOAP消息,并在一个地方创建一个响应。

主要问题是我是新来的这个神奇的EE世界:)我根本无法启动WebServiceProvider示例。

我有Spring,SpringSource ToolSuit,Axis安装/配置,所有其他的东西都在工作。

谢谢大家的帮助,如果问题太简单,请原谅。也许我只是没有找到/阅读某些东西。 M.

回答

0

最后我找到了解决方案(感谢我的同事的帮助)。 如果您使用的是JAX-WS,那么有一个简单的解决方案。

你需要一个阳光jaxws.xml在WEB-INF文件夹包含以下内容:

<?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中定义了一些事情:如果你使用这样的,所有的O

<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> 

f请求由invoke方法处理。

0

您基本上必须将您的提供者部署到某种容器。在J/EE中开发基本上要求您编译某种EAR或WAR或JAR,并告诉应用服务器部署它(应用服务器是JBOSS,glassfish,Weblogic,Websphere,Tomcat等)。

您是否试过这样做?

也可以使用javax.xml.ws.Endpoint类来测试您的提供者,尽管我不得不承认我从来没有选择这种方式来支持部署到应用服务器。