<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one
  ~ or more contributor license agreements. See the NOTICE file
  ~ distributed with this work for additional information
  ~ regarding copyright ownership. The ASF licenses this file
  ~ to you under the Apache License, Version 2.0 (the
  ~ "License"); you may not use this file except in compliance
  ~ with the License. You may obtain a copy of the License at
  ~
  ~ http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing,
  ~ software distributed under the License is distributed on an
  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  ~ KIND, either express or implied. See the License for the
  ~ specific language governing permissions and limitations
  ~ under the License.
  -->
<document xmlns="http://maven.apache.org/XDOC/2.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
    <properties>
        <title>Apache Axis2/Java - Next Generation Web Services</title>
    </properties>
    <body>
<h1>Welcome to Apache Axis2/Java</h1>
<p>Apache Axis2&#x2122; is a Web Services / SOAP / WSDL engine, the successor to the
widely used <a href=
"http://ws.apache.org/axis/">Apache Axis</a> SOAP stack.
There are two implementations
of the Apache Axis2 Web services engine - Apache Axis2/Java and
Apache Axis2/C</p>
<p>While you will find all the information on Apache Axis2/Java
here, you can visit the <a href=
"http://axis.apache.org/axis2/c/"><strong>Apache Axis2/C</strong></a>
Web site for Axis2/C implementation information.</p>
<p>Apache Axis2, Axis2, Apache, the Apache feather logo, and the Apache Axis2 project logo are trademarks of The Apache Software Foundation.</p>
<h3><em>Why Apache Axis2:</em></h3>
<p>A new architecture for Axis2 was introduced during the August
2004 Summit in Colombo, Sri Lanka. The new architecture on which
Axis2 is based on is more flexible, efficient and configurable in
comparison to <a href=
"http://ws.apache.org/axis/java/architecture-guide.html">Axis1.x
architecture</a>. Some well established concepts from Axis 1.x,
like handlers etc., have been preserved in the new
architecture.</p>
<p>Apache Axis2 not only supports SOAP 1.1 and SOAP 1.2, but it
also has integrated support for the widely popular <a href=
"http://www.xfront.com/REST-Web-Services.html">REST style of Web
services</a>. The same business logic implementation can offer both
a WS-* style interface as well as a REST/POX style interface
simultaneously.</p>
<p>Apache Axis2 is more efficient, more modular and more
XML-oriented than the older version. It is carefully designed to
support the easy addition of plug-in "modules" that extend their
functionality for features such as security and reliability. The
<a href="modules/index.html">Modules</a>
currently available or under development include:</p>
<ul>
<li><a href=
"http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=wsrm"
>WS-ReliableMessaging</a> - Supported by <a href=
"http://axis.apache.org/axis2/java/sandesha/">Apache
Sandesha2</a></li>
<li><a href=
"http://www-128.ibm.com/developerworks/library/specification/ws-tx/#coor"
>WS-Coordination</a> and <a href=
"http://www-128.ibm.com/developerworks/library/specification/ws-tx/#atom"
>WS-AtomicTransaction</a> - Supported by <a href=
"http://axis.apache.org/axis2/java/kandula/">Apache Kandula2</a></li>
<li><a href=
"http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=wss"
>WS-Security</a> - Supported by <a href=
"http://axis.apache.org/axis2/java/rampart/">
Apache Rampart</a></li>
<li><a href="http://www.w3.org/Submission/ws-addressing/"
>WS-Addressing</a> -Module included as part of Axis2
core</li>
</ul>
<p>Apache Axis2 is built on <a href=
"http://ws.apache.org/axiom/">Apache AXIOM</a>, a
new high performant, pull-based XML object model.</p>
<p>Axis2 comes with many new features, enhancements and industry
specification implementations. The key features offered are as
follows:</p>
<ul>
<li>
<p style="margin-bottom: 0in"><strong>Speed</strong> - Axis2 uses
its own object model and StAX (Streaming API for XML) parsing to
achieve significantly greater speed than earlier versions of Apache
Axis.</p>
</li>
<li>
<p style="margin-bottom: 0in"><strong>Low memory foot
print</strong>- Axis2 was designed ground-up keeping low memory
foot print in mind.</p>
</li>
<li>
<p style="margin-bottom: 0in"><strong>AXIOM</strong> - Axis2 comes
with its own light-weight object model, AXIOM, for message
processing which is extensible, highly performant and is developer
convenient.</p>
</li>
<li>
<p style="margin-bottom: 0in"><strong><a name="Hot_Deployment" id=
"Hot_Deployment"></a>Hot Deployment</strong> - Axis2 is equipped
with the capability of deploying Web services and handlers while
the system is up and running. In other words, new services can be
added to the system without having to shut down the server. Simply
drop the required Web service archive into the services directory
in the repository, and the deployment model will automatically
deploy the service and make it available for use.</p>
</li>
<li>
<p style="margin-bottom: 0in"><strong>Asynchronous Web
services</strong> - Axis2 now supports asynchronous Web services
and asynchronous Web services invocation using non-blocking clients
and transports.</p>
</li>
<li>
<p style="margin-bottom: 0in"><strong>MEP Support</strong> - Axis2
now comes handy with the flexibility to support Message Exchange
Patterns (MEPs) with in-built support for basic MEPs defined in
WSDL 2.0.</p>
</li>
<li>
<p style="margin-bottom: 0in"><strong>Flexibility</strong> - The
Axis2 architecture gives the developer complete freedom to insert
extensions into the engine for custom header processing, system
management, and <em>anything else you can imagine</em>.</p>
</li>
<li>
<p style="margin-bottom: 0in"><strong>Stability</strong> - Axis2
defines a set of published interfaces which change relatively
slowly compared to the rest of Axis.</p>
</li>
<li>
<p style="margin-bottom: 0in"><strong>Component-oriented
Deployment</strong> - You can easily define reusable networks of
Handlers to implement common patterns of processing for your
applications, or to distribute to partners.</p>
</li>
<li>
<p style="margin-bottom: 0in"><strong>Transport Framework</strong>
- We have a clean and simple abstraction for integrating and using
Transports (i.e., senders and listeners for SOAP over various
protocols such as SMTP, FTP, message-oriented middleware, etc), and
the core of the engine is completely transport-independent.</p>
</li>
<li>
<p style="margin-bottom: 0in"><strong>WSDL support</strong> - Axis2
supports the Web Service Description Language, version <a href=
"http://www.w3.org/TR/wsdl">1.1</a> and <a href=
"http://www.w3.org/TR/wsdl20/">2.0</a>, which allows you to easily
build stubs to access remote services, and also to automatically
export machine-readable descriptions of your deployed services from
Axis2.</p>
</li>
<li>
<p style="margin-bottom: 0in"><strong>Add-ons</strong> - Several
Web services specifications have been incorporated including
<a href="http://ws.apache.org/wss4j/">WSS4J</a> for
security (Apache Rampart), <a href="http://axis.apache.org/axis2/java/sandesha/"
>Sandesha</a> for reliable messaging, <a href=
"http://axis.apache.org/axis2/java/kandula/">Kandula</a> which
is an encapsulation of WS-Coordination, WS-AtomicTransaction and
WS-BusinessActivity.</p>
</li>
<li>
<p style="margin-bottom: 0in"><strong>Composition and
Extensibility</strong> - Modules and phases improve support for
composability and extensibility. Modules support composability and
can also support new WS-* specifications in a simple and clean
manner. They are however not <a href="#Hot_Deployment">hot
deployable</a> as they change the overall behavior of the
system.</p>
</li>
</ul>
<p>We hope you enjoy using Axis2. Please note that this is an
open-source effort. If you feel the code could use new features or
fixes, or the documentation can be improved, please get involved
and lend us a hand! The Axis developer community welcomes your
participation.</p>
<p>Let us know what you think! Send your feedback on Axis2 to
"<a href=
"mailto:java-user@axis.apache.org">java-user@axis.apache.org</a>". Make
sure to prefix the subject of the mail with [Axis2].</p>
<h2>Features of Axis2 Latest Version</h2>
<p>Apache Axis2 Version 1.4 comes with performance improvements and
a number bug fixes over the 1.3 release. Check out the complete list of
features below.</p>
<h3>Programming Model</h3>
<ul>
<li>Improved, XML-centric client API including full WSDL and policy
support</li>
<li><a href="docs/jaxws-guide.html">Support for JAXWS-style services and clients</a></li>
<li>Support for POJO and Spring services and clients</li>
<li>Support for any message exchange pattern</li>
<li>Synchronous and asynchronous calls</li>
<li>Archived service deployment model supporting full service
encapsulation with versioning support</li>
<li>Archived module deployment model supporting controlled
extensibility with versioning support</li>
<li><a href="#Hot_Deployment">Hot deployment</a></li>
<li>WS-Policy driven code generation extensions</li>
<li>Flexible service life cycle model</li>
<li>Automatic support for POX (REST) style invocation of
services</li>
<li>Support for querying a service's WSDL (using ?wsdl), schema
(using ?xsd) and policies (using ?policy)</li>
<li>WSDL 2.0</li>
<li>Custom Deployers</li>
<li>Binary serialization (Fast Infoset)</li>
<li>JSON support</li>
<li>EJB Provider support</li>
</ul>
<h3>Supported Specifications</h3>
<ul>
<li>SOAP 1.1 and 1.2</li>
<li>Message Transmission Optimization Mechanism (MTOM), XML
Optimized Packaging (XOP) and SOAP with Attachments</li>
<li>WSDL 1.1, including both SOAP and HTTP bindings</li>
<li>WS-Addressing (submission and final)</li>
<li>WS-Policy</li>
<li>SAAJ 1.1</li>
</ul>
<h3>Transports</h3>
<ul>
<li>HTTP</li>
<li>SMTP</li>
<li>JMS</li>
<li>TCP</li>
</ul>
<h3>Supported Data Bindings</h3>
<ul>
<li>Axis Data Binding (ADB)</li>
<li>XMLBeans</li>
<li>JibX</li>
<li>JaxBRI (Experimental)</li>
</ul>
<h2><a name="Tools_included_in this_Release">Tools Included in This
Release</a></h2>
<p>[<a href="tools/index.html"
>Download Tool Plug-ins</a>]</p>
<ol type="1">
<li>Axis2 Web Application (Web App)</li>
<li>WSDL2WS- <a href="tools/eclipse/wsdl2java-plugin.html"
>eclipse plug-in</a><a>/</a> <a href=
"tools/CodegenToolReference.html">Command line
version</a><a>/</a><a href=
"tools/idea/Idea_plug-in_userguide.html#WSDL2Java_Code_Generation"
>IntelliJ IDEA plug-in</a><a>/</a><a href=
"tools/maven-plugins/maven-wsdl2code-plugin.html"
>Maven2 WSDL2Code Plug-in</a></li>
<li>Service Archive Wizard- <a href=
"tools/eclipse/servicearchiver-plugin.html"
>eclipse plug-in</a>/ <a href=
"tools/idea/Idea_plug-in_userguide.html#Create_Service_Archive"
>IntelliJ IDEA plug-in</a>/ <a href=
"tools/maven-plugins/maven-aar-plugin.html"
>Maven2 AAR Plug-in</a></li>
<li>Java2WSDL- <a href=
"tools/maven-plugins/maven-java2wsdl-plugin.html"
>Maven2 Java2WSDL Plug-in</a></li>
</ol>
<h2>Extension Modules</h2>
<ul>
<li>Apache Rampart: Supporting WS-Security (and soon
WS-Policy)</li>
<li>Apache Sandesha2: Supporting WS-Reliable Messaging</li>
</ul>
(Apache Axis2 comes built in with a module that supports
WS-Addressing.)
<h2>Known Issues and Limitations</h2>
<h2>Archived News</h2>
<p>For information on previous Axis2 releases running up to the
current release see the <a href="archived_news.html"
>'Axis2 Archived News'</a> page.</p>
For other news items from Apache Software Foundation see:
<ul>
<li><a href=
"http://www.apachenews.org/archives/cat_apache_webservices_index.html">
Web services related news on the Apache News Blog Online</a></li>
<li><a href="http://www.apachenews.org/">The Apache News Blog
Online</a></li>
</ul>
</body>
</document>
