Tuesday, May 25, 2010

Web Service Client

I discuss about how to create the stub of the web service and check whether it works. Now I am going to discuss how to create a client program which uses the web service. Here I am going to create a client program to my favorite web service "HelloService".
I thought it would be better to know about how things work.
First of all what is a stub? In simple language it is the interface which represent web service in the client side. So using stub we can work with the web service as it is in the same project/package. 
Then why we use Axis2? This is which do the communication between stub and the web service. For this Axis2 use SOAP(Simple Object Access Protocol) messages. Here two Axis2 servers are involved. 
The first one is in the client side and the other one is in the server side. Client side Axis2 server is responsible for create SOAP messages which invoke the web service through the stub, and catch and execute the response SOAP message which send by the  server side Axis2 server. The Server side Axis2 server is responsible for catch the SOAP message which the client side Axis2 server send and invoke the web service, and create a SOAP message to the response of the web service and send it to the client side Axis2 server. (The process is more complex than this)
Now lets finish the client implementation.
First of all take a look at the stub to see how it gave an interface to the remote service(need to have a rough idea).
You will see all the parameters of the the web service are represent as java classes and their values should set through setter methods and the output is also implemented as a class and we have to use getter method to get the real output (you may not understand this but you will realize your self when creating the client class).
now follow the following steps to create a client class.....
1. Create a java class with main method.
2. Import the package which include the "stub" into your class. This step can be skipped if you creating the class in the same package.
3. Create a object of the stub class (my stub class name is HelloServiceStub.java) in the your class. 
4. Let my stub object be "stub" and the method I need to invoke in the web service be sayHello().
    Then you see that you can access that method using the stub object. (for example stub.sayHello())
    But the thing is the parameters you need to parse to that method cannot be directly send as a String, Integer or  like that data type.
    We can use the IDE or you can look at the stub to see what parameters we need to parse through sayHello() . In my case it need to parse a SayHello object. (This SayHello java class is in the stub)
    Then create a object of the class it need. 
                  SayHello sayHello = new Sayhello();
    Then set the value you need to send as parameters for the actual method. 
                  sayHello.setName(name);
    Then send the sayHello object as the parameter of the method as stub.sayHello(sayHello);
    
5. Now its time to get the response
    Response is always come as an java class object. So we need to get it to a related class reference object.
    Use IDE or stub to see the response class type and get the response to it as follows. For my case it returns a SayHelloResponse object.(This SayHelloResponse java class is in the stub)
              SayHelloResponse helloMsg = stub.sayHello(sayHello);
   So at the end we can use that respond class to get the needed output.
               String output = helloMsg.get_return();
   If you use System.out.print(output); to print you can see the output print in the console.
   After all my Hello client look like as follows

6. After creating the client class you can run it as a java application which print the web service result.
   I send Eranda as the input and and I got the result as "Hello Eranda" 


PS: When you  creating the object you have to use a try-catch around some lines to catch the RemoteException. and AxisFault exceptions (so you need to import java.rmi.RemoteException and org.apache.axis2.AxisFault classes)

No comments:

Post a Comment