<html>
<head>
  <meta http-equiv="content-type" content="">
  <title>Welcome to Apache Axis2 version 1.1</title>
</head>

<body lang="en">
<h1>Welcome to Apache Axis2 version 1.1</h1>

<h3>@TODAY@</h3>

<pre>Just over 6 months since the original 1.0 release, we are very proud to
announce the release of Apache Axis2 version 1.1.

Downloads are available at:
    http://ws.apache.org/axis2/download.cgi

Apache Axis2 is a complete re-design and re-write of the widely used
Apache Axis engine and is a more efficient, more scalable, more modular
and more XML-oriented Web services framework. It is carefully designed to
support the easy addition of plug-in "modules" that extend its
functionality for features such as security and reliability.

Modules supporting WS-Security/Secure-Conversation (Apache Rampart),
WS-Trust (Apache Rahas), WS-Reliable Messaging (Apache Sandesha) and
WS-Eventing (Apache Savan) will be available soon after the Apache Axis2
1.1 release. Please see these projects' own sites for further information.

Major Changes Since 1.0:
- Significantly improved documentation
- Significantly improved support for POJO services and clients
- Significantly improved support for Spring services
- Significantly improved Axis Data Binding (ADB) to increase schema
  coverage and overall stability
- Improved service lifecycle model
- Improved JMS support
- Improved handler and module interfaces
- Improved Eclipse and Idea plugins
- New Attachments API for sending & receiving MTOM and SwA attachments
- Built in support for WS-Policy via Apache Neethi
- Added support for unwrapping Web service requests
- Fixed tons of small and not-so-small bugs
- Major refactoring of release structure to make usage easy

Known Issues and Limitations in 1.1 Release:
- Unwrapping of response messages (coming in 1.2)
- JSR 181/183 Annotation support (coming in 1.2)
- JaxMe and JAXBRI data binding support is experimental
- Simple Axis Server does not support POX/REST

Apache Axis2 1.1 is a major new release compared to Axis2 1.0. We are
striving for a simple and happy first time user experience as well as a
satisfying experienced user experience with this release. We welcome any
and all feedback at:
    axis-user@ws.apache.org (please include "[axis2]" in the subject)
    axis-dev@ws.apache.org (please include "[axis2]" in the subject)
    http://issues.apache.org/jira/browse/AXIS2

Thank you for your interest in Apache Axis2!

The Axis2 Development Team
http://ws.apache.org/axis2/

------------------------------------------------------------------------------------

Features of Apache Axis2:

Programming Model
   - Simple XML-centric client API with full WSDL and policy support
   - Support for POJO and Spring services and clients
   - Support for any message exchange pattern (MEP)
   - Synchronous and asynchronous programming model
   - Archived service deployment model supporting full service
     encapsulation with versioning support
   - Archived module deployment model supporting controlled
     extensibility with versioning support
   - Hot deployment
   - WS-Policy driven code generation extensions
   - Flexible service life cycle model
   - Automatic support for POX (REST) style invocation of services
   - Support for querying service's WSDL (with ?wsdl), schema (with
     ?xsd) and policies (with ?policy)

Supported Specifications
   - SOAP 1.1 and 1.2
   - Message Transmission Optimization Mechanism (MTOM)
   - XML Optimized Packaging (XOP)
   - SOAP with Attachments
   - WSDL 1.1, including both SOAP and HTTP bindings
   - WS-Addressing submission and 1.0
   - WS-Policy
   - SAAJ 1.1

Transports
   - HTTP
   - SMTP
   - JMS
   - TCP

Supported Data Bindings
   - Axis Data Binding (ADB)
   - XMLBeans
   - JibX
   - JaxMe (Experimental)
   - JaxBRI (Experimental)

Tools
   - WSDL2Java: Generate Java stubs and skeletons from a WSDL document.
   - Java2WSDL: Generate a WSDL document from a Java class.
   - Eclipse Plugins
   - IntelliJ Idea Plugins
   - Maven2 Plugins
   - Web application for administering Apache Axis2
    </pre>
</body>
</html>
