Release Notes - CXF Distributed OSGi - Version 2.2.0
====================================================

** Bug
    * [DOSGI-253] - CXF DOSGI JAX-RS incompatible with Camel features
    * [DOSGI-262] - Configure intent objects from service object (IntentsProvider, @Features)
    * [DOSGI-264] - Add features to OSGi service using @Features annotation

** Improvement
    * [DOSGI-268] - Update CXF to 3.1.12
    * [DOSGI-269] - Update Aries RSA to 1.11.0

** New Feature
    * [DOSGI-261] - Sample for rest with jackson provider
    * [DOSGI-266] - Support for org.apache.cxf.jaxrs.ext.ContextProvider
    * [DOSGI-270] - Create sample for swagger documentation 
    

Release Notes - CXF Distributed OSGi - Version 2.1.0
====================================================

** Bug
    * [DOSGI-258] - itests fail when port 8080 is in use

** Improvement
    * [DOSGI-251] - Allow to export services with less service properties
    * [DOSGI-256] - ContextResolver intents should be registered as providers
    * [DOSGI-257] - Allow to set bus properties 


Release Notes - CXF Distributed OSGi - Version 2.0.0
====================================================

** Bug
    * [DOSGI-19] - Discovery Software doesn't notice changed Service Properties.
    * [DOSGI-22] - It would benefit the RFC 119 TCK if multiple instances of DOSGi could be run in a single OSGi container.
    * [DOSGI-52] - -Dorg.apache.cxf.spring.validation.mode=VALIDATION_NONE doesn't have an effect
    * [DOSGI-73] - OSGi Declarative Service-based consumer does not register proxy service on demand
    * [DOSGI-108] - service.exported.interfaces doesn't support comma-seperated String value
    * [DOSGI-124] - ReceiveTimeout not configurable while using cxf-rest service in OSGI
    * [DOSGI-159] - Endpoint description contains wrong org.apache.cxf.ws.address when using HTTPService style
    * [DOSGI-171] - service objects are never released (using ungetService)
    * [DOSGI-185] - Restarting of Jetty/PaxWeb makes exported services unavailable
    * [DOSGI-186] - documentation incorrect
    * [DOSGI-187] - service configuration for service-namespace, service-name and service-port only take affect if wsdl-location is also configured
    * [DOSGI-196] - Greeter demo does not work in standalone Felix
    * [DOSGI-199] - NoSuchMethodError in tests (Jetty version mismatch)
    * [DOSGI-209] - when bundles registers two WS with different SoapBinding Style Document/RPC then one of the STYLE is not as expected
    * [DOSGI-213] - ASM library not in Multibundle 1.6.0, so no naming of webservice parameters possible
    * [DOSGI-219] - DOSGi Fails to Publish Service Under Apache Karaf 3.0.3
    * [DOSGI-225] - Service publication with org.apache.cxf.ws.httpservice.context property does not work
    * [DOSGI-226] - Cannot configure org.apache.cxf.dosgi.dsw.Activator via Felix fileinstall
    * [DOSGI-227] - Build fails with JDK 8
    * [DOSGI-236] - IllegalArgumentException: No SchemaFactory exception during build
    * [DOSGI-240] - Fix checkstyle in eclipse
    * [DOSGI-242] - Refactor provider to prepare for split

** Improvement
    * [DOSGI-101] - Update the guide on using DOSGI RI withing Eclipse
    * [DOSGI-144] - can not deploy CXF 1.3.1 on Virgo Tomcat 3.5.RELEASE
    * [DOSGI-152] - Update systests2 to use pax-exam 2.5
    * [DOSGI-237] - Upgrade Distributed OSGI to OSGI 5.0
    * [DOSGI-239] - Extract decorator xml support into separate bundle
    * [DOSGI-241] - Simplify examples
    * [DOSGI-243] - Update to OSGi spec 5.0.0
    * [DOSGI-245] - Split cxf provider into rs and ws provider
    * [DOSGI-246] - Upgrade to Aries RSA 1.9.0
    * [DOSGI-247] - Support for Conduit configs and SSL example
    * [DOSGI-248] - Update to CXF 3.1.7
    * [DOSGI-249] - Redesign examples
    * [DOSGI-250] - Support capabilities and requirements specified in RSA 1.1

