我已经设置了网关和服务,但是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" />
答案 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。