java - 如何使用 SAAJ API 创建 SOAP 请求

标签 java soap soap-client saaj

我知道我可能会问一个简单的问题,但无法正确创建所需的 SOAP 请求格式。

此类 SOAP 请求

         <?xml version="1.0" encoding="UTF-8" ?>
         <SOAP:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
         <SOAP:Body>
         <GetParameter xmlns="http://examples/2001">
		 <request>
         <MonCode xmlns="http://newsite/mon">Latency</MonCode>
		 <TimeFrom xmlns="http://newsite/mon">2016-10-26T11:00</TimeFrom>
		 <TimeTo xmlns="http://newsite/mon">2016-10-26T12:00</TimeTo>
         </request>
		 </GetParameter>
         </SOAP:Body>
         </SOAP:Envelope>

我尝试使用 Java 的 SAAJ API 创建 SOAP 请求。 我发现了一些问题: Java Generate SOAP Envelope

Working Soap client example

但不明白如何为我的事件创建 SOAP 请求。

请帮助创建 SOAP 请求。

附:试试这个代码

            MessageFactory messageFactory = MessageFactory.newInstance();
        SOAPMessage message = messageFactory.createMessage();
        SOAPPart soapPart = message.getSOAPPart();
        SOAPEnvelope envelope = soapPart.getEnvelope();
        envelope.addNamespaceDeclaration("xsd", "http://www.w3.org/2001/XMLSchema");
        envelope.addNamespaceDeclaration("xsi", "http://www.w3.org/2001/XMLSchema-instance");
        envelope.addNamespaceDeclaration("soap", "http://schemas.xmlsoap.org/soap/envelop/");

        SOAPBody body = message.getSOAPBody();
        SOAPElement bodyElement = body.addChildElement("GetParameter");
        bodyElement.setAttribute("xmlns", "http://examples/2001");
        bodyElement = body.addChildElement("request");
        SOAPElement paramsElement = bodyElement.addChildElement("MonCode");
        paramsElement.setAttribute("xmlns", "http://newsite/mon");
        paramsElement.addTextNode("Latency");
        paramsElement = bodyElement.addChildElement("TimeFrom");
        paramsElement.setAttribute("xmlns", "http://newsite/mon");
        paramsElement.addTextNode("2016-10-26T11:00");
        paramsElement = bodyElement.addChildElement("TimeTo");
        paramsElement.setAttribute("xmlns", "http://newsite/mon");
        paramsElement.addTextNode("2016-10-26T12:00");

但是在结果中得到没有值“http://examples/2001”“http://newsite/mon”的SOAP请求。

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelop/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><SOAP-ENV:Header/>
  <SOAP-ENV:Body>
    <GetParameter xmlns=""/>
    <request>
      <MonCode xmlns="">Latency</MonCode>
      <TimeFrom xmlns="">2016-10-26T11:00</TimeFrom>
      <TimeTo xmlns="">2016-10-26T12:00</TimeTo>
    </request>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

如何解决这个问题?

最佳答案

我认为使用Java SAAJ不简单,使用不灵活

这个解决方案更好

   public static void main(String args[]) throws Exception {

        String addr = "http://ws.cdyne.com/emailverify/Emailvernotestemail.asmx";
        String request = "<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:example=\"http://ws.cdyne.com/\"><SOAP-ENV:Header/><SOAP-ENV:Body>\n" +
                "<example:VerifyEmail><example:email>mutantninja@gmail.com</example:email>\n" +
                "<example:LicenseKey>123</example:LicenseKey></example:VerifyEmail>\n" +
                "</SOAP-ENV:Body></SOAP-ENV:Envelope>";

        URL url = null;
        try {
            url = new URL(addr);
        } catch (MalformedURLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        HttpURLConnection connection = null;
        try {
            connection = (HttpURLConnection) url.openConnection();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        connection.setRequestProperty("Content-Length", String.valueOf(request.length()));
        connection.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");
        connection.setRequestProperty("Connection", "Keep-Alive");
        connection.setRequestProperty("SoapAction", "http://ws.cdyne.com/VerifyEmail");
        connection.setDoOutput(true);
        PrintWriter pw = null;
        try {
            pw = new PrintWriter(connection.getOutputStream());
        } catch (IOException e2) {
            // TODO Auto-generated catch block
            e2.printStackTrace();
        }
        pw.write(request);
        pw.flush();

        try {
            connection.connect();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        BufferedReader rd = null;
        try {
            rd = new BufferedReader(new InputStreamReader(
                    connection.getInputStream()));
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        String line;
        String respond = "";
        try {
            respond = rd.readLine();
            while ((line = rd.readLine()) != null)
                respond = line;

        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        System.out.println(respond);
    }

关于java - 如何使用 SAAJ API 创建 SOAP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40277451/

相关文章:

java - SWT Java : how to change colour of text in Label control?

java - 如何使用java将phantomjs连接到selenium

java - 使用 AES/CBC/NOPADDING 在 Node 中加密并使用相同算法在 JAVA 中解密,会产生一些垃圾,例如 e�J�,�d�|*�5har��

Java - 将 Web 服务响应 (StreamResult) 转换为 XML 以检索子值

java - 我如何使用 spring 使用带参数的消息

.NET WCF 无法解码 "Chunked"响应

python - 如何使用 Python 通过 Microsoft Exchange Web 服务 API 发送电子邮件

php - 在 PHP NUSOAP SoapClient 中使用的 TLS v1.2 密码

Delphi Soap WebServer 不允许同时调用超过 2 个

php - Soap xml 在 php 中传递引用