Sunday, May 25, 2014

Hi, in this Posts I will be explaining you how to develop the client to access the AXIOM based AXIS2 web service, what we created in part 1 and tested in part 2.

Ok So lets get started


Prerequisites

The service should be developped and deployed in Axis2, this is explained in part 1 of this post series.
I will be using eclipse to create my client.

Architecture of the client

Customers items will be added to the itemsList and all the items will be processes when buying the items (Final Checkout). There won't be any user inputs or interfaces, this is a simple client side application to demonstrate how a service can be accessed in Axis2 via AXIOM So all the inouts will be hard coded in the client application.

Creating the Client

Step 1

  1. Create a new Java Project and lets name it "Axis2_Webservice".
  2. Within "src" directory let's create a package as follows, "televisionshop.client"
  3. To resolve dependency issues add all the jars in the <AXIS2_HOME>/lib directory into your class path. All the jars may not be required, doing this to make things easy :)
  4. Now within the created package create a new java class named "TelevisionShopClient.java" with the following code snippets

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
package televisionshop.client;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.xml.namespace.QName;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.AxisFault;
import org.apache.axis2.Constants;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;

public class TelevisionShopClient {

 private static String namespace = "http://myshop.com/xsd";

 // Customer Items will be added to the itemList
 static HashMap<String, String> itemList = new HashMap<String, String>();

 private static EndpointReference endPointRef = new EndpointReference(
   "http://localhost:8080/axis2/services/TelevisionShopService");

 public static OMElement getProductAXIOMXML(String id) {
  OMFactory fac = OMAbstractFactory.getOMFactory();
  OMNamespace omNs = fac
    .createOMNamespace("http://myshop.com/xsd", "tns");

  OMElement method = fac.createOMElement("getProduct", omNs);
  OMElement value = fac.createOMElement("id", omNs);
  value.addChild(fac.createOMText(value, id));
  method.addChild(value);
  return method;
 }

 public static OMElement setProductAXIOMXML(String id, String model,
   String price, String qty) {
  OMFactory fac = OMAbstractFactory.getOMFactory();
  OMNamespace omNs = fac
    .createOMNamespace("http://myshop.com/xsd", "tns");

  OMElement method = fac.createOMElement("setProduct", omNs);

  OMElement value1 = fac.createOMElement("id", omNs);
  value1.addChild(fac.createOMText(value1, id));
  method.addChild(value1);

  OMElement value2 = fac.createOMElement("model", omNs);
  value2.addChild(fac.createOMText(value2, model));
  method.addChild(value2);

  OMElement value3 = fac.createOMElement("price", omNs);
  value3.addChild(fac.createOMText(value3, price));
  method.addChild(value3);

  OMElement value4 = fac.createOMElement("qty", omNs);
  value4.addChild(fac.createOMText(value4, qty));
  method.addChild(value4);

  return method;
 }

 public static void getProductDetails(String id) throws AxisFault {

  OMElement getPhonePayload = getProductAXIOMXML(id);
  Options options = new Options();
  options.setTo(endPointRef);
  options.setTransportInProtocol(Constants.TRANSPORT_HTTP);

  ServiceClient sender = new ServiceClient();
  sender.setOptions(options);

  OMElement result = sender.sendReceive(getPhonePayload);

  System.out.println("Model : "
    + result.getFirstChildWithName(new QName(namespace, "model"))
      .getText());
  System.out.println("Price  : "
    + result.getFirstChildWithName(new QName(namespace, "price"))
      .getText());
  System.out.println("QTY On Stocks : "
    + result.getFirstChildWithName(new QName(namespace, "qty"))
      .getText());
  System.out.println();

 }

 public static void updateProductDetails(String id, String model,
   String price, String qty) {

  try {
   OMElement updatePhonePayload = setProductAXIOMXML(id, model, price,
     qty);
   Options options = new Options();
   options.setTo(endPointRef);
   options.setTransportInProtocol(Constants.TRANSPORT_HTTP);

   ServiceClient sender = new ServiceClient();
   sender.setOptions(options);

   sender.fireAndForget(updatePhonePayload);

   System.out.println("Updated Product Details of Product : " + model);

  } catch (Exception e) {
   e.printStackTrace();
  }

 }

 public static void buyItems(HashMap itemList) throws AxisFault {

  Iterator it = itemList.entrySet().iterator();
  float total = 0;
  System.out.println("=================================================");
  System.out.println("===========YOUR ORDER DETAILS====================");
  System.out.println("=================================================");

  while (it.hasNext()) {
   Map.Entry entry = (Map.Entry) it.next();
   String key = (String) entry.getKey();
   String val = (String) entry.getValue();

   OMElement getPhonePayload = getProductAXIOMXML(key);
   Options options = new Options();
   options.setTo(endPointRef);
   options.setTransportInProtocol(Constants.TRANSPORT_HTTP);

   ServiceClient sender = new ServiceClient();
   sender.setOptions(options);

   OMElement result = sender.sendReceive(getPhonePayload);

   String model = result.getFirstChildWithName(
     new QName(namespace, "model")).getText();

   if (Integer.parseInt(result.getFirstChildWithName(
     new QName(namespace, "qty")).getText()) <= Integer
     .parseInt(val)) {
    System.out.println("Not Enough Stock for : " + model);
    System.out.println();
    continue;

   }
   float price = Float.parseFloat(result.getFirstChildWithName(
     new QName(namespace, "price")).getText());

   total += price * Float.parseFloat(val);

   System.out.println("Value of your Items : " + model
     + " Television : (No of Units : " + val + " ) = " + price
     * Float.parseFloat(val));

  }
  System.out.println();
  System.out.println("The Total Value of your Items = " + total);
  System.out.println();

 }

 public static void main(String[] args) throws AxisFault {

  // Adding Products to the Service
  updateProductDetails("001", "Samsung", "100", "6");
  updateProductDetails("002", "Philipse", "200", "15");

  // Retrieving information about a product
  getProductDetails("1");

  // Customer adding items to the List --> The first arguement is product
  // ID and Second is no of units
  itemList.put("001", "5");
  itemList.put("002", "3");

  // Checking out
  buyItems(itemList);

 }

}


  1. The final file structure will look like following,

  1. Now right click on the "TelevisionShopClient.java" file and select Run As >>> Java Application.


  1. The following output will be displayed on your output console of the IDE.


We have successfully developed our service and the client by using Axis2 and AXIOM.
Thank you for reading and direct me any queries you have. :)
Categories: , , ,

0 comments:

Post a Comment

Subscribe to RSS Feed Follow me on Twitter!