-- THIS DOCUMENT IS A WORK IN PROGRESS --

Welcome to the Apache Scout Project!

INTRODUCTION

  While this effort can be considered a project in and of
  itself it will have a dependency on the jUDDI Registry
  project.  This dependency is covered in the "RELATIONSHIP 
  WITH THE jUDDI PROJECT" section below.


PROJECT GOALS

  The purpose of the JAXR specification is to give Java/J2EE 
  developers a common standard API to access various web 
  services registries. This is simiar in function to the way 
  the JDBC API provides a common API for accessing different 
  database products.

  The JAXR specification describes two types of providers 
  each offerring different levels of support for interacting 
  with the two popular registry specifications in use today,
  UDDI and ebXML.
  
  A type 0 providers will offer support for accessing UDDI 
  registries and type 1 providers support access to both UDDI 
  AND ebXML registries. The goal of this project is to 
  implement a type 0 provider.


RELATIONSHIP TO THE JUDDI REGISTRY PROJECT

  As described in the PROJECT GOALS section above, the 
  JAXR specification indicates that a type 0 provider is 
  used to support interaction with UDDI registries. 
  
  A large portion of the development effort for this 
  project will center around building a bridge between 
  the standard JAXR API interface (jaxr.jar) and a UDDI 
  client library such as UDDI4j.
  
  This is where the depenedency on jUDDI comes into play. 
  It's a little known fact that jUDDI is not only a UDDI 
  Registry but can also act as a UDDI client. 
  
  Since the jUDDI Registry must have the ability to recieve 
  SOAP requests, deserialize them into Java objects and 
  then serialize and return SOAP responses we realized
  that we could leverage this existing functionality to
  quickly produce a UDDI client which we did.
  
  A significant side-benefit of using the jUDDI client
  in our JAXR provider is that any issues or bugs 
  discovered and fixed while using the jUDDI Proxy will 
  directly improve the quality of the jUDDI Registry.
  

BUILDING THE JUDDI JAXR PROVIDER

  Apache Scout is a maven project that is built using the
  multiproject plugin. All dependencies are included or
  are downloaded during the build. The quickest way to
  start is, in the root directory, to type

  maven

  This will build all of the modules and install them in
  your local maven repository.

  To clean up a build, use

  maven multiproject:clean

SUPPORT

  You'll find documentation for this project in the docs/ 
  directory.

  Also, read the RELEASE NOTES below in for details on the 
  current release.

  Thanks from the Scout development team for downloading 
  the package; help us make it better by sending comments 
  to scout-dev@ws.apache.org. Subscribe to this list by 
  sending a message to the following email address:
  
    scout-dev-subscribe@ws.apache.org
  
  
RELEASE NOTES
                          
  Changes From 0.0.0 to 0.1.0