Spring-WS-client-Einstellung nicht SOAPAction-header
Ich bin das senden einer SOAP-Anfrage und der server beschwert sich, dass die SOAPAction-header leer. Ich denke, ich werde es Recht, aber offensichtlich bin ich nicht. Wireshark zeigt es nicht gesetzt.
@Test
public void testLogin() throws Exception {
StringBuffer loginXml = new StringBuffer();
loginXml.append("<soapenv:Envelope xmlns:soapenv=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:ns=\"http://example.com/xyz/2010/08\">");
loginXml.append(" <soapenv:Header>");
loginXml.append(" <ns:loginOperationDetails>");
loginXml.append(" </ns:loginOperationDetails>");
loginXml.append(" </soapenv:Header>");
loginXml.append(" <soapenv:Body>");
loginXml.append(" <ns:LogIn>");
loginXml.append(" <ns:logInInfo>");
loginXml.append(" <ns:CustomerAccountId>customer1</ns:CustomerAccountId>");
loginXml.append(" <ns:Username>JDoe</ns:Username>");
loginXml.append(" <ns:Password>abc123</ns:Password>");
loginXml.append(" </ns:logInInfo>");
loginXml.append(" </ns:LogIn>");
loginXml.append(" </soapenv:Body>");
loginXml.append("</soapenv:Envelope>");
WebServiceTemplate webServiceTemplate = new WebServiceTemplate();
MessageFactory msgFactory = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
SaajSoapMessageFactory newSoapMessageFactory = new SaajSoapMessageFactory(msgFactory);
webServiceTemplate.setMessageFactory(newSoapMessageFactory);
String uri = "http://xyz.example.com/xyz_1.0/membership.svc/ws";
webServiceTemplate.setDefaultUri(uri);
StreamSource source = new StreamSource(new StringReader(loginXml.toString()));
StreamResult result = new StreamResult(System.out);
boolean resultReturned = false;
try {
resultReturned = webServiceTemplate.sendSourceAndReceiveToResult(source,
new SoapActionCallback("http://example.com/xyz/2010/08/MembershipService/LogIn"),
result);
}
catch (SoapFaultClientException sfe) {
logger.error("SoapFaultClientException resultReturned: " + resultReturned, sfe);
fail();
}
}
Den Fehler, ich bin immer wieder von der server sagt:
500 Internal Server Error
The SOAP action specified on the message, '', does not match the HTTP SOAP Action, 'http://example.com/xyz/2010/08/MembershipService/LogIn'.
InformationsquelleAutor Steve L | 2013-01-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine vollständige Antwort geht wie folgt.
Während Sie mit
WebServiceTemplate
als eine Klasse für die Kommunikation mit dem Webservice, ich verstehe nicht, warum, aber es funktioniert nicht richtig, füllen Sie den HTTP-Header.Einige WSDL-Teil zu sagen:
Und die
WebServiceTemplate
ignoriert diesen Teil. Die obige Fehlermeldung bedeutet, dass IhresoapAction
parameter in der Kopfzeile ist leer. Und es sollte nicht sein. Prüfen mit Wireshark. Ich habe - mit einigen Chrom Soap-client und Frühjahr. Die zweite hat einen ungültigen header.Dieses Problem zu beheben, müssen Sie befolgen Sie Abschnitt 6.2.4 hier: http://docs.spring.io/spring-ws/sites/2.0/reference/html/client.html
Was es sagt, ist im Grunde fügen Sie die header-Teil auf Ihrer eigenen, mit
WebServiceMessageCallback
- Schnittstelle. Sie können mehr Lesen Sie in der Referenz.Im Grunde es endet so:
Hier können Sie richtig die header-Wert. Arbeitete für mich auch. Den ganzen Tag Lesen.
Ich Frage mich, wenn es automatisch durchgeführt werden kann. Hinzufügen diese hartcodierten Wert für mich funktioniert, aber es ist nicht sehr nett zu unübersichtlich mein code mit Dinge wie diese.
Dies sollte die richtige Antwort.
Sie können immer mehr, parametrisiert durch die Verwendung von properties-Dateien.
InformationsquelleAutor Atais
Ich erarbeitet, aber nie gepostet, die Antwort. Hier ist, was ich am Ende mit, die gut funktioniert:
InformationsquelleAutor Steve L