<?xml version="1.0" encoding="UTF-8"?>

<!--
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>Welcome to Apache Scout</title>
  </properties>
  <body>

      <section name="Intro">
	      <p>Apache Scout is an open source implementation of the <a href="http://jcp.org/en/jsr/detail?id=93">JSR 93 - JavaTM API for
		XML Registries 1.0 (JAXR)</a>. The JAXR API allows the integration of XML Registries based on either UDDI or ebXML. Scout
		implements the required (level 0) part of the specification, which means that is can talk to any UDDI-2.0 compliant Registry.
	      </p>
	  </section>
    
	 <section name="Scout Features">
	    <ul>
	      <li>Open Source</li>
	      <li>Platform Independent</li>
	      <li>Supports for JDK 1.3.1 and later</li>
	      <li>JAXR 1.0 complaint</li>
	      <li>UDDI version 2.0 and 3.0 compliant</li>
	    </ul>
	  </section>
      
	  <section name="News">
	    <p><strong>Oct 23, 2009</strong> Version 1.2 adds support for UDDI v3</p>
	    <p><strong>Aug 3, 2009</strong> Version 1.1 uses JAXB for XML binding and passes TCK</p>
	    <p><strong>May 5, 2009</strong> Version 1.0 is now available</p>
	  	
	  </section>

      <section name="About JAXR">
        <p>This JSR requests the creation of the Java API for XML Registries
         1.0 specification (JAXR). JAXR may be viewed as analogous to Java 
         Naming and Directory Interface (JNDI) but designed specifically 
         for (internet) sharing of XML-related business information.
        </p>
      </section>
      
      <section name="Getting Started">
        <p>Download the Scout-1.0.jar and set up a UDDI-2.0 compliant Registry like 
        <a href="http://ws.apache.org/juddi/">jUDDI-2.x</a>. Check out the unittest in the
        Scout project as they are nice examples on how to use the JAXR API. The 
        <a href="http://svn.apache.org/viewvc/webservices/scout/trunk/scout/src/test/">unit-tests</a>
        use embedded jUDDI backed by an embedded Derby database. The configuration
        for this can be found in the scout.properties and juddi.properties files.
        </p>
        <p>Additional information regarding JAXR can be found at:
        <ul>
          <li><a href="http://jcp.org/en/jsr/detail?id=93">JSR 93 - JavaTM API for XML Registries 1.0 (JAXR)</a>.</li>
          <li><a href="http://java.sun.com/j2ee/1.3/docs/tutorial/doc/JAXR2.html">Overview of JAXR</a>.</li>
          <li><a href="http://www.onjava.com/pub/a/onjava/2002/02/27/uddi.html">Understanding UDDI and JAXR</a>.</li>
          <li><a href="http://www.javaworld.com/javaworld/jw-06-2002/jw-0614-jaxr.html">Discover and publish Web services with JAXR</a></li>
          <li><a href="http://www.javaworld.com/javaworld/jw-09-2002/jw-1213-webservices.html">Publish and find UDDI tModels with JAXR and WSDL</a></li>
          <li><a href="http://www.jboss.org/jbossesb/docs/4.2.1GA/manuals/html/services/Registry.html">JBossESB Registry</a></li>
        </ul>
        </p>
      </section>
      
  </body>
</document>
