I need to consume a SOAP Server named "Mouser" for my company. However I have a problem when I try to send a message.
The documentation of my request is :
POST /service/searchapi.asmx HTTP/1.1
Host: www.mouser.fr
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Header>
<MouserHeader xmlns="http://api.mouser.com/service">
<AccountInfo>
<PartnerID>string</PartnerID>
</AccountInfo>
</MouserHeader>
</soap12:Header>
<soap12:Body>
<SearchByPartNumber xmlns="http://api.mouser.com/service">
<mouserPartNumber>string</mouserPartNumber>
</SearchByPartNumber>
</soap12:Body>
</soap12:Envelope>
Ok, now I will how you my Java Code with the message that I send :
String mpns = "BAV99";
SOAPConnection connection = SOAPConnectionFactory.newInstance().createConnection();
SOAPMessage message = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL).createMessage();
MimeHeaders mimeHeader = message.getMimeHeaders();
mimeHeader.setHeader("Content-Type", "application/soap+xml; charset=utf-8");
SOAPPart soapPart = message.getSOAPPart();
String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
+ "<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">\n"
+ " <soap12:Header>\n"
+ " <MouserHeader xmlns=\"http://api.mouser.com/service\">\n"
+ " <AccountInfo>\n"
+ " <PartnerID>" + key + "</PartnerID>\n"
+ " </AccountInfo>\n"
+ " </MouserHeader>\n"
+ " </soap12:Header>\n"
+ " <soap12:Body>\n"
+ " <SearchByPartNumber xmlns=\"http://api.mouser.com/service\">\n"
+ " <mouserPartNumber>" + mpns + "</mouserPartNumber>\n"
+ " </SearchByPartNumber>\n"
+ " </soap12:Body>\n"
+ "</soap12:Envelope>";
StreamSource source = new StreamSource(new StringReader(xml));
soapPart.setContent(source);
message.saveChanges();
System.out.println("Send : ");
message.writeTo(System.out);
System.out.println();
java.net.URL endpoint = new URL(targetUrl);
SOAPMessage reply = connection.call(message, endpoint);
StringWriter sw = new StringWriter();
TransformerFactory.newInstance().newTransformer().transform(new DOMSource(message.getSOAPPart()), new StreamResult(sw));
connection.close();
System.out.println("Received : ");
System.out.println(sw.toString());
return sw.toString();
Instead of get a the response that I want from the server I get the same message that I sent BUT with the new ATTRIBUTE : standalone = "no" What's does it means ? Why this response ?
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Header>
<MouserHeader xmlns="http://api.mouser.com/service">
<AccountInfo>
<PartnerID>key</PartnerID>
</AccountInfo>
</MouserHeader>
</soap12:Header>
<soap12:Body>
<SearchByPartNumber xmlns="http://api.mouser.com/service">
<mouserPartNumber>BAV99</mouserPartNumber>
</SearchByPartNumber>
</soap12:Body>
</soap12:Envelope>
Thanks for helping !
Actually you can generate class with soap ui. And your program can easily call the service using the class created without construct your own request header and body But you need some library. Example java jdk comes with jax-ws lib
tutorial: http://www.soapui.org/soap-and-wsdl/soap-code-generation.html
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With