Contents

Introduction 
What's in this release
Axis C++ now delivers the following key features
Installing Axis and Using this Guide

Download Source Distribution
ServerSide Skeleton and Wrappers generated by WSDL2ws Tool.
Deploying Services
Client side Stubs Generated by the wsdl2ws Tool
Building Server Side for provided Samples
Building Client Side for provided Samples


Download Binary
ServerSide Skeleton and Wrappers generated by WSDL2ws Tool.
Deploying Services
Client side Stubs Generated by the wsdl2ws Tool
Building Server Side for provided Samples
Building Client Side for provided Samples

Getting a CVS checkout

Introduction

Welcome to Axis C++, the opensource c++ implementation of SOAP !

What is SOAP? 

SOAP is an XML-based communication protocol and encoding format for inter-application communication. Originally conceived by Microsoft and Userland software, it has evolved through several generations and the current spec, SOAP 1.2 is fast growing in popularity and usage. The W3C's XML Protocol working group is in the process of turning SOAP into a true open standard, and as of this writing has released a working draft of SOAP 1.2, which cleans up some of the more confusing areas of the 1.1 spec. SOAP is widely viewed as the backbone to a new generation of cross-platform cross-language distributed computing applications, termed Web Services. What is Axis C++? Axis C++ is essentially a SOAP engine.

This version is written in C++. Axis C++ SOAP engine adopts most of Axis Java architecture. But it has some major architectural innovations over Axis Java in order to achieve greater performance and efficiency.

What's in this release?

- Soap engine with both client and server support

- Support for both SOAP 1.1 and SOAP 1.2

- WSDD based deployment with dynamic deployment tools.

- Support for all basic types, Complex types and Arrays

- WSDL2WS tool for building C/C++ components

- Server side – Skeletons and Wrappers

- Client side – Stubs

- WSDL2WS tool that generates wrappers, which perform the following functions. These wrappers act as RPC    
   Providers.

- Serialization

- Deserialization

- Method invocation

- WSDLs hosted statistically in the server.

- Standalone server (with HTTP support)

- Web server modules for Apache 1.3 & Apache2 (Linux/Windows)

- Basic Wrapper Class Generator tool with following functionalities.

- Web interface to the deployed services and their WSDL s.

- Sample web services and client applications.

- Document style web services support

Axis C++ now delivers the following key features

- Speed: Axis uses SAX (event-based) parsing to acheive significantly greater speed than earlier versions of Apache

SOAP.

- Flexibility

- Stability , Component oriented Deployment

- Transport Framework

- WSDL support

AxisC++ 1.1 supports the Web Service Description Language, version 1.1, which allows you to easily build stubs to access remote services, and also to automatically export machine-readable descriptions of your deployed services from Axis. We hope you enjoy using Axis c++ 1.1. Please note that this is an open-source effort - if you feel the code could use some new features or fixes, please get involved and lend a hand! The Axis developer community welcomes your participation. Let us know what you think! Please send feedback about the package to axis-user@xml.apache.org

Installing Axis and Using this Guide

See the Axis Installation Guide for instructions on installing Axis C++

Before running the examples in this guide, you'll need to make sure that your environment variables and other configurations are set correctly as described in Installation guide. That is you need

- Axis C++

- Apache1.3 (or Apache2.0)

- expat

- j2SDK1.4

installed and configured.

Download Source Distribution

Let's take a look at a sample Calculator service client that will call methods of a Calculator service deployed on Axis C++. 

When starting with the valid WSDL file to use Axis C++ you have to get started with the tool called WSDL2Ws which is written in Java. source for WSDL2Ws tool is in

$AXISCPP_HOME/src/wsdl

You need the following jar files included in the CLASSPATH .

- axis.jar

- commons-discovery.jar

- commons-logging.jar

- jaxrpc.jar

- saaj.jar

- wsdl4j.jar

- xml-apis.jar

