<?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 compliant</li>
	    </ul>
	  </section>
      
	  <section name="News">
	    <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>
