<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>About</title>
</head>
<body lang="EN-US">
<h2>About This Content</h2>

<p>March 23, 2009</p>
<h3>License</h3>

<p>The Eclipse Foundation makes available all content in this
plug-in (&quot;Content&quot;). Unless otherwise indicated below, the
Content is provided to you under the terms and conditions of the Eclipse
Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is
available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>

<p>If you did not receive this Content directly from the Eclipse
Foundation, the Content is being redistributed by another party
(&quot;Redistributor&quot;) and different terms and conditions may apply
to your use of any object code in the Content. Check the Redistributor's
license that was provided with the Content. If no such license exists,
contact the Redistributor. Unless otherwise indicated below, the terms
and conditions of the EPL still apply to any source code in the Content
and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>

<h3>Third Party Content</h3>

<p>The Content includes items that have been sourced from third
parties as set out below. If you did not receive this Content directly
from the Eclipse Foundation, the following is provided for informational
purposes only, and you should look to the Redistributor&rsquo;s license
for terms and conditions of use.</p>

<h4>Apache Axis2 1.4.1</h4>

<p>The plug-in includes software developed by The Apache Software
Foundation as part of the Apache Web Services project.</p>

<p>Your use of the Axis2 code subject to the terms and conditions of
the Apache License, Version 2.0. A copy of the license is contained in
the file <a href="about_files/asl-v20.txt">asl-v20.txt</a> and is also
available at <a href="http://www.apache.org/licenses/LICENSE-2.0.html">http://www.apache.org/licenses/LICENSE-2.0.html</a>.

<p>The Apache attribution file <a
	href="about_files/axis2-NOTICE.txt">axis2-NOTICE.txt</a> is included
with the Content in accordance with 4d of the Apache License, Version
2.0.</p>

<p>Source code and further information about Apache Axis2 is
available at <a href="http://ws.apache.org/axis2/">http://ws.apache.org/axis2/</a>.</p>

<p>Axis2 includes the following software which is also covered by
Apache License, Version 2.0:</p>

<ul>
	<li>XMLBeans 2.3.0 developed by The Apache Software Foundation as
	part of the Apache XMLBeans Project. The Apache attribution file <a
		href="about_files/xmlbeans-NOTICE.txt">xmlbeans-NOTICE.txt</a> is
	included with the Content in accordance with 4d of the Apache License,
	Version 2.0.Source code and further information is available at <a
		href="http://xmlbeans.apache.org">http://xmlbeans.apache.org</a>.</li>
</ul>

</body>
</html>