天天看點

用Soap消息調用Web Services(續)

    上篇《用Soap消息調用Web Services》隻是簡單的調用一個傳回值為String的無參數WebService,這次改成調用一個參數為int型的傳回值為一個類對象的WebService

伺服器端WebService:

public class user implements Serializable

{

    private String name;    

    public user()

    {

    }

    public String getName() {

        return name;

    public void setName(String name) {

        this.name = name;

}

public class classDemo implements Serializable

    private user[] users;

    public user[] getUsers() {

        return users;

    public void setUsers(user[] users) {

        this.users = users;

public class HelloWorldServiceImpl implements IHelloWorldService 

    public  classDemo GetUsersInRoom(int rID)

        classDemo cd = new classDemo();

        user[] a = new user[2];

        a[0] = new user();

        a[0].setName("aa");

        a[1] = new user();

        a[1].setName("bb");

        cd.setUsers(a);

        return cd;

用戶端代碼:

public static void doSoapPost()

        try 

        {

             //First create the connection

             SOAPConnectionFactory soapConnFactory = 

                                SOAPConnectionFactory.newInstance();

             SOAPConnection connection = 

                                 soapConnFactory.createConnection();

             //Next, create the actual message

             MessageFactory messageFactory = MessageFactory.newInstance();

             SOAPMessage message = messageFactory.createMessage();

             //Create objects for the message parts            

             SOAPPart soapPart = message.getSOAPPart();

             SOAPEnvelope envelope = soapPart.getEnvelope();

             SOAPBody body = envelope.getBody();       

            //Populate the Message

            StreamSource preppedMsgSrc = new StreamSource( 

                     new FileInputStream("E:\\soap.msg"));

            soapPart.setContent(preppedMsgSrc);

             //Save the message

             message.saveChanges();

             //Check the input

             System.out.println("\nREQUEST:\n");

             message.writeTo(System.out);

             System.out.println();

            //Send the message and get a reply   

            //Set the destination

            String destination = 

                  "http://localhost:8080/HelloWorld/services/HelloWorldService";

            //Send the message

            SOAPMessage reply = connection.call(message, destination);

//          Check the output

            System.out.println("\nRESPONSE:\n");

            //Create the transformer

            TransformerFactory transformerFactory = 

                               TransformerFactory.newInstance();

            Transformer transformer = 

                            transformerFactory.newTransformer();

            //Extract the content of the reply

            Source sourceContent = reply.getSOAPPart().getContent();

            //Set the output for the transformation

            StreamResult result = new StreamResult(System.out);

            transformer.transform(sourceContent, result);

            System.out.println();

             //Close the connection            

             connection.close();

        } 

        catch(Exception e) 

                System.out.println(e.getMessage());

        }   

用戶端Soap請求格式:

REQUEST:

<?xml version="1.0" encoding="UTF-8"?>

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<soap:Body>

<ns1:GetUsersInRoom xmlns:ns1="http://phinecos.cnblogs.com">

<in0 xsi:type='xsd:int'>3

</in0> 

</ns1:GetUsersInRoom>

</soap:Body>

</soap:Envelope>

伺服器端響應結果:

RESPONSE:

<?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soap:Body><ns1:GetUsersInRoomResponse xmlns:ns1="http://phinecos.cnblogs.com"><ns1:out><users xmlns="http://boomga.com"><user><name>aa</name><path>/a.w3d</path></user><user><name>bb</name><path>/b.w3d</path></user></users></ns1:out></ns1:GetUsersInRoomResponse></soap:Body></soap:Envelope>

本文轉自Phinecos(洞庭散人)部落格園部落格,原文連結http://www.cnblogs.com/phinecos/archive/2007/08/21/864260.html,如需轉載請自行聯系原作者