2016-06-15 96 views
1

Ich habe das Gateway und den Dienst eingerichtet, aber die Webmethode ist kein umgebrochenes Objekt, sondern nur 4 Strings.Wie beteiligt man eine Web-Service-Methode mit 4 String-Parametern von Spring Integration Outbound-Gateway?

JAXB erhöht den Fehler

„javax.xml.bind.MarshalException - mit Ausnahme verknüpft: [com.sun.istack.internal.SAXException2: unable Art Marschall "java.lang.String" als ein Element, weil es eine @XmlRootElement Anmerkung fehlt]“

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

Antwort

0

Zunächst einmal ist es nicht 4 Strings ist es einzelne verkettete String:

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

Ein weiteres Anliegen.

<int-ws:outbound-gateway> ist für Webdienste, SOAP. Daher XML. Right JaxB erzeugt einen XML-Code für Sie, jedoch genau für Domain-Entities, nicht für einfache Strings.

Sie können JaxB mit String payload umgehen, aber das muss wirklich ein XML sein, das <soap:body> Inhalt darstellt.