2015-09-14 33 views
7

Obecnie badam format wiadomości SOAP do konwersji formatu wiadomości Socket i vice versa za pomocą Java.Format wiadomości SOAP do konwersji formatu wiadomości Socket i na odwrót za pomocą Java

Potrzebuję tego do ponownego użycia systemu, który odczytuje komunikat o formacie gniazda, aby połączyć się ze stroną internetową, która wysyła i odbiera format wiadomości SOAP.

Jak powinienem to zrobić? Czy powinienem rozważyć przetwarzanie tekstu?

Próbka Gniazdo do 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> 

Odpowiedz

5

Komunikat gniazdo jest organem XML uciekł komunikatu SOAP. Nie potrzebujesz dodatkowych bibliotek, ponieważ istnieją klasy javax dla parsing SOAP requests.

SOAP do gniazda jest prosta:

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()); 

Gniazdo do SOAP jest bardziej skomplikowana, ponieważ musimy stworzyć elementy webRequest Opakowanie:

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); 
+0

Dzięki! Przyznana nagroda, zaakceptowana odpowiedź –