如何通过Spring集成出站网关涉及4字符串参数的Web服务方法?

时间:2016-06-15 04:33:01

标签: jaxb spring-integration spring-ws

我已经设置了网关和服务,但是web方法不是一个包装对象,而只是4个字符串。

JAXB引发了错误

“javax.xml.bind.MarshalException   - 链接异常: [com.sun.istack.internal.SAXException2:无法封装类型“java.lang.String”作为元素,因为它缺少@XmlRootElement注释]“

public interface WebMethodGateway {

    @Gateway
    @Payload("#args[0] + #args[1] + #args[2] + #args[3]")
    public Response invoke(String arg1, String arg2, String arg3, String arg4);

}

integration.xml

<int-ws:outbound-gateway id="outboundGateway"
    request-channel="requestChannel" 
    reply-channel="responseChannel"
    uri="http://localhost:8080/Service?wsdl"
    message-sender="messageSender" 
    marshaller="marshaller"
    unmarshaller="marshaller"/>

<bean id="messageSender" class="org.springframework.ws.transport.http.HttpComponentsMessageSender">
    <property name="connectionTimeout" value="5000"/>
    <property name="readTimeout" value="10000"/>
</bean>


<int:channel id="requestChannel"/>
<int:channel id="responseChannel"/>

<oxm:jaxb2-marshaller id="marshaller" context-path="myProject.ws.bean" />

<int:gateway id="webMethodGateway" 
    default-request-channel="requestChannel"
    default-reply-channel="responseChannel"
    service-interface="myProject.ws.gateway.WebMethodGateway" />

1 个答案:

答案 0 :(得分:0)

首先它不是4 Strings,它是单个连接字符串:

@Payload("#args[0] + #args[1] + #args[2] + #args[3]")

另一个问题。

<int-ws:outbound-gateway>用于Web服务,SOAP。因此XML。 正确的JaxB为您生成XML,但它完全针对域实体,而不是简单的字符串。

您可以使用字符串payload绕过JaxB,但这实际上必须是代表<soap:body>内容的XML。