** New Feature
    * [DOSGI-211] - Support SOAP over JMS in DOSGI

** Task
    * [DOSGI-194] - Decide how DOSGi needs to handle service.exported.interfaces with multiple values 


Release Notes - CXF Distributed OSGi - Version 1.8.0
====================================================

** Bug
    * [DOSGI-221] - HttpServiceManager.getHttpService sometimes return null

** Improvement
    * [DOSGI-235] - Switch to Aries RSA release 1.8.0
    * [DOSGI-228] - Upgrade to CXF 3.1.5
    * [DOSGI-229] - Refactor to make Remote Service Admin core independent of CXF
    * [DOSGI-232] - Remove code that moved to aries-rsa

** New Feature
    * [DOSGI-230] - Create TCP provider
    * [DOSGI-231] - Create ExportPolicy SPI    


Release Notes - CXF Distributed OSGi - Version 1.7.0
====================================================

** Bug
    * [DOSGI-214] - Endpoint publication to discovery does not always work
    * [DOSGI-215] - ZooKeeperDiscovery restarts ZooKeeper-connection for no reason
    * [DOSGI-216] - ZookeeperStarter restarts ZooKeeper too easily

** Improvement
    * [DOSGI-220] - Upgrade to cxf 3.1.1 
    
Release Notes - CXF Distributed OSGi - Version 1.6.0
====================================================

** Bug
    * [DOSGI-11] - dOSGi creates new databinding instance instead of using a spring-loaded databinding if available
    * [DOSGI-196] - Greeter demo does not work in standalone Felix
    * [DOSGI-198] - Imported service is gone after client bundle is restarted
    * [DOSGI-206] - Parse errors for xml files in discovery local and dsw
    * [DOSGI-207] - Update karaf maven plugin to release version
    * [DOSGI-208] - OSGi compendium bundle installed by feature causes problems
    * [DOSGI-210] - Service registration and memory leaks

** Improvement
    * [DOSGI-201] - Create DSOGi distro from karaf feature file
    * [DOSGI-202] - Make DOSGi independent of jdom
    * [DOSGI-203] - Upgrade to cxf 2.7.6
    * [DOSGI-204] - Update osgi spec version to 4.3.1 and felix to 4.2.1
    * [DOSGI-205] - Upgrade to pax exam 3.2

** Task
    * [DOSGI-212] - Update CXF version to 2.7.8


Release Notes - CXF Distributed OSGi - Version 1.5.0
====================================================

** Bug
    * [DOSGI-158] - NPE on shutdown of DOSGi service
    * [DOSGI-160] - RemoteServiceAdmin shuts itself down during startup
    * [DOSGI-161] - services sometimes don't get exported
    * [DOSGI-162] - Compilation errors when using OSGi core
    * 4.3.0/4.3.1/5.0.0
    * [DOSGI-164] - NullPointerException on export
    * [DOSGI-165] - exported service is not properly closed and cannot be
    * restarted
    * [DOSGI-166] - List can not be used to register CXF providers with DSW
    * [DOSGI-168] - RemoteServiceAdminCore service parameters handling bugs
    * [DOSGI-172] - o.a.c.d.discovery.zookeeper package classes are not
    * properly synchronized
    * [DOSGI-173] - unregistering an exported service does not remove it
    * from zookeeper (and remote clients)
    * [DOSGI-174] - synchronization issues and resource leaks in
    * TopologyManagerImport and related classes
    * [DOSGI-175] - TopologyManagerImport's reference counter doesn't count
    * [DOSGI-176] - zookeeper discovery sending multiple duplicate endpoint
    * notifications
    * [DOSGI-177] - stopped services still appear as available to clients
    * [DOSGI-180] - CXF service does not disappear if exporting bundle is
    * stopped
    * [DOSGI-188] - services aren't re-imported after RemoteServiceAdmin
    * restart
    * [DOSGI-190] - NodeExistsException and missing endpoint after ZooKeeper
    * is restarted
    * [DOSGI-191] - ZooKeeperDiscovery instance reconnects to ZooKeeper
    * after bundle is stopped
    * [DOSGI-192] - Upgrade to zookeeper 3.3.2 to fix bug with zk event
    * thread shutdown
    * [DOSGI-195] - Exceptions in tests: ClassCastException on
    * SpringBusFactory

