2016-07-15 34 views
0

Ich versuche, mit einem SOAP-Dienst zu interagieren. Ich bin in der Lage, die SOAP-Antwort zu bekommen und mit Source sourceContent = soapResponse.getSOAPPart().getContent(); und transformer.transform(sourceContent, result); kann ich sehen, was die Ausgabe/Antwort ist und in der Konsole anzeigen.Parse SOAP-Antwort und extrahieren spezifischen Knoten mit JAVA

Aber ich muss sessionID aus der Antwort extrahieren und senden Sie diese sessionID in einer anderen SOAP-Anfrage.

Bitte machen Sie mir das Extraktionsverfahren, eine neue SOAP-Anforderung Aufbau

Parsing ist das, was ich tun muss !!

Unten ist der Code, die Anforderung an den SOAP-Dienst für das Senden:

public static void main(String args[]) { 
    try { 
     // Create SOAP Connection 
     SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance(); 
     SOAPConnection soapConnection = soapConnectionFactory.createConnection(); 

     // Send SOAP Message to SOAP Server 
     String url = "https://WWW.DUMMYURL.COM"; 
     SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(), url); 


     // Process the SOAP Response 
     printSOAPResponse(soapResponse); 

     soapConnection.close(); 
    } 

    catch (Exception e) { 
     System.err.println("Error occurred while sending SOAP Request to Server"); 
     e.printStackTrace(); 
    } 
} 

    private static SOAPMessage createSOAPRequest() throws Exception { 
     MessageFactory messageFactory = MessageFactory.newInstance(); 
     SOAPMessage soapMessage = messageFactory.createMessage(); 
     SOAPPart soapPart = soapMessage.getSOAPPart(); 
     String serverURN = "urn:DUMMYURL.COM"; 
     String serverNS0 = "http://WWW.DUMMYURL.COM"; 

     // SOAP Envelope 
     SOAPEnvelope envelope = soapPart.getEnvelope(); 
     envelope.addNamespaceDeclaration("urn", serverURN); 
     envelope.addNamespaceDeclaration("ns0", serverNS0); 

     // SOAP Body 
     SOAPBody soapBody = envelope.getBody();  
     SOAPElement soapBodyElem1 = soapBody.addChildElement("login","urn"); 
     SOAPElement soapBodyElem2 = soapBodyElem1.addChildElement("username","urn"); 
     @SuppressWarnings("unused") 
     SOAPElement soapBodyElem3 = soapBodyElem2.addTextNode("USERNAME"); 
     SOAPElement soapBodyElem4 = soapBodyElem1.addChildElement("password","urn"); 
     @SuppressWarnings("unused") 
     SOAPElement soapBodyElem5 = soapBodyElem4.addTextNode("PASSWORD"); 
     MimeHeaders headers = soapMessage.getMimeHeaders(); 
     headers.addHeader("SOAPAction", "https://WWW.DUMMYURL.COM" + "login"); 
     soapMessage.saveChanges(); 

     //Print the request message 
     System.out.print("Request SOAP Message = "); 
     soapMessage.writeTo(System.out); 
     System.out.println(); 
     return soapMessage; 
} 


    private static void printSOAPResponse(SOAPMessage soapResponse) throws Exception { 

     TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
     Transformer transformer = transformerFactory.newTransformer(); 
     Source sourceContent = soapResponse.getSOAPPart().getContent(); 
     String source = sourceContent.toString(); 
     System.out.print("\nResponse SOAP Message = "); 

     // Format it 
     transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
     transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); 

     StreamResult result = new StreamResult(System.out); 
     transformer.transform(sourceContent, result); 
     System.out.println(transformer.toString()); 
} 

Kann jemand bitte machen Sie mir ein Snippet auf wie soll ich speichern Sie die Antwort, die ich bin lokal in einer Datei zu bekommen?

Im obigen Code wird die response in der Konsole angezeigt.

Antwort

1

können Sie die writeTo Methode der SOAPMessage Schnittstelle verwenden, um die gleichen, zum Beispiel zu tun:

FileOutputStream out = new FileOutputStream("somefile"); 
soapResponse.writeTo(out); 

Vinod.