blob: 68f4ab26aa17c1e5c59be0e7f5adddba1ca2356a [file] [log] [blame]
<?xml version="1.0" encoding=""?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="" />
<title>Apache Axis2 User's Guide- Introducing Axis2</title>
<link href="../css/axis-docs.css" rel="stylesheet" type="text/css"
media="all" />
</head>
<body xml:lang="en" lang="en">
<h1>Apache Axis2 User's Guide</h1>
<p>This guide provides a starting place for users who are new to Apache
Axis2. It also covers some advanced topics, such as how to use Axis2 to
create and deploy Web services as well as how to use WSDL to generate both
clients and services.</p>
For experienced users of Apache Axis2, we recommend the <a
href="adv-userguide.html">Advanced User's Guide.</a> <a name="intro"></a>
<h1>Introducing Axis2</h1>
<p>This section introduces Axis2 and its structure, including an explanation
of various directories/files included in the latest Axis2 <a
href="http://ws.apache.org/axis2/download.cgi">download</a>.</p>
<h2>Content</h2>
<ul>
<li><a href="userguide.html#intro"><strong>Introducing
Axis2</strong></a><br />
<ul>
<li><a href="userguide.html#whatis"><strong>What is
Axis2?</strong></a></li>
<li><a href="userguide.html#underhood"><strong>What's under the
hood?</strong></a></li>
<li><a href="userguide.html#handlessoap"><strong>How Axis2 handles SOAP
messages</strong></a></li>
<li><a href="userguide.html#distributions"><strong>Axis2
Distributions</strong></a></li>
<li><a href="userguide.html#sbd"><strong>The Axis2 Standard Binary
Distribution</strong></a></li>
<li><a href="userguide.html#hierarchy"><strong>Axis2.war Directory
Hierarchy</strong></a></li>
<li><a href="userguide.html#docs"><strong>Axis2 Documents
Distribution</strong></a></li>
<li><a href="userguide.html#clients"><strong>Axis2 and
Clients</strong></a></li>
</ul>
</li>
<li><a href="userguide-installingtesting.html#installingtesting">Installing
and Testing Client Code</a></li>
<li><a href="userguide-introtoservices.html#introservices">Introduction to
Services</a><br />
<ul>
<li><a href="userguide-introtoservices.html#messageexchange">Message
Exchange Patterns</a></li>
</ul>
</li>
<li><a href="userguide-creatingclients.html#createclients">Creating
Clients</a><br />
<ul>
<li><a href="userguide-creatingclients.html#choosingclient">Choosing a
Client Generation Method</a></li>
<li><a href="userguide-creatingclients.html#generating">Generating
Clients</a></li>
<li><a href="userguide-creatingclients.html#adb">Axis Data Binding
(ADB)</a></li>
</ul>
</li>
<li><a href="userguide-buildingservices.html#buildservices">Building
Services</a><br />
<ul>
<li><a href="userguide-buildingservices.html#getcomfortable">Getting
Comfortable with Available Options</a></li>
<li><a href="userguide-buildingservices.html#createscratch">Creating a
Service from Scratch</a></li>
<li><a href="userguide-buildingservices.html#deploypojo">Deploying
Plain Old Java Objects</a></li>
<li><a href="userguide-buildingservices.html#deployrun">Deploying and
Running an Axis2 Service Created from WSDL</a></li>
</ul>
</li>
<li><a href="userguide-samples.html">Samples</a></li>
<li><a href="userguide-forfurtherstudy.html">For Further Study</a></li>
</ul>
<a name="whatis"></a>
<h2>What is Axis2?</h2>
<p>The Apache Axis2 project is a Java-based implementation of both the client
and server sides of the Web services equation. Designed to take advantage of
the lessons learned from Apache Axis 1.0, Apache Axis2 provides a complete
object model and a modular architecture that makes it easy to add
functionality and support for new Web services-related specifications and
recommendations.</p>
<p>Axis2 enables you to easily perform the following tasks:</p>
<ul>
<li>Send SOAP messages</li>
<li>Receive and process SOAP messages</li>
<li>Create a Web service out of a plain Java class</li>
<li>Create implementation classes for both the server and client using
WSDL</li>
<li>Easily retrieve the WSDL for a service</li>
<li>Send and receive SOAP messages with attachments</li>
<li>Create or utilize a REST-based Web service</li>
<li>Create or utilize services that take advantage of the <a
href="http://www.oasis-open.org/committees/download.php/16790/wss-v1.1-spec-os-SOAPMessageSecurity.pdf">WS-Security</a>,
<a
href="http://xml.coverpages.org/ws-reliablemessaging20030313.pdf">WS-ReliableMessaging</a>,
<a href="http://www.w3.org/2002/ws/addr/">WS-Addressing</a>, <a
href="http://dev2dev.bea.com/pub/a/2004/03/ws-coordination.html">WS-Coordination</a>,
and <a
href="ftp://www6.software.ibm.com/software/developer/library/WS-AtomicTransaction.pdf">WS-Atomic
Transaction</a> recommendations</li>
<li>Use Axis2's modular structure to easily add support for new
recommendations as they emerge</li>
</ul>
<p>Many more features exist as well, but this user guide concentrates on
showing you how to accomplish the first five tasks on this list.</p>
<a name="underhood"></a>
<h2>What's Under the Hood?</h2>
<p>To understand Axis2 and what it does, you must have a good idea of the
life cycle of a Web services message. Typically, it looks something like
this:</p>
<p><img alt="Lifecycle of a Web services message" src="images/fig01.jpg"
/><br clear="all" />
</p>
<p>The sending application creates the original SOAP message, an XML message
that consists of headers and a body. (For more information on SOAP, see "<a
href="userguide-introtoservices.html/">Introduction to Services</a>".) If the
system requires the use of WS* recommendations such as WS-Addressing or
WS-Security, the message may undergo additional processing before it leaves
the sender. Once the message is ready, it is sent via a particular transport
such as HTTP, JMS, and so on.</p>
<p>The message works its way over to the receiver, which takes in the message
via the transport listener. (In other words, if the application doesn't have
an HTTP listener running, it's not going to receive any HTTP messages.)
Again, if the message is part of a system that requires the use of
WS-Security or other recommendations, it may need additional processing for
the purpose of checking credentials or decrypting sensitive information.
Finally, a dispatcher determines the specific application (or other
component, such as a Java method) for which the message was intended, and
sends it to that component. That component is part of an overall application
designed to work with the data being sent back and forth.</p>
<a name="handlessoap"></a>
<h2>How Axis2 Handles SOAP Messages</h2>
<p>Axis2 can handle processing for both the sender and the receiver in a
transaction. From the Axis2 perspective, the structure looks like this:</p>
<p><img alt="Axis2 handles SOAP messages" src="images/fig02.jpg" /><br
clear="all" />
</p>
<p>On each end, you have an application designed to deal with the (sent or
received) messages. In the middle, you have Axis2, or rather, you
<em>can</em> have Axis2. The value of Web services is that the sender and
receiver (each of which can be either the server or the client) don't even
have to be on the same platform, much less running the same application.
Assuming that Axis2 is running on both sides, the process looks like this:</p>
<ul>
<li>The sender creates the SOAP message.</li>
<li>Axis "handlers" perform any necessary actions on that message such as
encryption of WS-Security related messages.</li>
<li>The transport sender sends the message.</li>
<li>On the receiving end, the transport listener detects the message.</li>
<li>The transport listener passes the message on to any handlers on the
receiving side.</li>
<li>Once the message has been processed in the "pre-dispatch" phase, it is
handed off to the dispatchers, which pass it on to the appropriate
application.</li>
</ul>
<p>In Axis2, these actions are broken down into "phases", with several
pre-defined phases, such as the "pre-dispatch", "dispatch," and "message
processing", being built into Axis2. Each phase is a collection of
"handlers". Axis2 enables you to control what handlers go into which phases,
and the order in which the handlers are executed within the phases. You can
also add your own phases and handlers.</p>
<p>Handlers come from "modules" that can be plugged into a running Axis2
system. These modules, such as Rampart, which provides an implementation of
WS-Security, and Sandesha, which provides an implementation of
WS-ReliableMessaging, are the main extensibility mechanisms in Axis2.</p>
<a name="distributions"></a>
<h2>Axis2 Distributions</h2>
<p>Axis2 is released in several <a
href="http://ws.apache.org/axis2/download/@axis2_version_dir@/download.cgi">distributions</a>.
Which one you need depends on what you'll be doing with it.</p>
<a name="sbd"></a>
<h3>The Axis2 Standard Binary Distribution</h3>
<p>If you're developing services and applications, you'll need the Axis2 <a
href="http://ws.apache.org/axis2/download/@axis2_version_dir@/download.cgi#std-bin">Standard
Binary Distribution</a>. The distribution includes all the necessary *.jar
files, as well as a variety of scripts that ease development. It has the
following structure.</p>
<p><b>Code Listing 1: Axis2 Standard Binary Distribution</b></p>
<pre>bin
axis2.bat
axis2.sh
axis2server.bat
axis2server.sh
java2wsdl.bat
java2wsdl.sh
wsdl2java.bat
wsdl2java.sh
setenv.sh
lib
activation-1.1.jar
...
XmlSchema.jar
repository
modules
modules.list
addressing-1.1.mar
..
services
services.list
version.aar
..
samples
...
webapp
...
conf
axis2.xml
LICENSE.txt
README.txt
NOTICE.txt
INSTALL.txt
release-notes.html</pre>
<p>The bin directory includes a number of useful scripts. They include
axis2.bat (or axis2.sh), which enables you to easily execute a Java command
without having to manually add all the Axis2 jar files to the classpath,
java2wsdl.bat (and .sh) and wsdl2java.bat (and .sh), which enable you to
easily generate Java code from a WSDL file and vice versa, and
axis2server.bat (and sh), a simple Web server that enables you to build
Axis2's capability to send and receive messages into your own application.</p>
<p>As expected, the lib directory includes all the necessary .jar files.
Services and modules are added to the repository directory. Axis2 comes with
a standard module implementing WS-Addressing, and you can add any other
necessary module such as Rampart to the repository/modules directory.</p>
<p>conf directory includes the axis2.xml which is the global deployment
descriptor.</p>
<p>Finally, the samples directory includes all the sample code distributed
with Axis2. See the list of <a href="userguide-samples.html">samples and
their descriptions</a>.</p>
<a name="hierarchy"></a>
<h2>axis2.war Distribution Directory Hierarchy</h2>
<p>axis2.war is available in <a
href="http://ws.apache.org/axis2/download/@axis2_version_dir@/download.cgi#war">WAR (Web
Archive) Distribution</a>. The server side of Axis2 ships as a J2EE
application, and has the following structure shown in Code Listing 2.</p>
<p><b>Code Listing 2: Server Side of Axis2</b></p>
<pre>axis2-web
META-INF
WEB-INF
classes
conf
axis2.xml
lib
activation.jar
...
xmlSchema.jar
modules
modules.list
addressing.mar
...
soapmonitor.mar
services
services.list
aservice.aar
...
version.aar
web.xml</pre>
<p>Starting at the top, axis2-web is a collection of JSPs that make up the <a
href="webadminguide.html">Axis2 administration application</a>, through which
you can perform any needed actions such as adding services and engaging and
dis-engaging modules. The WEB-INF directory represents the actual Axis2
application, including all the *.jar files, any included modules, and even
the deployed services themselves.</p>
<p>The classes directory holds any class or property files that are needed by
Axis2 itself, such as log4j.properties. Any actual services to be handled by
the system reside in the services directory in the form of an axis archive,
or *.aar file. This file contains any classes related to the service, as well
as the services.xml file, which controls any additional requirements, such as
the definition of message senders and message receivers.</p>
<p>The main file in all this is axis2.xml, which controls how the application
deals with received messages. It defines message receivers and transport
receivers, as well as defining transport senders and determining which
modules are active. It also defines the order of phases, and the handlers to
be executed within each phase.</p>
<p>You can control all of this information through the use of the Web
application, but if you restart the Axis2 application, these changes are lost
and the server goes back to the definitions in the axis2.xml file.</p>
<p>Axis2 also provides a third distribution, the <a
href="http://ws.apache.org/axis2/download/@axis2_version_dir@/download.cgi#src">source
distribution</a>, which enables you to generate this .war file yourself.</p>
<a id="docs"></a>
<h2>Axis2 Documentation Distribution Directory Hierarchy</h2>
<p>The Documents distribution includes all Axis2 documentation including the
xdcos and javadocs. It has the following structure:</p>
<p><b>Code Listing 3: Axis2 Documents Distribution</b></p>
<pre>docs
javadocs
xdocs
LICENSE.txt
README.txt
release-notes.html</pre>
<p>The javadocs directory includes all the standard <a
href="../../javadocs/index.html">API documentation</a> for the Axis2 API,
with other documentation (like this document) in the xdocs directory.</p>
<a name="clients"></a>
<h2>Axis2 and Clients</h2>
<p>Now that explains how Axis2 behaves as part of a Web application. What
about a standalone client that is not part of a J2EE application? In that
case, a sender can use the Axis2 default properties, in other words, no
special handlers, and so on. But you also have the option to tell the client
to load its own copy of the axis2.xml file and behave accordingly.</p>
<p><strong>See Next Section</strong> - <a
href="userguide-installingtesting.html#installingtesting">Installing and
Testing Client Code</a></p>
</body>
</html>