<?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 it can talk to any UDDI 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>Feb 29, 2012</strong> Version 1.2.6 <a href="http://apachejuddi.blogspot.com/2012/02/first-time-running-he-jaxr-tck-with.html">passes the JEE6 TCK running against jUDDIv2 as well as jUDDIv3</a></p>
	    <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.2.2.jar and set up a UDDI-2.0 compliant Registry like 
        <a href="http://juddi.apache.org/">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/juddi/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>
        The JAXR spec does not support UDDI v3 functionality, but Scout makes an effort to support the UDDI v2 functionality in UDDI v3 registries. 
        </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>
          <li><a href="http://apachejuddi.blogspot.com/2012/02/using-jaxr-on-jboss-711.html">Using JAXR on JBoss-7.1</a></li>
          
        </ul>
        </p>
      </section>
      
  </body>
</document>
