-- 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.2

Bug

    * [SCOUT-94] - Look at commented out Slot code in ScoutJaxrUddiV3Helper.getTModelFromJAXRClassificationScheme
    * [SCOUT-95] - Provide a mechanism for caching the AuthToken
    * [SCOUT-98] - BusinessLifeCycleManager.saveOrganizations(Collection organizations) does not return exception list if failed to save
    * [SCOUT-99] - OrganizationS returned by findOrganizations() contain at most one name and description even if multiple names or descriptions are present
    * [SCOUT-101] - Faults are not handled properly by RegistryImpl.execute(JAXBElement<?> uddiRequest, URI endPointURI)

Release notes - Scout - Version 1.2.1

Bug

    * [SCOUT-96] - Make sure we pass JUDDI exceptions on through the Scout chain
    * [SCOUT-100] - org.apache.ws.scout.util.ScoutJaxrUddiV3Helper.getAddress fails to fill in line field of AddressLine
    * [SCOUT-102] - Need to fix null case for org.apache.ws.scout.model.uddi.v2.BusinessService->getBindingTemplates

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

  
