Can't get Spring SOAP Client to work: content type 'text/xml; charset=utf-8' was not the expected type 'application/soap+xml; charset=utf-8'

soap, soap-client, spring, spring-ws

Solution

Ok, I fixed the above problem, which gets me to another problem. First here's how I fixed the above problem. Now I don't set the SOAP version on the SaajSoapMessageFactory, I set it on the wrapped MessageFactory. Now the Content-Type going out in my request is application/soap+xml.

WebServiceTemplate webServiceTemplate = new WebServiceTemplate();
MessageFactory msgFactory = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
SaajSoapMessageFactory newSoapMessageFactory = new SaajSoapMessageFactory(msgFactory);
webServiceTemplate.setMessageFactory(newSoapMessageFactory);

Next problem, now I'm getting this:

org.springframework.ws.soap.client.SoapFaultClientException: Unexpected fault in the service.
    at org.springframework.ws.soap.client.core.SoapFaultMessageResolver.resolveFault(SoapFaultMessageResolver.java:37)
    at org.springframework.ws.client.core.WebServiceTemplate.handleFault(WebServiceTemplate.java:774)
    at org.springframework.ws.client.core.WebServiceTemplate.doSendAndReceive(WebServiceTemplate.java:600)
    at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:537)
    at org.springframework.ws.client.core.WebServiceTemplate.doSendAndReceive(WebServiceTemplate.java:492)
    at org.springframework.ws.client.core.WebServiceTemplate.sendSourceAndReceiveToResult(WebServiceTemplate.java:436)

and here's the info that was returned in the response:

500 Internal Server Error
The SOAP action specified on the message, '', does not match the HTTP SOAP Action, 'http://abc.com/xyz/2010/08/MembershipService/LogIn'.

I'll try to solve this, but wanted to update anybody reading this so they can stop looking into the previous error. I need to figure out how to correctly set the soap action.

Problem

Hi, I am trying to make a simple soap client work using `Spring-ws`. The googling I've done on this error says I'm using Soap 1.1 and need to specify Soap 1.2. I've tried to do that. Am I doing it correctly below? If this is not the problem does anybody see what the problem is? Here's a chunk of the stack trace: ``` org.springframework.ws.client.WebServiceTransportException: Cannot process the message because the content type 'text/xml; charset=utf-8' was not the expected type 'application/soap+xml; charset=utf-8'. [415] at org.springframework.ws.client.core.WebServiceTemplate.handleError(WebServiceTemplate.java:663) at org.springframework.ws.client.core.WebServiceTemplate.doSendAndReceive(WebServiceTemplate.java:587) at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:537) at org.springframework.ws.client.core.WebServiceTemplate.doSendAndReceive(WebServiceTemplate.java:492) at org.springframework.ws.client.core.WebServiceTemplate.sendSourceAndReceiveToResult(WebServiceTemplate.java:436) at com.jda.fileserver.FujiAuthenticationTest.testLogin(FujiAuthenticationTest.java:53) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) ``` Here's my code, thanks for trying to help: ``` public class AuthTest { @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://abc.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>jsmith</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(); SaajSoapMessageFactory defaultMessageFactory = (SaajSoapMessageFactory) webServiceTemplate.getMessageFactory(); defaultMessageFactory.setSoapVersion(SoapVersion.SOAP_12); webServiceTemplate.setMessageFactory(defaultMessageFactory); // probably not needed StreamSource source = new StreamSource(new StringReader(loginXml.toString())); StreamResult result = new StreamResult(System.out); String uri = "http://xyz.abcstage.com/xyz_1.0/membership.svc/ws"; SoapActionCallback requestCallback = new SoapActionCallback("http://abc.com/xyz/2010/08/MembershipService/LogIn"); try { webServiceTemplate.sendSourceAndReceiveToResult(uri, source, requestCallback, result); } catch (SoapFaultException sfe) { throw new Exception("SoapFaultException", sfe); } catch (WebServiceTransportException wste) { throw new Exception("WebServiceTransportException", wste); } } } ```

Original source

Related problems