2016-03-24 8 views
0

Ich verwende SimpleWebServiceInboundGateway für die Verarbeitung von SOAP-Anfragen. HierWie kann ich Soap-Header in Spring Integration bekommen?

ist ein Stück von meinem Code:

@Router(defaultOutputChannel = "unsupportedOperation", inputChannel = "wsRequestChannel") 
public String route(Message message) { 
    String soapAction = (String)message.getHeaders().get(WS_SOAP_ACTION); 
    ... 
} 

@Bean 
public SimpleWebServiceInboundGateway wsInboundGateway(){ 
    SimpleWebServiceInboundGateway simpleWebServiceInboundGateway = new SimpleWebServiceInboundGateway(); 
    simpleWebServiceInboundGateway.setRequestChannelName("wsRequestChannel"); 
    simpleWebServiceInboundGateway.setReplyChannelName("wsResponseChannel"); 
    simpleWebServiceInboundGateway.setErrorChannelName("wsErrorChannel"); 
    return simpleWebServiceInboundGateway; 
} 

Der ankommende Seife Umschlag enthält eine Seife Kopf:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
    <soapenv:Header> 
     <myAuth> 
     <username>user</username> 
     <password>pass</password> 
     </myAuth> 
    </soapenv:Header> 
    <soapenv:Body> 
    ... 

Das Message-Objekt in meinem Router nicht enthält die Kopfdaten. Wie kann ich den Benutzernamen und das Passwort extrahieren?

Antwort

0

Um SOAP-Header zuzuordnen, müssen Sie dem Gateway einen benutzerdefinierten DefaultSoapHeaderMapper hinzufügen; Sie passen den Mapper an, indem Sie ihm mitteilen, welche Header er zuordnen soll ...

mapper.setRequestHeaderNames ("STANDARD_REQUEST_HEADERS", "myHeader");

Die zu verkalkende Kopfzeile muss mit dem qualifizierten QName der Kopfzeile übereinstimmen. STANDARD_REQUEST_HEADERS (der Standardwert) bildet die SoapAction ab.

Es gibt ähnliche Zuordnung für Antwortheader.