2016-06-15 1 views
1

Я установил шлюз и службу, но веб-метод не является обернутым объектом, а всего лишь 4 строками.Как связать метод веб-службы с 4 строковыми параметрами по исходящему шлюзу интеграции Spring?

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

Прежде всего это не является 4 Strings, холоста сцепленная Строка:

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

Другой проблема.

<int-ws:outbound-gateway> для веб-служб, SOAP. Поэтому XML. Right JaxB производит XML для вас, но он делает это именно для объектов домена, а не простых строк.

Вы можете обойти JaxB со String payload, но это действительно должен быть XML, представляющий <soap:body>.

Смежные вопросы