Soap Request using java - Request call format issue

460 views Asked by At

I'm trying to make a SOAP call with this Java code:

SOAPEnvelope envelope = soapPart.getEnvelope();
envelope.addNamespaceDeclaration("UserAuthentication", serverURI);
SOAPBody soapBody = envelope.getBody();
SOAPElement soapBodyElem = soapBody.addChildElement("UserAuthentication", "UserAuthentication");
SOAPElement soapBodyElem1 = soapBodyElem.addChildElement("user_name", "UserAuthentication");
soapBodyElem1.addTextNode("[email protected]");
SOAPElement soapBodyElem2 = soapBodyElem.addChildElement("password", "UserAuthentication");
soapBodyElem2.addTextNode("123");
soapMessage.saveChanges();

The required format of SOAP call (I'm trying to generate) is:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <UserAuthentication xmlns="http://tempuri.org/">
      <user_name>string</user_name>
      <password>string</password>
    </UserAuthentication>
  </soap:Body>
</soap:Envelope>

But the actual call generated by my code doesn't match the required format and is rejected at the receiving end, and I'm trying to figure out why and how to fix it:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:UserAuthentication="http://XXX.XXX.XXX.XXX:XXXX/Logininfo.asmx?op=UserAuthentication">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<UserAuthentication:UserAuthentication>
<UserAuthentication:user_name>[email protected]</UserAuthentication:user_name>
<UserAuthentication:password>123</UserAuthentication:password>
</UserAuthentication:UserAuthentication>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
2

There are 2 answers

4
Marc Philipp On

What's the error message from the receiving end?

In any case, the namespaces for the UserAuthentication elements differ.

Expected: http://tempuri.org/
Actual: http://XXX.XXX.XXX.XXX:XXXX/Logininfo.asmx?op=UserAuthentication

0
Antonio Ortells On
envelope.addNamespaceDeclaration("UserAuthentication", serverURI);

Why are you adding that namespace when given you desired request it is not needed?

Try removing that line. Then this one:

SOAPElement soapBodyElem = soapBody.addChildElement("UserAuthentication", "UserAuthentication");

Make it:

QName bodyName = new QName("http://tempuri.org/",
    "UserAuthentication", "m");
SOAPElement soapBodyElem = soapBody.addChildElement(bodyName);