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

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

<h3>@TODAY@</h3>
<pre>Just over 4 months since the original 1.1.1 release, we are very proud to
announce the release of Apache Axis2 version 1.2

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 after the Apache Axis2
1.2 release. Please see these projects' own sites for further information.

Major Changes Since 1.1:
- WSDL 2.0 fully support (reading, writing, and codegen)
- POJO annotation (JSR 181)
- JAX-WS integration
- JAX-WS -annotation
- Un-wrapping (Response) 
- ADB - support for union and list
- Maven2 support
- JSON support 
- Binary serialization (Fast infoste)
- Codegen support for WSDL with Multiple services
- HTTP code generation (both WSDL 1.1 and 2.0)
- Custom deployer support
- Message formatters
- Message Builders
- EJB Provider support



Known Issues and Limitations in 1.2 Release:

- Xml-beans databinding does not support response uwwrapping
- ADB databinding does not support minOccurs and maxOccures attributes in sequence and choice elements
 (i.e.,&lt;sequence minOccurs="0" maxOccurs="unbounded"&gt;&lt;/sequence&gt;)
- Unable to produce original WSDL in the case of WSDL 2.0, therefore the AxisService is serialized to produce ?wsdl2. 


Apache Axis2 1.2 is a major new release compared to Axis2 1.1. 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
   - Improved 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)
   - WSDL 2.0POJO annotation (JSR 181)
   - JAX-WS intregration
   - Custom Deployers
   - Binary serialization (Fast Infoset)
   - JSON support
   - EJB Provider support

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>
