3Sample: Data Binding
====================

Introduction
============

This sample demonstrates how to use WSDL2Java generated code with Castor. 

Running of this sample assumes that you are running this within the extracted release folder (Axis2_HOME/samples/databinding).


Pre-Requisites
==============
 * Install Apache Ant 1.6.2 or later.
 * Please create a directory named lib under the directory that contains this file.
 * Download the following libraries and drop them into the new lib directory:
   * Version 1.0.4 of Castor jar from http://dist.codehaus.org/castor/1.0.4/castor-1.0.4.jar.
     (The latest releases of castor are available at http://www.castor.org/download.html, but this example may not run 	
     with versions later than 1.0.4)
   * A recent Xerces version from http://xerces.apache.org/.

You can achieve all three of the above steps by running "ant download.jars", but it will take some 
time to download those two jars, using ant.


Deploying the Service
=====================

You need to create the stock service Web service and deploy it. Typing ant generate.service or 
simply ant in the command prompt, will build the service against StockQuoteService.wsdl listed 
inside Axis2_HOME/samples/databinding and put it under Axis2_HOME/repository/services.

You need to then startup the server to deploy the service. Go to Axis2_HOME/bin folder and execute either
axis2server.bat (in Windows) or axis2server.sh(in Linux), depending on your platform.


Running the Client
==================

Typing the command "ant run.client" inside Axis2_HOME/samples/databinding runs the Axis2_HOME/samples/databinding/client/src/samples/databinding/StockClient.java class. You may use
the command scripts (as specified above) to do so. You need to supply 2 parameters to the command- url and symbol.

 * ant run.client -Durl=http://localhost:8080/axis2/services/StockQuoteService -Dsymbol=IBM
   Succeeds with a Price of 99.0. You will see "Price = 99.0"

When you call ant run.client with parameters, before running
client/src/samples/databinding/StockClient.java class, it does the following as well:

  * Generate the stubs (for the client) from the WSDL
  * Compile the client classes
  * Create a Jar of the client classes and copy it to build/client/StockService-test-client.jar

How It Works
==============

- Generate code giving -d none to get all the Axis2 APIs with OMElements.
- Create Castor objects for the schema given in the StockQuoteService.wsdl.
- Client API and the service uses those castor objects to get/set data.
- Get StAX events from the castor objects and construct OMElements from them. Those StAX events
  are fed into StAXOMBuilder which can create OM tree from it.
- Feed those OMElement in to generated code.

Note
==============
Sometimes, if you're having trouble running the client successfully, 
It may be necessary to clean the services repository before you generate the service, deploy it
and run the client. (i.e. delete services created from previous samples.)

Help
====
Please contact axis-user list (axis-user@ws.apache.org) if you have any trouble running the sample.

