2017-05-29 8 views
0

SOAP URLの要求から応答を取得します。このために私はJava get SOAPサービスからの応答URL呼び出し

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:DAL:OrderShim_WS"> 
    <soapenv:Header> 
     <urn:AuthenticationInfo> 
     <urn:userName>Test</urn:userName> 
     <urn:password>12345</urn:password> 
     </urn:AuthenticationInfo> 
    </soapenv:Header> 
    <soapenv:Body> 
     <urn:Get_Order> 
     <urn:Login_Name>[email protected]</urn:Login_Name> 
     </urn:Get_Order> 
    </soapenv:Body> 
</soapenv:Envelope> 

以下のような要求をしなければならない。しかし、私は自分のコードを実行したときに、彼らが要求

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:DAL:OrderShim_WS"> 
    <SOAP-ENV:Header> 
     <urn:AuthenticationInfo> 
      <urn:userName>Test</urn:userName> 
      <urn:password>12345</urn:password> 
     </urn:AuthenticationInfo> 
    </SOAP-ENV:Header> 
    <SOAP-ENV:Body> 
     <urn:Get_Order> 
      <urn:Login_Name>[email protected]</urn:Login_Name> 
     </urn:Get_Order> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

で下に使用して、このSOAPを呼び出す

import javax.xml.soap.MessageFactory; 
import javax.xml.soap.MimeHeaders; 
import javax.xml.soap.SOAPBody; 
import javax.xml.soap.SOAPConnection; 
import javax.xml.soap.SOAPConnectionFactory; 
import javax.xml.soap.SOAPElement; 
import javax.xml.soap.SOAPEnvelope; 
import javax.xml.soap.SOAPHeader; 
import javax.xml.soap.SOAPMessage; 
import javax.xml.soap.SOAPPart; 
import javax.xml.transform.Source; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.stream.StreamResult; 

public class Test { 
    final static String UserLogin = "[email protected]"; 

    public static void main(String[] args) { 
     try { 
      SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance(); 
      SOAPConnection soapConnection = soapConnectionFactory.createConnection(); 
      String url = "http://devlocal04:8080/arsys/WSDL/public/devlocal03/DAL:OrderShim_WS"; 
      SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(), url); 
      printSOAPResponse(soapResponse); 
      soapConnection.close(); 
     } catch (Exception e) { 
      System.out.println("Exception : " + e); 
     } 
    } 

    private static SOAPMessage createSOAPRequest() throws Exception { 
     MessageFactory messageFactory = MessageFactory.newInstance(); 
     SOAPMessage soapMessage = messageFactory.createMessage(); 
     SOAPPart soapPart = soapMessage.getSOAPPart(); 
     String serverURI = "urn:DAL:OrderShim_WS"; 
     SOAPEnvelope envelope = soapPart.getEnvelope(); 
     envelope.addNamespaceDeclaration("urn", serverURI); 

     SOAPHeader soapHeader = envelope.getHeader(); 
     SOAPElement soapHeaderElem = soapHeader.addChildElement("AuthenticationInfo", "urn"); 
     SOAPElement soapHeaderElem1 = soapHeaderElem.addChildElement("userName", "urn"); 
     soapHeaderElem1.addTextNode("Test"); 
     SOAPElement soapHeaderElem2 = soapHeaderElem.addChildElement("password", "urn"); 
     soapHeaderElem2.addTextNode("12345"); 
     SOAPBody soapBody = envelope.getBody(); 
     SOAPElement soapBodyElem = soapBody.addChildElement("Get_Order", "urn"); 
     SOAPElement soapBodyElem1 = soapBodyElem.addChildElement("Login_Name", "urn"); 
     soapBodyElem1.addTextNode(UserLogin); 
     MimeHeaders headers = soapMessage.getMimeHeaders(); 
     headers.addHeader("SOAPAction", serverURI + "Login_Name"); 

     soapMessage.saveChanges(); 
     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(); 
     System.out.print("\nResponse SOAP Message = "); 
     StreamResult result = new StreamResult(System.out); 
     transformer.transform(sourceContent, result); 
    } 
} 

コードの下を使用しています私の要求は "soapenv"のplcaeで "SOAP-ENV"を見ることができ、私は有効な応答を得ていません。

私はJava 1.8を使用しています。

+0

SOAP-ENVはSpring-WSで使用されるデフォルトのプレフィックスです。https://stackoverflow.com/questions/39242197/how-to-change-soap-env-default-prefix-of-spring-ws – sercasti

答えて

1

は、私はあなたが

MessageFactory messageFactory = MessageFactory.newInstance(); 
     SOAPMessage soapMessage = messageFactory.createMessage(); 
     SOAPPart soapPart = soapMessage.getSOAPPart(); 

     String serverURI = ""; 

     // SOAP Envelope 
     SOAPEnvelope envelope = soapPart.getEnvelope(); 
     soapMessage 
       .getSOAPPart() 
       .getEnvelope() 
       .removeAttributeNS("http://schemas.xmlsoap.org/soap/envelope/", 
         "SOAP-ENV"); 
     soapMessage.getSOAPPart().getEnvelope() 
       .removeAttribute("xmlns:SOAP-ENV"); 
     soapMessage.getSOAPHeader().detachNode(); 
     soapMessage.getSOAPPart().getEnvelope().setPrefix("soap"); 
     soapMessage.getSOAPBody().setPrefix("soap"); 

// envelope.addNamespaceDeclaration("ns1", serverURI); 
// we need to send the soap request in the format mentioned below 
/* 
* xmlInput = 
* "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\r\n" 
* + " <soap:Body>\r\n" + 
* "  <ns1:LoginProcesRequest xmlns:ns1=\"http://xmlns.oracle.com/GetSFDCDetailsProcess\">\r\n" 
* + "   <ns1:Login>1000</ns1:Login>\r\n" + 
* "   <ns1:Company>1000</ns1:Company>\r\n" + 
* "  </ns1:LoginProcesRequest>\r\n" + " </soap:Body>\r\n" + 
* "</soap:Envelope>"; 
*/ 

// SOAP Body 
SOAPBody soapBody = envelope.getBody(); 
SOAPElement soapBodyElem = soapBody.addChildElement(
     "LoginProcesRequest", "ns1", serverURI); 
SOAPElement soapBodyElem1 = soapBodyElem 
     .addChildElement("Login", "ns1"); 
soapBodyElem1.addTextNode(inputlogin); 
SOAPElement soapBodyElem2 = soapBodyElem.addChildElement("Company", 
     "ns1"); 
soapBodyElem2.addTextNode(inputcompany); 
MimeHeaders headers = soapMessage.getMimeHeaders(); 
headers.addHeader("SOAPAction", serverURI + "LoginProcesRequest"); 
soapMessage.saveChanges(); 
/* Print the request message */ 
System.out.print("Request SOAP Message = "); 
soapMessage.writeTo(System.out); 
System.out.println(); 

あなたが探索することができます私のコードからアイデアを得るでしょうsoapenvであるためSOAP-ENV.Replace SOAP-ENVのこのエラーを取得またはrequired.Youと同じリクエストを作るていると思いますこれは簡単に

+0

今私は必要なものを正確にPOSTすることができます。しかし、私は有効回答を得ることができません。 WSDL全体をResponseにしています。 – user3441151

+0

私のコードは応答を得るために正しいですか? – user3441151

+0

はい、あなたのコードは私にはうまく見えます.wsdlをwsdl urlから取り除くことで直接ブラウザのwsdlにヒットすることができます。ヒットする必要のあるXMLリクエストが表示されます。同じフォーマットへリクエストを変換してからコードを実行してください –

関連する問題