【问题标题】:Migrating JAX-WS RI to Spring controlled service without SOAP?将 JAX-WS RI 迁移到没有 SOAP 的 Spring 控制服务?
【发布时间】:2013-08-14 15:13:45
【问题描述】:

如果我使用了不正确的术语,请原谅,我对此有点陌生。我使用 Sun 的 JAX-WS RI“Provider”实现创建了一个 Web 服务。我们发送这个服务纯 XML,它以纯 XML 响应。我试图将它移到 Spring 中,以便可以通过 Spring 上下文访问服务,但现在它正在寻找一个我们没有使用的 SOAP 信封。我如何告诉它我没有使用 SOAP?

我的 web.xml 看起来像这样:

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
    <display-name>MyServiceImpl</display-name>
    <servlet-name>MyServiceImpl</servlet-name>
    <servlet-class>com.sun.xml.ws.transport.http.servlet.WSSpringServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>MyServiceImpl</servlet-name>
    <url-pattern>/myServiceUrl</url-pattern>
</servlet-mapping>

这是我的 applicationContext.xml:

<!-- this bean implements web service methods -->
<bean id="myService" class="com.acme.MyServiceImpl" />

<bean class="com.sun.xml.ws.transport.http.servlet.SpringBinding">
    <property name="url" value="/myServiceUrl" />
    <property name="service">
        <bean class="org.jvnet.jax_ws_commons.spring.SpringService">
            <property name="bean">
                <ref local="myService" />
            </property>
            <property name="impl" value="com.acme.MyServiceImpl" />
        </bean>
    </property>
</bean>

我的服务类如下所示:

@javax.xml.ws.WebServiceProvider
@javax.xml.ws.ServiceMode(value=javax.xml.ws.Service.Mode.MESSAGE)
public class MyServiceImpl implements Provider<Source> {

@Override
public Source invoke(Source source) {
... // unmarshal the source object using JAXB, do work, marshall a response back
}

在发送我的基本 XML 服务时收到的错误消息是:

&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"&gt;&lt;S:Body&gt;&lt;S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope"&gt;&lt;faultcode&gt;S:Client&lt;/faultcode&gt;&lt;faultstring&gt;Couldn't create SOAP message due to exception: unexpected XML tag. expected: {http://schemas.xmlsoap.org/soap/envelope/}Envelope but found: {}Request&lt;/faultstring&gt;&lt;/S:Fault&gt;&lt;/S:Body&gt;&lt;/S:Envelope&gt;

如何去除 SOAP?

【问题讨论】:

    标签: spring soap jax-ws


    【解决方案1】:

    找到了;需要在 Web 服务 bean 上指定 bindingId(之前在 sun-jaxws.xml 中定义):

    <property name="service">
        <bean class="org.jvnet.jax_ws_commons.spring.SpringService">
            <property name="bean">
                <ref local="myService" />
            </property>
            <property name="impl" value="com.acme.MyServiceImpl" />
            <property name="bindingID" value="http://www.w3.org/2004/08/wsdl/http" />
        </bean>
    </property>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-28
      • 2011-02-24
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多