Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SOAP Message format to Socket Message format conversion and vice versa using Java

I am currently researching SOAP Message format to Socket Message format conversion and vice versa using Java.

I need this to reuse a legacy system that reads socket format message to connect to a website that sends and receives SOAP message format.

How should I do this? Should I consider text processing?

Sample Socket to SOAP

SOCKET

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Interface Code="20" 
      <Transaction Txn="01880120121024000001" CD="01880120121024000001001" 
     Date="2012-10-24 17:27:25"  BirthDate="1983-03-27" Code="8110009000000720" Type="0"/>
</Interface>

SOAP

<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
 <soapenv:Body>
  <webRequest xmlns="http://____________">
   <arg0 xmlns="">&lt;?xml version="1.0" encoding="UTF-8"
    standalone="yes"?>&lt;Interface xmlns="http://____________"
    Version="1.0" Code="20" Txn="123" CD="456">&lt;Info
    BirthDate="1983-03-27" Code="1234" Type="0" />&lt;/Interface></arg0>
  </webRequest>
 </soapenv:Body>
</soapenv:Envelope>
like image 525
Philip Morris Avatar asked Sep 14 '15 02:09

Philip Morris


1 Answers

The socket message is the XML-escaped body of the SOAP message. You don't need extra libraries, as there are javax classes for parsing SOAP requests.

SOAP to socket is straightforward:

String message = "<?xml version='1.0' encoding='UTF-8'?>\n<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">\n <soapenv:Body>\n  <webRequest xmlns=\"http://____________\">\n   <arg0 xmlns=\"\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"\n    standalone=\"yes\"?>&lt;Interface xmlns=\"http://____________\"\n    Version=\"1.0\" Code=\"20\" Txn=\"123\" CD=\"456\">&lt;Info\n    BirthDate=\"1983-03-27\" Code=\"1234\" Type=\"0\" />&lt;/Interface></arg0>\n  </webRequest>\n </soapenv:Body>\n</soapenv:Envelope>";
InputStream is = new ByteArrayInputStream(message.getBytes());
SOAPMessage request = MessageFactory.newInstance().createMessage(null, is);
System.out.println(request.getSOAPBody().getTextContent());

Socket to SOAP is more complicated because we need to create the webRequest wrapping elements:

DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
docFactory.setNamespaceAware(true); // webRequest needs a namespace
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

Document doc = docBuilder.newDocument();
Element root = doc.createElementNS("http://____________", "webRequest");
doc.appendChild(root);

Element argElement = doc.createElement("arg0");
root.appendChild(argElement);
String message = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Interface Code=\"20\" \n      <Transaction Txn=\"01880120121024000001\" CD=\"01880120121024000001001\" \n     Date=\"2012-10-24 17:27:25\"  BirthDate=\"1983-03-27\" Code=\"8110009000000720\" Type=\"0\"/>\n</Interface>";
argElement.setTextContent(message);

SOAPMessage request = MessageFactory.newInstance().createMessage();
request.getSOAPBody().addDocument(doc);
request.setProperty(SOAPMessage.WRITE_XML_DECLARATION, "true");
request.writeTo(System.out);
like image 194
approxiblue Avatar answered Sep 28 '22 06:09

approxiblue