<?xml version="1.0" encoding="ISO-8859-1" ?>
<!--
  ~  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>

  <properties>
    <title>Apache Synapse</title>
  </properties>

<body>
  
<section name="Apache Synapse">
	<p>
  The Synapse project is a robust, lightweight
  implementation of a highly scalable and distributed service mediation
  framework based on Web services and XML specifications.
	</p>

 	<p>For more information, see:</p>
  <ul>
  <li><a href="Synapse_Configuration_Language.html">The Synapse Configuration Language</a></li>
  <li><a href="Synapse_Samples.html">A Quick start with Synapse Samples</a></li>
  <li><a href="Synapse_Extending.html">Extending Synapse</a></li>
  <li><a href="Synapse_Userguide.html">The Synapse User Guide</a><a href="">(In Progress)</a></li>
  
  <li>The WS Wiki <a href="http://wiki.apache.org/ws/Synapse">http://wiki.apache.org/ws/Synapse</a></li>
  <!--li>The Incubator Wiki <a href="http://wiki.apache.org/incubator/Synapse">http://wiki.apache.org/incubator/Synapse</a></li-->
  <!--li>The Original proposal: <a href="http://wiki.apache.org/incubator/SynapseProposal">http://wiki.apache.org/incubator/SynapseProposal</a></li-->
  <li>The Developer mailing list:  <a href="mailto:synapse-dev-subscribe@ws.apache.org">Subscribe</a></li>
  <li>The User mailing list:  <a href="mailto:synapse-user-subscribe@ws.apache.org">Subscribe</a></li>
  </ul>
</section>

<section name="Introduction">
	<p>Synapse is a mediation framework for Web Services. Synapse allows messages flowing through, into, or out of an organization to be mediated.</p>

	<p>Synapse, incidentally, is pronounced "sine-apse", and not "sin-apse".  </p>
</section>
	
<section name="Status">
	<p>Synapse has graduated from the incubator! Synapse was officially accepted as a sub-project of the Apache WS project on the 2nd January 2007.</p>
	
	<p>The latest release of Synapse is <a href="http://ws.apache.org/synapse/download/0.91/download.cgi">0.91</a>. Its key features are </p>

	<ul>
	<li><p> A streamlined configuration model and a new XML syntax</p></li>
	<li><p> Proxy Services (service mediation) and Message mediation</p></li>
	<li><p> Concept of Endpoints </p></li>
	<li><p> Integration of a Registry and dynamic refresh of resources as well as rules used to mediate </p></li>
	<li><p> Support for http and JMS transports</p></li>
	<li><p> Support for WS-Reliable Messaging and WS-Security through WS-Policies</p></li>
	<li><p> Script mediator supporting all BSF scripting languages </p></li>
	<li><p> Support for error handling and recovery </p></li>
  <li><p> Support for WS-RM sequences </p></li>
  <li><p> Many built in mediators </p></li>
	<li><p> Maven 2 based build process</p></li>
	<li><p> Many samples and a built-in Axis2 server to try out and experiment with samples (Samples includes WS-Security, JMS POX/Text messages, Script mediation and many more samples which can be run out of the box) </p></li>
	<li><p> Enhanced documentation </p></li>
	</ul>
</section>

</body>
</document>
