Thursday, January 15, 2009

Apache AXIS2 Web Service Client

This article covers details about writing a web service client using Apache AXIS2 API. The article explains the various API using code snippets and covers parameters require by various methods of web service client API.

Apache AXIS2 web service API mainly consists of two type of objects ServiceClient and OperationClient. ServiceClient provides basic APIs to send and receive SOAP messages, for advanced methods you require Operation Client.

To provide target URL you need to define a EndPointReference type of object.

EndpointReference targetEPR = new EndpointReference(http://localhost:8080/axis2/services/helloworld);

Various options can be given to web service client by creating an Options object. The reference point defined is set into the options along with the Transport protocol.

Options options = new

Options();

options.setTo(targetEPR);

options.setTransportInProtocol(Constants.TRANSPORT_HTTP);

Now create a service client and pass these options to service client using setOptions API of service client.

ServiceClient sender = new ServiceClient();

sender.setOptions(options);

So, till now we have created a service client and provided the various options to it, next step is creating the payload of SOAP message that will be send in the web service call. AXIS2 provides AXIOM (AXIS Object model) to create XML Structure. Following code snippet creates the payload message.

OMFactory fac = OMAbstractFactory.getOMFactory();

OMNamespace omNs = fac.createOMNamespace("http://ws.apache.org/axis2", "");

OMElement method = fac.createOMElement("sayHello", omNs); //Method to be invoked.

OMElement value = fac.createOMElement("parameter1", omNs);

value.addChild(fac.createOMText(value, "Sachin" ));

method.addChild(value);

value = fac.createOMElement("parameter2", omNs);

value.addChild(fac.createOMText(value, "Thapa" ));

method.addChild(value);

Finally use the sendReceive API of ServiceClient to send SOAP request and receive response.

OMElement result = sender.sendReceive(method);

System.out.println(result);

The result object contains the response received from the server.

No comments: