Friday, November 28, 2014

Creating a client for the Axis2 Web Service

In this post I'm going to explain how to implement a client application for the Axis2 web service we created in my previous post.

We can use the WSDL2Java tool in Axis2 to generate the client side stubs to interact with the service. You can use either the command line version of this tool or the Ant task as mentioned in the Axis2 guide [1].

In this post I will use the axis2-wsdl2code-maven-plugin to generate the client side stub.

You can use this pom to configure the axis2-wsdl2code-maven-plugin to genrate the stub code and the project structure.

  
  
       axis2-webservice-client
       4.0.0  
       jar  
       org.wso2.training.manorama  
       1.0  
         
            1.6.2  
            1.2.16  
         
         
              
                   
                      /src/main/resources
                      true  
                   
              
              
                   
                      org.apache.axis2  
                      axis2-wsdl2code-maven-plugin  
                      1.6.2  
                        
                             
                                  
                                     wsdl2code  
                                  
                                  
                                     http://localhost:8080/axis2/services/OrderProcessingService?wsdl  
                                     adb  
                                     org.wso2.training.orderprocessor.stub
                                     src/main/java  
                                     true  
                                  
                             
                        
                   
                   
                      org.apache.maven.plugins  
                      maven-compiler-plugin  
                   
              
         
         
              
                 org.apache.axis2  
                 axis2-kernel  
                 ${axis2.version}  
              
              
                 org.apache.axis2  
                 axis2-adb  
                 ${axis2.version}  
              
              
                 org.apache.axis2  
                 axis2-transport-http  
                 ${axis2.version}  
              
              
                 org.apache.axis2  
                 axis2-transport-local  
                 ${axis2.version}  
              
              
                 org.apache.axis2  
                 axis2-xmlbeans  
                 ${axis2.version}  
              
              
                 log4j  
                 log4j  
                 ${log4j.version}  
              
         
  
  • Create a directory with the name SampleClient (with any name you prefer). 
  • Save the above pom.xml with the required configuration.
  • Note the <wsdlFile> element contains the path to the WSDL file. In this case it is the WSDL file of the OrderProcessingService deployed in the Axis2 Server. So the Axis2Server should be up and running. <packageName> element contains the package name which contains the generated stub java code.
  • And configure the groupId, output directory as you prefer.
To generate the client stubs and the project structure go inside the folder SampleClient and give the following command.

$mvn clean install

You will be able to see the generated folders src and target. Now you can open this maven project using your preferred IDE. Here I'm using IntellijIdea.

You will see the project structure similar to the image below.




Now it's time to write the client code to send request.

I've created another package called orderclient. Inside that I've added  a new Java class Client.java

package org.wso2.training.orderclient;

import org.apache.axis2.AxisFault;
import org.wso2.training.orderprocessor.stub.OrderProcessingServiceStub;

import java.rmi.RemoteException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Created with IntelliJ IDEA.
 * User: manorama
 * Date: 11/28/14
 * Time: 1:14 PM
 * To change this template use File | Settings | File Templates.
 */
public class Client {

    private static final Logger logger = Logger.getLogger(Client.class.getName());

    public static void main(String[] args) {

        OrderProcessingServiceStub stub = null;
        try {
            stub = new OrderProcessingServiceStub();

            // Create the request - In-only
            OrderProcessingServiceStub.SubmitOrder request = new OrderProcessingServiceStub.SubmitOrder();
            request.setOrderID("25");
            request.setAmount(240);
            stub.submitOrder(request);

            // Invoke the service - In-out service
            OrderProcessingServiceStub.GetAmount getAmount = new OrderProcessingServiceStub.GetAmount();
            getAmount.setOrderID("25");
            OrderProcessingServiceStub.GetAmountResponse response = stub.getAmount(getAmount);

            logger.info("Response from OrderProcessing service [OrderID : 25]: " + response.get_return());

        } catch (AxisFault axisFault) {
            logger.log(Level.SEVERE, axisFault.getMessage());
        } catch (RemoteException e) {
            logger.log(Level.SEVERE, e.getMessage());
        }


    }
}


It's time to compile and run the client.

References:
[1] https://axis.apache.org/axis2/java/core/tools/CodegenToolReference.html
[2] http://briansjavablog.blogspot.com/2013/01/axis2-web-service-client-tutorial.html 
[3] https://axis.apache.org/axis2/java/core/tools/maven-plugins/maven-wsdl2code-plugin.html

No comments: