-- 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 similar 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 offering 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 dependency 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 receive 
  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

  mvn install

  This will build all of the modules and install them in
  your local maven repository.

  To clean up a build, use

  mvn 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 - Scout - Version 1.2

Bug

    * [SCOUT-65] - Scout tests don't have a way of choosing between multiple versions of jUDDI
    * [SCOUT-66] - Need support for multiple UDDI versions within scout
    * [SCOUT-89] - Exclusion of axis-related JARs causes NoClassDefFoundError in testing AxisTransport
    * [SCOUT-91] - JAXBContext.newInstance is expensive and needs to be cached
    * [SCOUT-92] - Fix SerialVersionUID in scout impl classes


Release notes - Scout - Version 1.1

Bug

    * [SCOUT-76] - orgKey can be null in ServiceImpl
    * [SCOUT-80] - copying lists into arrays invites code errors such as NPEs
    * [SCOUT-81] - jaxr-api cannot contain generics
    * [SCOUT-83] - Create the derby db in the target dir

Improvement

    * [SCOUT-82] - use maven best practices in build


Release notes - Scout - Version 1.1rc1

Bug

    * [SCOUT-72] - Scout - need to transfor specifications to TModelBag
    * [SCOUT-77] - Remove printStackTrace calls
    * [SCOUT-79] - Java privileged blocks

Task

    * [SCOUT-43] - Add JAXB binding
  
  
Release Notes - Scout - Version 1.0

Bug

    * [SCOUT-21] - can't configure transport class property using the properties in the factory
    * [SCOUT-22] - ServiceBindings are not populated when quering for a organization or service
    * [SCOUT-55] - Scout ignores ownership of registry objects when querying with BusinessQueryManager.getRegistryObjects(LifeCycleManager.ORGANIZATION)
    * [SCOUT-61] - ScoutJaxrUddiHelper returns BindingTemplate without AccessPoint/HostingRedirector
    * [SCOUT-64] - Missing / moved DOAP file
    * [SCOUT-67] - ClassCastException in BusinessQueryManager.getRegistryObject(...,LifeCycleManager.SERVICE)
    * [SCOUT-68] - java.lang.NullPointerException in ScoutUddiJaxrHelper.getServiceBinding(ScoutUddiJaxrHelper.java:437)
    * [SCOUT-70] - JAXR060 throws stack traces
    * [SCOUT-71] - TModelBag a required element in findBinding
    * [SCOUT-75] - Need lazy loading of Organization from ServiceImpl

Improvement

    * [SCOUT-57] - BusinessQueryManagerTest only tests one of the methods of BusinessQueryManager

New Feature

    * [SCOUT-20] - Enabling RMI access to jUDDI


  Release Notes - Scout - Version 1.0rc2
** Bug
    * [SCOUT-47] - tmodel_instance_info row not created
    * [SCOUT-48] - ServiceBinding objects do not have their SpecificationLink objects saved in UDDI.
    * [SCOUT-50] - Classifications array should be of size 0 if none are found
    * [SCOUT-52] - Refactor the unittests to make it easier to write and maintain them
    * [SCOUT-53] - Code to create associations is missing.
    * [SCOUT-54] - When querying for organizations (JAXR), the email, phone number, and postal address collections of the primary contact are empty although there is data in them
    * [SCOUT-56] - Service descriptions and corresponding service bindings are not returned when querying by service	
    * [SCOUT-63] - Set TModelInstanceDetails in getBindingTemplateFromJAXRSB even if slcol is null or empty

** Improvement

** New Feature
    * [SCOUT-51] - Test scout against other UDDIs (besides just jUDDI)
                          
  Release Notes - Scout - Version 1.0rc1

** Bug
    * [SCOUT-23] - Classification are not saved.
    * [SCOUT-25] - FindBinding does not work + patch
    * [SCOUT-26] - Removing a service does not remove the service + patch
    * [SCOUT-28] - XmlBeans conversion compiles but is non-functional
    * [SCOUT-29] - AuthTokenImpl.getAuthInfo() doesn't seem to work correctly
    * [SCOUT-30] - Classifications are ignored when preforming finds.
    * [SCOUT-31] - Fix scout maven 1 build issue so that the dependency jars can be downloaded automatically
    * [SCOUT-32] - Fix NPE at getConcept
    * [SCOUT-33] - Should throw exception when level 1 feature is accessed in RegistryEntryImpl.java
    * [SCOUT-34] - DiscoveryURLs aren't constructed correctly when there is more than 1 discoveryURLs for a businessEntity
    * [SCOUT-35] - Should use hashset for the collection in BulkResponseImpl to not allow duplicate 
    * [SCOUT-36] - minor update to get scout maven 2 build pass the error in download juddi snapshot
    * [SCOUT-40] - InternationalString is not handled correctly
    * [SCOUT-41] - Results not returned in the given order
    * [SCOUT-44] - port fixes for scout 8 to trunk
    * [SCOUT-45] - port scout 19 to trunk
    * [SCOUT-46] - port scout 10 to trunk

** Improvement
    * [SCOUT-9] - Separation of Apache Scout and jUDDI

** New Feature
    * [SCOUT-18] - Embedded mode execution

** Task
    * [SCOUT-27] - Update Tests with embedded juddi setup
    * [SCOUT-37] - Cleanup code to get rid of warnings
    * [SCOUT-38] - Produce website from the maven2 build
    * [SCOUT-39] - Integrate all sample code in unittests
    * [SCOUT-42] - apply fixes on 0.7 branches to the trunk


Release Notes - Scout - Version v0.7

** Bug
    * [SCOUT-4] - Level 1 methods in PersonName must throw UnsupportedCapabilityException
    * [SCOUT-6] - Null pointer exception when creating an association
    * [SCOUT-7] - NullPointerException when a BusinessEntity does not have services
    * [SCOUT-8] - Unable to use InternationalString in BusinessQueryManager.findOrganizations() (ClassCastException)
    * [SCOUT-10] - Publish requests to JUDDI do not include ServiceBinding information.
    * [SCOUT-15] - RegistryEntry should throw UnsupportedCapabilityException for level 0
    * [SCOUT-19] - ServiceBinding.getSpecificationLinks should not return null

** Improvement
    * [SCOUT-11] - JAXR Classifications are not processed

** Task
    * [SCOUT-1] - Implement saveXXX Methods in BusinessLifeCycleManager
    * [SCOUT-2] - Implement deleteXXX methods in BusinessLifeCycleManager
    * [SCOUT-3] - Implement findXXX methods in BusinessQueryManager
    * [SCOUT-5] - Predefined Enumerations
    * [SCOUT-13] - Better Logging capabilities
    * [SCOUT-16] - Maven2 migration

  