** Improvement
    * [DOSGI-167] - Upgrade Aries to the 1.x version for distro
    * [DOSGI-170] - Remove single bundle distro
    * [DOSGI-181] - Reactivate or delete old systests
    * [DOSGI-184] - Split Endpoint repository from TopologyManagerExport
    * [DOSGI-193] - Split discovery.zookeeper package into subpackages


Release Notes - CXF Distributed OSGi - Version 1.4.0
====================================================

** Bug
    * [DOSGI-10] - Spring schema handling (intents) doesn't work properly
    * for the single-bundle case
    * [DOSGI-18] - RESTful Proxies can not be created in multibundle DOSGI
    * distributions 
    * [DOSGI-63] - The discovery can be used be used before the connection
    * to the server is completely established
    * [DOSGI-69] - CXF-DOSGi requires internet access when reading XML
    * [DOSGI-90] - Do not use/assume that endpoint.id is an address
    * [DOSGI-92] - Exception : Applying intent: SOAP via binding config
    * [DOSGI-109] - NullPointerException in ToloplogyManager during bundle
    * stop
    * [DOSGI-110] - Unable to export multiple services
    * [DOSGI-111] - DOSGi bundle attempts to load WSDL using wrong bundle in
    * WSDL-first configuration 
    * [DOSGI-113] - Integration with pax-logging not possible
    * [DOSGI-114] - RemoteServiceAdmin is not available warnings in DOSGi
    * 1.3
    * [DOSGI-116] - Build fails when downloading Zookeeper artifacts
    * [DOSGI-119] - Single bundle activator fails to stop all the bundles if
    * one of the activators throws an exception
    * [DOSGI-120] - NullPointerException on export
    * [DOSGI-121] - Fix logging: System.out prints, printStackTrace, verbose
    * logs
    * [DOSGI-123] - ZooKeeper registrations are not recreated on ZooKeeper
    * server restart
    * [DOSGI-125] - The dead lock in TopologyManagerImport
    * [DOSGI-129] - NPE when stopping a bundle that exports a DOSGI service
    * [DOSGI-135] - Switch logging api to slf4j
    * [DOSGI-136] - Refactor zookeeper server and add metatype config
    * [DOSGI-137] - Possible bug in TopologyManagerImport when checking if
    * an Endpoint is already imported
    * [DOSGI-142] - Upgrade CXF to 2.7.0
    * [DOSGI-145] - Multiple services using HTTP Service and published from
    * the same bundle do not work 
    * [DOSGI-150] - Update to Java 1.6
    * [DOSGI-153] - Error starting greeter sample in karaf 2.3.0 in aegis
    * setup: ExceptionInInitializerError ... failed to create an
    * XPathFactory for the default object model:
    * http://java.sun.com/jaxp/xpath/dom
    * [DOSGI-154] - Problems with api packages since update to cxf 2.7.2

