1

I understand that I may be ask a trivial question, BUT was unable to properly create the required SOAP request format.

SOAP request of this kind

         <?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>

I try to create SOAP request using SAAJ API by Java. I found some question: Java Generate SOAP Envelope

and Working Soap client example

BUT not understood, how create SOAP request for my event.

Please help to create SOAP request.

p.s. try this code

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

BUT in result get SOAP request without value "http://examples/2001" "http://newsite/mon".

<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>

How to solve this problem?

Community
  • 1
  • 1
Nikolay Baranenko
  • 1,582
  • 6
  • 35
  • 60

2 Answers2

2

my opinion using Java SAAJ not simple, not flexible for use

this solve is better

   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);
    }
Nikolay Baranenko
  • 1,582
  • 6
  • 35
  • 60
1

this code solve task

        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");
Nikolay Baranenko
  • 1,582
  • 6
  • 35
  • 60