The CLASSPATH Environment Variable should have the absolute paths of the jars (including the jar file name) given as a colon separated list

Here is a sample /home/axisuser/.bash_profile file where we specified those

AXIS_JARS_HOME="$AXISCPP_HOME/lib/axisjava"

AXIS_JARS="$AXIS_JARS_HOME/axis-
ant.jar:$AXIS_JARS_HOME/axis.jar:$AXIS_JARS_HOME/commons-
discovery.jar:$AXIS_JARS_HOME/commons-
logging.jar:$AXIS_JARS_HOME/jaxrpc.jar:$AXIS_JARS_HOME/log4j-
1.2.4.jar:$AXIS_JARS_HOME/saaj.jar:$AXIS_JARS_HOME/wsdl4j.jar"

JAVA_HOME="/usr/java"

PATH="$PATH:$JAVA_HOME/bin:."

CLASSPATH="$CLASSPATH:./:$JAVA_HOME/lib:$AXIS_JARS:"

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC AXIS_JARS_HOME

AXIS_JARS JAVA_HOME CLASSPATH

Now

$ cd $AXISCPP_HOME/src/wsdl/

$ mkdir temp

$javac -d ./temp -sourcepath . ./org/apache/axis/wsdl/wsdl2ws/*.java

$cd temp

$jar -cvf wsdl2ws.jar org

$cp -f wsdl2ws.jar $AXISCPP_HOME/lib/axis

add this jar to the classpath as well.

Server side Skeleton And Wrappers Generated by the wsdl2ws Tool

We use the sample at

$AXISCPP_HOME/samples/simple/server

We use this sample to demonstrate the generation of serverside skeletons and how to deploy a web service using it.

Inside this folder you will find Calculator.wsdl file using which we generate skeleton and Wrappers. Here is the command line arguments to generate the skeleton.

cd $AXISCPP_HOME/server/samples/simple

% java org.apache.axis.wsdl.wsdl2ws.WSDL2Ws Calculator.wsdl -lc++ -sserver

Note: If you give -o. /GenClassesServer then the server create a folder named GenClassServer and put the source there. Otherwise the source is put in the current folder where the tool is run.

Deploying the Service

The Folder called deploy in the $AXISCPP_HOME/ should be copied to apache root folder .Rename the deploy folder as "Axis" . Give all permissions to this folder.

$ cp –rf $AXISCPP_HOME/deploy /usr/local/apache

$ cd /usr/local/apache

$ mv deploy Axis

$ chmod -R 777 Axis

Now set the environment variable AXIS_HOME pointing to this directory.

AXIS_HOME="/usr/local/apache/Axis"

Note that inside $AXIS_HOME directory there is a file called axiscpp.conf. Make sure that it has read permissions. This file contains key, value pairs of paths used by the Axis Soap Engine. You can change the WSDDFILEPATH and AXISLOGPATH inside this file according to your choice.

By typing above in  the command line the dynamic library ( libbase.so for example) is created which is used for the deployment. This library has to be placed in

$AXIS_HOME/webservices where $AXIS_HOME = /usr/local/apache/Axis

Modify the server.wsdd . Modify the server.wsdd appropriate for your service. (You have a sample server.wsdd file given below appropriately filled for this service).

<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/"xmlns:C="http://xml.apache.org/axis/wsdd/providers/c">

<service name ="Calculator" provider ="c:rpc" description:"Calculator Web Service">
<parameter name="classname"  value = "/usr/local/apache/Axis/webservices/libCalculator.so>

<parameter name= "allowedMethods" value="add/substract">
</service>

</deployment>

You have to rename the relevant server.wsdd to match with the Apache version that you are using. 

Start the Apache server

$ /usr/local/apache/bin/apachectl start

Now open a browser and enter the link http://localhost/axis If the service is correctly deployed then it will be displayed in a table of deployed services which contain information such as service name, link to wsdl and a description of the service.

Client side Stubs Generated by the wsdl2ws Tool

WSDL2Ws tools will generate the stubs for the client side. You will have C++ Client class and header file.

cd $AXISCPP_HOME/samples/client/simple

$ java org.apache.axis.wsdl.wsdl2ws.WSDL2Ws Calculator.wsdl -lc++ -sclient

Note: again if you specify -o./GenClassesClient you will have source generated inside GenClassClient folder instead of current folder where the tool is run. Before compiling the client you have to write a class which contain a main method in which Calculator instance is created and its methods are called.

Then fill the samples with the relevant business logics .

Then fill the main method in a file as follows

#include<stdio.h>
int main()
 {
   Calculator c;
   int result = c.add(20, 40);
   printf("result is = "%d", result);
   return 0;
}

Then to run the calculator sample

$ cd AXISCPP_HOME/samples/simple

./Calculator <server> <port>  <command>  <param1>  <param2>

Example:

./Calculator locathost 80 add 10 20



Building Serverside of  provided Samples

Basically this will include all the Interoptest Samples.

cd $AXISCPP_HOME/samples/server

$ sh autogen.sh

$ sh runconfig

$ make

$ make install

OR

$ sh build.sh 



Building Client Side of the provided samples

cd $AXISCPP_HOME/samples/client

$ sh autogen.sh

$ sh runconfig

$ make

$ make install

OR

$ sh build.sh

Restart Apache

$ ./base 

Download Binary Distribution

Let's take a look at a sample Calculator service client that will call methods of a  Calculator service deployed on Axis C++. You can find the Calculator.wsdl for this example at

$AXISCPP_HOME/ samples/server/simple

You need the following jar files included in the CLASSPATH

- axis.jar

- commons-discovery.jar

- commons-logging.jar

- jaxrpc.jar

- saaj.jar

- wsdl4j.jar

- xml-apis.jar

THE CLASSPATH environmental variable should have the absolute paths of the jars (including the jar file name) given as a colon seperated list.

Here is a sample /home/axisuser/.bash_profile file where we specified those

AXIS_JARS_HOME="$AXISCPP_HOME/lib/axisjava"

AXIS_JARS="$AXIS_JARS_HOME/axis-
ant.jar:$AXIS_JARS_HOME/axis.jar:$AXIS_JARS_HOME/commons-
discovery.jar:$AXIS_JARS_HOME/commons-
logging.jar:$AXIS_JARS_HOME/jaxrpc.jar:$AXIS_JARS_HOME/log4j-
1.2.4.jar:$AXIS_JARS_HOME/saaj.jar:$AXIS_JARS_HOME/wsdl4j.jar"

JAVA_HOME="/usr/java"

PATH="$PATH:$JAVA_HOME/bin:."

CLASSPATH="$CLASSPATH:./:$JAVA_HOME/lib:$AXIS_JARS:$AXISCPP_HOME/lib/axis/wsdl2ws.jar"

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC AXIS_JARS_HOME

AXIS_JARS JAVA_HOME CLASSPATH

Server side Skeleton And Wrappers Generated by the wsdl2ws Tool .

We use the sample at

$AXISCPP_HOME/samples/server/simple .

We use this sample to demonstrate the generation of serverside skeletons and how to deploy a web service using it.

Inside this folder you will find Calculator.wsdl file using which we generate skeleton and Wrappers. Here is the command line arguments to generate the skeletons.

cd $AXISCPP_HOME/samples/server/simple

% java org.apache.axis.wsdl.wsdl2ws.WSDL2Ws Calculator.wsdl -lc++ -sserver

Note: If you give -o./GenClassServer then the server create a folder named GenClassServer and put the source there. Otherwise the source is put in the current folder where the tool is run.

Deploying the Services

The Folder called deploy in the $AXISCPP_HOME/ should be copied to apache root folder .Rename the deploy folder as "Axis" . Give all permissions to this folder.

$ cp –rf $AXISCPP_HOME/deploy /usr/local/apache

$ cd /usr/local/apache

$ mv deploy Axis

$ chmod -R 777 Axis

Now set the environment variable AXIS_HOME pointing to this directory.

AXIS_HOME="/usr/local/apache/Axis"

Note that inside $AXIS_HOME directory there is a file called axiscpp.conf. Make sure that it has read permissions. This file contains key, value pairs of paths used by the Axis Soap Engine. You can change the WSDDFILEPATH and AXISLOGPATH inside this file according to your choice.

By typing above in  the command line the dynamic library ( libbase.so for example) is created which is used for the deployment. This library has to be placed in

$AXIS_HOME/webservices where $AXIS_HOME = /usr/local/apache/Axis

Modify the server.wsdd . Modify the server.wsdd appropriate for your service. (You have a sample server.wsdd file given below appropriately filled for this service).

<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/"xmlns:C="http://xml.apache.org/axis/wsdd/providers/c">

<service name ="Calculator" provider ="c:rpc" description:"Calculator Web Service">
<parameter name="classname"  value = "/usr/local/apache/Axis/webservices/libCalculator.so>

<parameter name= "allowedMethods" value="add/substract">
</service>

</deployment>

You have to rename the relevant server.wsdd to match with the Apache version that you are using. 

Start the Apache server

$ /usr/local/apache/bin/apachectl start

Now open a browser and enter the link http://localhost/axis If the service is correctly deployed then it will be displayed in a table of deployed services which contain information such as service name, link to wsdl and a description of the service.

Client side Stubs Generated by the wsdl2ws Tool

WSDL2Ws tools will generate the stubs for the client side. You will have C++ Client class and header file.

cd $AXISCPP_HOME/samples/client/simple

$ java org.apache.axis.wsdl.wsdl2ws.WSDL2Ws Calculator.wsdl -lc++ -sclient

Note: again if you specify -o./GenClassesClient you will have source generated inside GenClassClient folder instead of current folder where the tool is run. Before compiling the client you have to write a class which contain a main method in which Calculator instance is created and its methods are called.

Then fill the samples with the relevant business logics .

Then fill the main method in a file as follows

#include<stdio.h>
int main()
 {
   Calculator c;
   int result = c.add(20, 40);
   printf("result is = "%d", result);
   return 0;
}

Then to run the calculator sample

$ cd AXISCPP_HOME/samples/simple/client

The general format for this as follows

./Calculator <server> <port>  <command>  <param1>  <param2>

Example:

./Calculator locathost 80 add 10 20


Building Serverside of  provided Samples

Basically this will include all the Interoptest Samples.

cd $AXISCPP_HOME/samples/server

$ sh autogen.sh

$ sh runconfig

$ make

$ make install

OR

$ sh build.sh 



Building Client Side of the provided samples

cd $AXISCPP_HOME/samples/client

$ sh autogen.sh

$ sh runconfig

$ make

$ make install

OR

$ sh build.sh 

Restart Apache

$ ./base 


Getting a CVS checkout

Visit http://ws.apache.org/ click on "axis" and then on "CVS Repository" to find details on accessing the CVS Repository. It will have instructions similar to the following."Anyone can checkout source code from our anonymous CVS server. To do so, simply use the following commands (if you are using a GUI CVS client, configure it appropriately):

cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic login

password: anoncvs

cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic checkout ws-axis"

The examples given below will be based on these lines of instructions.

To use the command line cvs client go to http://www.cvshome.org and download the cvs binaries for windows. Extract the cvs binaries from the downloaded zip file. There will be a "cvs.exe" file when this is extracted. Set the PATH environment variable to where "cvs.exe" is. You would have to do the following to get a checkout from the command line cvs client.

cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic login

Now you will be prompted for the password. Enter the password.

password: anoncvs

Now enter the following cvs command to checkout the axis Repository.

cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic checkout ws-axis

The checkout of the repository will be created in the current directory in a folder named “ws-axis”