** Improvement
    * [DOSGI-70] - Reconnect automatically to Zookeeper after a connection
    * loss / timeout
    * [DOSGI-86] - Decouple DOSGi DSW from Spring DM.
    * [DOSGI-126] - Allow to use the servlet transport with automatic
    * discovery
    * [DOSGI-127] - Default address for services should use the servlet
    * transport
    * [DOSGI-128] - Allow to use JAXWS/JAXB service without frontend and
    * databinding properties
    * [DOSGI-130] - Clean up unused code and fix warnings, use interfaces
    * where possible in DSW
    * [DOSGI-131] - Switch slf4j from springsource bundles to org.slf4j,
    * update slf4j version
    * [DOSGI-132] - Switch logging at runtime to pax logging
    * [DOSGI-133] - Create a Karaf feature file for CXF DOSGi
    * [DOSGI-134] - Refactoring of TopologyManager
    * [DOSGI-138] - Refactoring of discovery distributed
    * [DOSGI-139] - Refactor dsw-cxf to remove dep cycles
    * [DOSGI-141] - ZooKeeper is not support cluster (ensemble) mode
    * [DOSGI-143] - Remove all repos except for apache snapshot and central
    * [DOSGI-146] - Allow to define intents as OSGi services
    * [DOSGI-147] - Deprecate some Constants that are defined in the spec
    * [DOSGI-148] - Refactoring of dsw ConfigTypeHandlers
    * [DOSGI-149] - Optimize distributions and karaf feature

** New Feature
    * [DOSGI-115] - Use Spring DM and Eclipse Gemini Blueprint with DOSGi

Apache CXF Distributed OSGi 1.3.1 Release Notes
===============================================

Fixes needed in order to pass the OSGi 4.3 Remote Service Admin TCK.
* Fixed exports from Single Bundle Distro
* Fixed deadlock
* Fixed cleanup
* Fixed ExportReferenceImpl.equals() and hashCode()
* Fixed RemoteServiceAdminCore.exportService()

Apache CXF Distributed OSGi 1.3 Release Notes
=============================================

The following modules have been removed from the destribution:

* org.apache.cxf.dosgi:cxf-dosgi-ri-discovery-distributed-zookeeper-wrapper

  Zookeeper 3.3.1 bundle is now available. See DOSGI-100 for more information.

* org.apache.cxf.dosgi:cxf-dosgi-remote-service-admin-interfaces

  org.osgi:org.osgi.enterprize:4.2.0 artifact is now available. See DOSGI-104 for more information.

Many dependencies have been updated, including the update to CXF 2.5.1. See also DOSGI-96.

Additionally, a number of bugs has been fixed including:

DOSGI-108   service.exported.interfaces doesn't support comma-seperated String value
DOSGI-107   Support for a 'wsdl' configuration type
DOSGI-105   Update greeter_rest demo to use OSGI HttpService
DOSGI-103   Improve multi-bundle distro configuration for Felix
DOSGI-102   DOSGI RI can not map invocation exceptions to custom exceptions on the client side
DOSGI-97    Automatically unregister HTTP servlets/resources if exported service goes down
DOSGI-94    Enhancement to deal with registered services that might have been proxied
DOSGI-91    DOSGI RS Proxies ignore ResponseExceptionMapper providers
DOSGI-85    Unable to export services started after Topology manager
DOSGI-82    Populate custom servicename, portname and targetnamespace for jax-ws
DOSGI-79    RemoteServiceAdmin.getImportedEndpoints() returns collection of incorrect type
DOSGI-77    NullPointerException from Distributed OSGI when bundle with wanted properties is started.
DOSGI-76    EndpointListener.endpointRemoved
DOSGI-75    CXF Distributed OSGi isn't using org.apache.cxf.common.logging.LogUtils


Apache CXF Distributed OSGi 1.2 Release Notes
=============================================

In addition to providing the Reference Implementation to the OSGi Remote
Services Specification, the CXF Distributed OSGi 1.2 release now also
provides the Reference Implementation of the OSGi Remote Service Admin
Specification version 1.0, Chapter 122 in the OSGi Enterprise
Specification.

To achieve compliance with the RSA specification a major refactoring has
been done on the code base.

