<!--
  ~ 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.
  -->

<html>
<head>
  <meta http-equiv="content-type" content="">
  <title>Apache Axis2 1.5.6 Release Notes</title>
</head>

<body lang="en">
<h1>Apache Axis2 1.5.6 Release Notes</h1>

<h2>About this version</h2>

<p>1.5.6 is a maintenance release that contains fixes for the following issues:</p>
<ul>
<li><a href="https://issues.apache.org/jira/browse/AXIS2-4263">AXIS2-4263</a>: Stopping ListenerManager does not cleanup several Timer threads</li> 
<li><a href="https://issues.apache.org/jira/browse/AXIS2-5067">AXIS2-5067</a>: content-type header is not generated with SAAJ API</li> 
<li><a href="https://issues.apache.org/jira/browse/AXIS2-5071">AXIS2-5071</a>: Failure to populate all members of an xs:sequence in a SOAP header</li> 
<li><a href="https://issues.apache.org/jira/browse/AXIS2-5074">AXIS2-5074</a>: Engaging Module for a Service Group not possible</li> 
<li><a href="https://issues.apache.org/jira/browse/AXIS2-5076">AXIS2-5076</a>: Number of pages broken in Axis2-admin web app. </li> 
<li><a href="https://issues.apache.org/jira/browse/AXIS2-5078">AXIS2-5078</a>: Axis takes 100% CPU, infinite loop in the QueryStringParser</li> 
<li><a href="https://issues.apache.org/jira/browse/AXIS2-5079">AXIS2-5079</a>: 1.5.5 does not allow exploded services to be dropped in services directory</li> 
<li><a href="https://issues.apache.org/jira/browse/AXIS2-5086">AXIS2-5086</a>: destroy(ServiceContext context) method never called in request scope. </li> 
<li><a href="https://issues.apache.org/jira/browse/AXIS2-5093">AXIS2-5093</a>: Connection cannot be cleaned up after 404 response</li> 
</ul>
<p>This release also upgrades Axiom from 1.2.11 to 1.2.12.</p>
<p>If possible users should upgrade to Axis2 1.6.1. The Axis2 1.5.6 maintenance release is intended for use in situations where
upgrading to 1.6.x is not possible immediately.</p>

<h2>About Axis2</h2>

<p>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.</p>

<p>Modules supporting WS-Security/Secure-Conversation (Apache Rampart),
WS-Trust (Apache Rahas), WS-Reliable Messaging (Apache Sandesha) and
WS-Eventing (Apache Savan) are available via the Apache Web Services
project. Please see the individual subproject sites for further information.</p>

<h2>Feedback</h2>

<p>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:</p>
<ul>
  <li><a href="mailto:java-user@axis.apache.org">java-user@axis.apache.org</a> (please include "[axis2]" in the subject)</li>
  <li><a href="mailto:java-dev@axis.apache.org">java-dev@axis.apache.org</a> (please include "[axis2]" in the subject)</li>
  <li><a href="http://issues.apache.org/jira/browse/AXIS2">http://issues.apache.org/jira/browse/AXIS2</a></li>
</ul>

<p>Thank you for your interest in Apache Axis2!</p>

<p><i>The Axis2 Development Team<br>
<a href="http://axis.apache.org/axis2/java/core/">http://axis.apache.org/axis2/java/core/</a></i></p>
</body>
</html>
