如何为给定xml的客户端saaj创建soap请求

时间:2017-03-30 09:34:02

标签: java xml web-services soap

我是SOAP的新手。我想在soap下面创建一个xml请求。

XML

<?xml version="1.0" encoding="utf-8"?> 
        <soap:Envelope xmlns:soap="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> 
        <SendRequest xmlns="http://tempuri.org/"> 
        <request xsi:type="RegisterCheckRequest" Id="7a646d45-ee2f-4b1c-8de8-780c416fbbd0" Service="42" xmlns="http://paygo24.com/v3/protocol"> 
        <PaymentParameters xmlns=""> 
        <Parameter Name="account" Value="08374829" /> 
        </PaymentParameters> 
        </request> 
        <pointId>46</pointId> 
        <password>4QrcOUm6Wau+VuBX8g+IPg==</password>
         </SendRequest>
          </soap:Body> 
          </soap:Envelope>

我正在使用下面的示例java文件,创建soap请求,但我无法这样做,任何人都可以给我支持。

示例Java文件以创建soap请求

import javax.xml.soap.*;

public class SOAPClientSAAJ {

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

        // Send SOAP Message to SOAP Server
        String url = "http://ws.cdyne.com/emailverify/Emailvernotestemail.asmx";
        SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(), url);

        // print SOAP Response
        System.out.print("Response SOAP Message:");
        soapResponse.writeTo(System.out);

        soapConnection.close();
    }

    private static SOAPMessage createSOAPRequest() throws Exception {
        MessageFactory messageFactory = MessageFactory.newInstance();
        SOAPMessage soapMessage = messageFactory.createMessage();
        SOAPPart soapPart = soapMessage.getSOAPPart();

        String serverURI = "http://ws.cdyne.com/";

        // SOAP Envelope
        SOAPEnvelope envelope = soapPart.getEnvelope();
        envelope.addNamespaceDeclaration("example", serverURI);

        /*
        Constructed SOAP Request Message:
        <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:example="http://ws.cdyne.com/">
            <SOAP-ENV:Header/>
            <SOAP-ENV:Body>
                <example:VerifyEmail>
                    <example:email>mutantninja@gmail.com</example:email>
                    <example:LicenseKey>123</example:LicenseKey>
                </example:VerifyEmail>
            </SOAP-ENV:Body>
        </SOAP-ENV:Envelope>
         */

        // SOAP Body
        SOAPBody soapBody = envelope.getBody();
        SOAPElement soapBodyElem = soapBody.addChildElement("VerifyEmail", "example");
        SOAPElement soapBodyElem1 = soapBodyElem.addChildElement("email", "example");
        soapBodyElem1.addTextNode("mutantninja@gmail.com");
        SOAPElement soapBodyElem2 = soapBodyElem.addChildElement("LicenseKey", "example");
        soapBodyElem2.addTextNode("123");

        MimeHeaders headers = soapMessage.getMimeHeaders();
        headers.addHeader("SOAPAction", serverURI  + "VerifyEmail");

        soapMessage.saveChanges();

        /* Print the request message */
        System.out.print("Request SOAP Message:");
        soapMessage.writeTo(System.out);
        System.out.println();

        return soapMessage;
    }

}

2 个答案:

答案 0 :(得分:1)

这是您构建soap请求的方式

 private static SOAPMessage createSOAPRequest() throws Exception {

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


    SOAPEnvelope envelope = soapPart.getEnvelope();      
    envelope.removeNamespaceDeclaration(envelope.getPrefix());
    envelope.addNamespaceDeclaration("soap","http://schemas.xmlsoap.org/soap/envelope/");
    envelope.setPrefix("soap");              
    envelope.addNamespaceDeclaration("xsi","http://www.w3.org/2001/XMLSchema-instance");
    envelope.addNamespaceDeclaration("xsd","http://www.w3.org/2001/XMLSchema"); 
    SOAPHeader header=soapMessage.getSOAPHeader();                      
    header.setPrefix("soap");       
    SOAPBody soapBody = envelope.getBody();
    soapBody.setPrefix("soap");
    SOAPElement root=soapBody.addChildElement(new QName("http://tempuri.org/","SendRequest"));      
    SOAPElement request=root.addChildElement(new QName("http://paygo24.com/v3/protocol","request"));       
    request.setAttribute("xsi:type", "RegisterCheckRequest");
    request.setAttribute("Id","7a646d45-ee2f-4b1c-8de8-780c416fbbd0");
    request.setAttribute("Service","42");        
    SOAPElement paymentParameters =request.addChildElement(new QName(" ","PaymentParameters"));
    SOAPElement parameter=paymentParameters.addChildElement("Parameter");        
    parameter.setAttribute("Name","account");
    parameter.setAttribute("Value", "08374829");
    root.addChildElement("pointId").setValue("46");       
    root.addChildElement("password").setValue("4QrcOUm6Wau+VuBX8g+IPg==");           
    soapMessage.saveChanges();

    soapMessage.writeTo(System.out);


    return soapMessage;
}

答案 1 :(得分:0)

您可以使用注释从对象生成XML,以将类成员绑定到XML元素/属性。一种流行的方法是使用JAX-B。请参阅本教程:http://www.vogella.com/tutorials/JAXB/article.html