For the new features applicable to the RSA specification, see chapter
122 in the OSGi Enterprise Spec (http://www.osgi.org/Download/Release4V42).

The following new features have been introduced:

* org.apache.cxf.ws.port=[port number]
  This configuration property can be used to change the default port
  at which a remote service appears. When setting this property the
  default context will still be used.

* Servlet Filters (javax.servlet.Filter) can now be registered as OSGi
  services with the "org.apache.cxf.httpservice.filter" boolean
  property set to true and used to secure DOSGi server endpoints.
  Endpoints can enforce the registration of the filters by setting an
  "org.apache.cxf.httpservice.requirefilter" boolean property to true

Additionally, a number of bugs has been fixed including:

[DOSGI-13] - The CXF DOSGi implementation needs to be updated to support the
             latest OSGi Remote Services Admin spec.
[DOSGI-24] - org.apache.cxf.dosgi.dsw.ClassUtils#getInterfaceClass() method
             should search through super class interfaces too
[DOSGI-25] - FileNotFoundException when client-side proxy is being created
             [META-INF/cxf/cxf.xml]
[DOSGI-27] - Discovery problem when two dependent bundles export interfaces
[DOSGI-28] - Consuming more than 1 service using Spring-DM doesn't work
[DOSGI-29] - Exception when stopping DOSGi bundle
[DOSGI-30] - ClassNotFoundException when exposing service.
[DOSGI-31] - Distributed OSGi having a problem with a custom type method
             argument
[DOSGI-32] - The default amount of logging should be significantly reduced
[DOSGI-33] - Exception when exposing remote service using DOSGi
[DOSGI-34] - org.apache.servicemix.specs.locator-1.1.1.jar useless?
[DOSGI-35] - ServicePublication.PROP_KEY_ENDPOINT_LOCATION is now a URI,
             instead of a URL
[DOSGI-37] - Fix the dependency on Equinox for the DOSGi system tests
[DOSGI-38] - single-bundle distribution has incorrect Import-Package and
             Export-Package declaration in the manifest
[DOSGI-40] - Remoted service fails to register endpoint after framework is
             restarted
[DOSGI-41] - Remove simple-pojo demo (temporarily) as its currently not
             supported
[DOSGI-43] - ClassCastException with Declarative Services
[DOSGI-44] - Existing OSGi Services are not remoted when CXF-DOSGi is started
[DOSGI-50] - Need to automatically infer SOAP/HTTP transport intents if not
             explicily set via osgi.remote.requires.intents
[DOSGI-54] - RemoteServiceAdmin interfaces/classes out of sync with official
             version
[DOSGI-61] - The Zookeeper Discovery only supports primitive types as service
             properties
[DOSGI-62] - The DSW creates endpoints with localhost URLs
[DOSGI-66] - The DSW only loads the intent map when certain spring bundles
             are loaded and started upfront
[DOSGI-67] - Enable filters on DOSGi endpoints
[DOSGI-72] - DOSGI not working with HTTP Service
[DOSGI-74] - Update CXF version to 2.2.9


Apache CXF Distributed OSGi 1.1 Release Notes
=============================================

Specific issues, features, and improvements fixed in this version
-----------------------------------------------------------------

The Distributed OSGi 1.1 release provides the Reference Implementation
of the Remote Services Specification version 1.0. Chapter 13 in the OSGi
Compendium Specification (http://www.osgi.org/Download/Release4V42).

New features in this release include:

* A live Discovery System is now supported. The CXF-DOSGi implementation
  makes use of Apache Zookeeper (http://hadoop.apache.org/zookeeper) as
  the Discovery Server and provides client-side bundles for transparent
  interaction with Zookeeper. See the Discovery Documentation pages
  (http://cxf.apache.org/dosgi-discovery.html) for more details.

* REST support for JAX-RS-based Remoted Services and Consumers through
  the org.apache.cxf.rs configuration type.

* Many user issues have been addressed. In addition the following bugs
  have been fixed:

[CXF-2182] - Exceptions when remoting pre-existing service
[CXF-2337] - org.apache.cxf.dosgi.dsw.ClassUtils#getInterfaceClass() method
             should search through super class interfaces too
[CXF-2435] - Distributed OSGi having a problem with a custom type method
             argument
[CXF-2288] - Bundle cannot be restarted
[CXF-2385] - Discovery doesn't fully translate 'localhost' into a proper
             machine name
[CXF-2200] - Consuming more than 1 service using Spring-DM doesn't work


Known limitations :

* Schema validation can not be done for JAX-RS-based endpoints which use
  Aegis databinding
