-- 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 dev@juddi.apache.org. Subscribe to this list by 
  sending a message to the following email address:
  
    dev-subscribe@juddi.apache.org

Release Notes - Scout - Version 1.2.3

Bug

    * [SCOUT-105] - dont eat InvocationTargetException cause in org.apache.ws.scout.transport.LocalTransport
    * [SCOUT-108] - get_assertionStatusReport fails with juddi-client 3.0.4
    * [SCOUT-109] - scout does not conform to jUDDI WSDL
    * [SCOUT-113] - Overview URL Incorrectly displayed
    * [SCOUT-116] - IndexOutOfBoundsException in AxisTransport after changes in JUDDI-498.
    * [SCOUT-118] - Unit tests are broken using UDDI v3.
    * [SCOUT-119] - IndexOutOfBoundsException caused by a simple copy&paste bug in following code.
    * [SCOUT-120] - When getting Organizations by key on UDDIv3 ALL organizations are returned

Improvement

    * [SCOUT-104] - make property constants public in org.apache.ws.scout.registry.ConnectionFactoryImpl

Task

    * [SCOUT-112] - Upgrade juddi dependency to 3.1.0


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

  
