首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用SAAJ创建SOAP请求

如何使用SAAJ创建SOAP请求
EN

Stack Overflow用户
提问于 2016-10-27 06:17:30
回答 2查看 3.2K关注 0票数 1

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

这类SOAP请求

代码语言:javascript
复制
         <?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创建SOAP请求。我发现了一些问题:Java Generate SOAP Envelope

Working Soap client example

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

请帮助创建SOAP请求。

附注:试试这段代码

代码语言:javascript
复制
            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请求。

代码语言:javascript
复制
<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>

如何解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-28 15:30:38

这段代码解决了任务

代码语言:javascript
复制
        MessageFactory messageFactory = MessageFactory.newInstance();
        SOAPMessage soapMessage = messageFactory.createMessage();

        // Retrieve different parts
        SOAPPart soapPart = soapMessage.getSOAPPart();
        SOAPEnvelope soapEnvelope = soapMessage.getSOAPPart().getEnvelope();

        soapEnvelope.addNamespaceDeclaration("xsd", "http://www.w3.org/2001/XMLSchema");
        soapEnvelope.addNamespaceDeclaration("xsi", "http://www.w3.org/2001/XMLSchema-instance");

        // Two ways to extract headers
        //    SOAPHeader soapHeader = soapEnvelope.getHeader();
        //    soapHeader = soapMessage.getSOAPHeader();

        // Two ways to extract body
        SOAPBody soapBody = soapEnvelope.getBody();
        soapBody = soapMessage.getSOAPBody();

        // To add some element

        SOAPElement GetParamter=soapBody.addBodyElement(new javax.xml.namespace.QName("http://examples/2001", "GetParamter"));
        GetParamter = GetParamter.addChildElement(new javax.xml.namespace.QName("request"));
        SOAPElement MonCode=GetParamter.addChildElement(new javax.xml.namespace.QName("http://newsite/mon", "MonCode"));
        MonCode.addTextNode("Latency");

        SOAPElement TimeFrom=GetParamter.addChildElement(new javax.xml.namespace.QName("http://newsite/mon", "TimeFrom"));
        TimeFrom.addTextNode("2016-10-26T11:00");

        SOAPElement TimeTo=GetParamter.addChildElement(new javax.xml.namespace.QName("http://newsite/mon", "TimeTo"));
        TimeTo.addTextNode("2016-10-26T12:00");

票数 1
EN

Stack Overflow用户

发布于 2016-11-02 07:25:28

我认为使用Java并不简单,使用起来也不灵活。

这个解决方案更好

代码语言:javascript
复制
   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);
    }

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40277451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档