/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 
                       Apache ServiceMix 4.5.3
                  ================================
 Overview
 --------

Apache ServiceMix 4.5.3 is a minor release of the OSGi based ServiceMix ESB platform.  This release picks up new versions of
Apache Camel and Apache CXF.  It also contains a few bug fixes.

ServiceMix 4.5.3 includes the following major dependency versions:
- Apache ActiveMQ 5.7.0 (http://activemq.apache.org)
- Activiti 5.10 (http://www.activiti.org)
- Apache Camel 2.10.7 (http://camel.apache.org)
- Apache CXF 2.6.9 (http://cxf.apache.org)
- Apache Karaf 2.2.11 (http://karaf.apache.org)
- Apache ServiceMix NMR 1.6.1
- Apache ServiceMix JBI Components 2013.01

 Changelog
 ---------

Release Notes - ServiceMix 4 - Version 4.5.3

** Bug
    * [SMX4-1513] - add type check to avoid CCE in cxf nmr transport
    * [SMX4-1546] - The cxf nmr transport should provide a synchronous option
    * [SMX4-1577] - Release Apache ServiceMix 4.5.3
    * [SMX4-1579] - Upgrade to Camel 2.10.7
    * [SMX4-1580] - Upgrade to CXF 2.6.9
    * [SMX4-1585] - org.apache.servicemix.cxf.transport.nmr.NMRConduitOutputStream.commitOutputMessage() does not propagate exception.

** Improvement
    * [SMX4-1547] - use EndpointName + ServiceName + InterfaceName as a Key to distinguish a NMR destination
    * [SMX4-1548] - add interfaceName|serviceName option for camel-nmr consumer endpoint


                      Apache ServiceMix 4.5.2
                  ================================
 Overview
 --------

Apache ServiceMix 4.5.2 is a minor release of the OSGi based ServiceMix ESB platform.  This release picks up new versions of
Apache Camel and Apache Karaf.  It also contains a few bug fixes.

ServiceMix 4.5.2 includes the following major dependency versions:
- Apache ActiveMQ 5.7.0 (http://activemq.apache.org)
- Activiti 5.10 (http://www.activiti.org)
- Apache Camel 2.10.6 (http://camel.apache.org)
- Apache CXF 2.6.8 (http://cxf.apache.org)
- Apache Karaf 2.2.11 (http://karaf.apache.org)
- Apache ServiceMix NMR 1.6.1
- Apache ServiceMix JBI Components 2013.01

 Changelog
 ---------

Release Notes - ServiceMix 4 - Version 4.5.2

** Bug
    * [SMX4-1381] - cannot install servicemix-drools feature
    * [SMX4-1423] - No org.apache.cxf.jaxws.spi.ProviderImpl found 
    * [SMX4-1424] - Use official org.jruby:jruby lib
    * [SMX4-1448] - Activiti repository URL missing in Pax URL Maven configuration
    * [SMX4-1451] - Upgrade to Karaf 2.2.11
    * [SMX4-1455] - drools install error
    * [SMX4-1472] - servicemix-camel component should honor the synchronous option 
    * [SMX4-1486] - Update to Camel 2.10.5

** Improvement
    * [SMX4-1378] - cxf-nmr trasport should copy the message header  from CXF the Protocol Header
    * [SMX4-1452] - introduce a throwExceptionOnFailure parameter for camel-nmr producer endpoint

** Task
    * [SMX4-1453] - Excessive logging in CXF NMR binding and transport
    * [SMX4-1487] - Release Apache ServiceMix 4.5.2



                      Apache ServiceMix 4.5.1
                  ================================
 Overview
 --------

Apache ServiceMix 4.5.1 is a minor release of the OSGi based ServiceMix ESB platform.  This release picks up new versions of
Apache Camel and Apache CXF.  It also contains a few bug fixes/

ServiceMix 4.5.1 includes the following major dependency versions:
- Apache ActiveMQ 5.7.0 (http://activemq.apache.org)
- Activiti 5.10 (http://www.activiti.org)
- Apache Camel 2.10.4 (http://camel.apache.org)
- Apache CXF 2.6.6 (http://cxf.apache.org)
- Apache Karaf 2.2.10 (http://karaf.apache.org)
- Apache ServiceMix NMR 1.6.0
- Apache ServiceMix JBI Components 2013.01

 Changelog
 ---------

** Bug
    * [SMX4-1286] - Replace camel-activemq with activemq-camel
    * [SMX4-1380] - Exception when using CXF/SAAJ in ServiceMix 4.5.0
    * [SMX4-1399] - incorrect readme.txt files in cxf examples
    * [SMX4-1401] - cxf-ws-security-blueprint log4j warning + wrong README info
    * [SMX4-1405] - NMR example is broken

** Task
    * [SMX4-1318] - upgrade to cxf 2.6.6
    * [SMX4-1388] - Release Apache ServiceMix 4.5.1


                      Apache ServiceMix 4.5.0
                  ================================
 Overview
 --------

Apache ServiceMix 4.5.0 is a major release of the OSGi based ServiceMix ESB platform.  This release contains many
bugfixes and feature enhancements over the 4.5.0 release.  New features include support for Activiti and a JMS log
appender implementation.

ServiceMix 4.5.0 includes the following major dependency upgrades:
- Apache ActiveMQ 5.7.0 (http://activemq.apache.org)
- Activiti 5.10 (http://www.activiti.org)
- Apache Camel 2.10.3 (http://camel.apache.org)
- Apache CXF 2.6.3 (http://cxf.apache.org)
- Apache Karaf 2.2.10 (http://karaf.apache.org)
- Apache ServiceMix NMR 1.6.0
- Apache ServiceMix JBI Components 2013.01

 Changelog
 ---------

** Bug
    * [SMX4-537] - Startup script (bin/servicemix) misconfigures java.ext.dirs, breaking things like SSL in CXF
    * [SMX4-784] - activemq:list/activemq:query/activemq:bstat command doesn't work
    * [SMX4-1013] - Port already in use warning message in JBI assembly
    * [SMX4-1084] - ServiceMix won't boot when Felix 4.0.x is used
    * [SMX4-1094] - feature connector can't be load cause aries.version is not defined
    * [SMX4-1150] - Unable to install examples-cxf-jaxrs feature
    * [SMX4-1172] - upgrade to cxf 2.6.1
    * [SMX4-1193] - servicemix-shared feature is not self-contained
    * [SMX4-1204] - remove unnecessary runtime dependency for camel-nmr component
    * [SMX4-1206] - JBI configuration present in non-JBI assemblies
    * [SMX4-1207] - minimal kit by default will install activemq-broker.xml bundle
    * [SMX4-1258] - servicemix-saxon feature is missing dependencies
    * [SMX4-1271] - WarDeployer tries to load README file
    * [SMX4-1272] - Error installing 'connector' and 'activiti' features
    * [SMX4-1273] - cxf-nmr trasport should copy the message header which value is String as the Protocol Header
    * [SMX4-1276] - At examples-activiti-camel startup get  has *ERROR* Configuration
    * [SMX4-1277] - ResourceManager in activemq-broker.xml doesn't recover from TX after crash
    * [SMX4-1278] - Jetty logging to console
    * [SMX4-1285] - Activiti camel Test failed Order process lookup.
    * [SMX4-1287] - nmr toc has broken link
    * [SMX4-1314] -  CXF NMR transport throws NPE when it handles the fault message
    * [SMX4-1315] - Can't install servicemix-drools feature
    * [SMX4-1317] - activemq-broker.xml should be given start-level 50
    * [SMX4-1342] - Cxf examples that need org.apache.commons.httpclient does not start

** Improvement
    * [SMX4-1019] - Remove README file from deploy directory to avoid WarDeployer error message on TRACE
    * [SMX4-1037] - some bundle miss dependency="true" in cxf-jaxrs feature
    * [SMX4-1107] - Added cxf blueprint examples
    * [SMX4-1108] - Upgrade CXF version to 2.5.2
    * [SMX4-1120] - remove some uncessary features
    * [SMX4-1132] - cxf-ws-security-osgi/blueprint example should use smx/smx by default
    * [SMX4-1145] - add a new cxf ws-security example which demonstrate how to use signaturePropRefId in OSGi container
    * [SMX4-1179] - remove unecessary annotations from cxf nmr transport
    * [SMX4-1187] - Upgrade to XBean 3.11.1
    * [SMX4-1191] - Add support for Activiti
    * [SMX4-1224] - remove jetty6 bundle from  kit
    * [SMX4-1256] - Add Logstash event message format to JMS appender
    * [SMX4-1262] - remove jre.properties.cxf from SMX distribution
    * [SMX4-1313] - Add EnableCORSInterceptor for cxf related examples
    * [SMX4-1316] - add address/endpintName for dispatch process for CXF NMR transport
    * [SMX4-1319] - use StreamSource but not DOMSource for cxf-nmr-transport
    * [SMX4-1320] - missing features for cxf-jaxrs-blueprint and cxf-jaxws-blueprint example
    * [SMX4-1338] - Upgrade to Karaf 2.2.10

** Task
    * [SMX4-1004] - upgrade to cxf 2.5.1
    * [SMX4-1005] - upgrade to camel 2.9
    * [SMX4-1022] - wrap the smack bundle 3.2.1
    * [SMX4-1032] - add twitter4j-core and twitter4j-stream 2.2.5 bundle
    * [SMX4-1036] - Create Bundler wrap of saxon 9.3.0.11
    * [SMX4-1109] - upgrade to wss4j 1.6.5 and xmlsec 1.5.1
    * [SMX4-1115] - Align jdom version with Camel
    * [SMX4-1128] - Upgrade to Karaf 2.2.7
    * [SMX4-1129] - Upgrade to Camel 2.9.2
    * [SMX4-1130] - Upgrade to CXF 2.5.3
    * [SMX4-1131] - Upgrade to ActiveMQ 5.6.0
    * [SMX4-1134] - Upgrade to Camel 2.10.x
    * [SMX4-1135] - Upgrade to CXF 2.6.x
    * [SMX4-1146] - AWS SDK 1.3.10 bundle
    * [SMX4-1194] - Align http client version with Camel
    * [SMX4-1225] - upgrade to cxf 2.6.2
    * [SMX4-1227] - upgrade to camel 2.10.1
    * [SMX4-1228] - upgrade to spring 3.0.7.RELEAS
    * [SMX4-1241] - upgrade to karaf 2.2.9
    * [SMX4-1242] - endorse the smx spec api jar
    * [SMX4-1257] - Release Apache ServiceMix 4.5.0
    * [SMX4-1263] - upgrade to activemq 5.7.0
    * [SMX4-1267] - upgrade to cxf 2.6.3
    * [SMX4-1274] - upgrade to activiti 5.10
    * [SMX4-1275] - Add Activiti examples to the release
    * [SMX4-1323] - upgrade to saxon 9.3.0.11

** Wish
    * [SMX4-944] - Provide a SMX test jar


                      Apache ServiceMix 4.4.0
                  ================================
 Overview
 --------

Apache ServiceMix 4.4.0 is a major release of the OSGi based ServiceMix ESB platform.  This release contains many
bugfixes and feature enhancements over the 4.3.0 release.  ServiceMix 4.4.0 includes the following major dependency upgrades:

- Apache ActiveMQ 5.5.1 (http://activemq.apache.org)
- Apache Camel 2.8.3 (http://camel.apache.org)
- Apache CXF 2.4.4 (http://cxf.apache.org)
- Apache Karaf 2.2.4 (http://karaf.apache.org)
- Apache ServiceMix NMR 1.5.0
- Apache ServiceMix JBI Components 2011.02

 Changelog
 ---------

** Sub-task
    * [SMX4-220] - Extend the help command to display usefull help for all commands available
    * [SMX4-221] - The option --help on commands doesn't display good enough help
    * [SMX4-721] - Add complete distribution for offline deployments
    * [SMX4-884] - Rename existing assembly to apache-servicemix-4.x.0-jbi
    * [SMX4-885] - Add a basic distribution for new users
    * [SMX4-955] - Add minimal distribution to allow building any ServiceMix-based distribution

** Bug
    * [SMX4-206] - Apache ServiceMix 4 binary assembly zip file is not valid
    * [SMX4-246] - Avoid duplication of config files for NMR and Features assembly build
    * [SMX4-458] - Command activemq:list, activemq:browse return null
    * [SMX4-461] - Test failures in SMX4 Features' project on AIX
    * [SMX4-480] - Files in deploy folder before initial startup are getting deployed before boot features
    * [SMX4-518] - Camel NMR component WSSecurityTest fails
    * [SMX4-687] - ServiceMix 4.3.0-fuse-02-00 does not start correctly with fresh unzip on Windows
    * [SMX4-737] - Components Not Loading Before Routes
    * [SMX4-751] - Property replacement is broken in camel-blueprint examples
    * [SMX4-768] - bin/client script missing from Linux distribution
    * [SMX4-771] - simple example use out-of-date DocumentFactory
    * [SMX4-774] - artchetypes for servicemix-cxf-code-first-osgi-bundle and servicemix-cxf-code-first-osgi-bundle doesn't work
    * [SMX4-780] -  omit client script in bin folder
    * [SMX4-797] - Create OSGi bundle for RJC (Redis Java Client)
    * [SMX4-804] - ensure some bundle could be installed with OBR resolver
    * [SMX4-821] - wsdl4j bundle shouldn't import javax.wsdl as itself export it
    * [SMX4-853] - Simple quartz.xml example caue intermittent exception
    * [SMX4-867] - the endorsed xml-api jar can't correctly load org.apache.xpath.jaxp.XPathFactoryImpl class
    * [SMX4-869] - Missing class reference in the log:display output
    * [SMX4-873] - system bundle should export xerces and xalan package as we already endorse those jar
    * [SMX4-897] - reuse woodstox feature but not list seperate bundle
    * [SMX4-907] - BOM marker in camel-osgi Spring XML file not handled well on CI server
    * [SMX4-922] - Not all content of branding.properties is shown
    * [SMX4-926] - should add org.ops4j.pax.web.config.file properties to etc/org.ops4j.pax.web.cfg
    * [SMX4-932] - system.properties miss karaf.admin.role property
    * [SMX4-940] - ServiceMix features depends on non-existent version of geronimo servlet spec.
    * [SMX4-948] - Build failure when building with a clean maven repository (unable to determine JBI component)
    * [SMX4-962] - servicemix xstream 1.4.1 bundle incorrectly refer xstream 1.4
    * [SMX4-967] - remove saaj feature from add-features-to-repo
    * [SMX4-968] - distribution kit miss org.apache.karaf.features.obr bundles which cause startup failed
    * [SMX4-969] - features itests depends on old karaf management jar
    * [SMX4-980] - rename etc/org.ops4j.pax.web.cfg to etc/org.ops4j.pax.web.cfg.empty.stub
    * [SMX4-987] - simple/quartz.xml example output doesn't comply with the README
    * [SMX4-993] - The link to the FuseSource commercial documentation is broken
    * [SMX4-996] - examples won't build with clean Maven local repo

** Improvement
    * [SMX4-219] - The help of the shell commands is wrong or not sufficient and needs improvement
    * [SMX4-446] - Update Feature file of SMX4 to use HTTP feature of karaf and same version of jetty as camel feature file
    * [SMX4-572] - Cleanup POMs and provide a better build
    * [SMX4-597] - Use Camel feature
    * [SMX4-654] - Improve features.xml to leverage OBR improvements in Karaf
    * [SMX4-659] - Create bundle for jSch 0.1.44
    * [SMX4-722] - Update POMs to Maven3
    * [SMX4-727] - Consider dropping commons-logging for standard Java.util.logging
    * [SMX4-744] - specify camel feature bundle start level less than 60
    * [SMX4-772] - add configuration stub file for SSL pax-web suport for ease of users
    * [SMX4-775] - Provide assembly in JAR packaging as well
    * [SMX4-777] - Upgrade to Jetty 7.3.1.v20110307
    * [SMX4-778] - Rework the smx4 build to have better dependency handling
    * [SMX4-787] - Upgrade to ActiveMQ 5.5.1
    * [SMX4-791] - Make allowCoreThreadTimeOut name consistent across mbeans and properties
    * [SMX4-792] - Support run as subject for Camel NMR endpoint
    * [SMX4-793] - Support run as subject for CXF NMR endpoint
    * [SMX4-798] - Ensure OBR support is available before boot features are installed
    * [SMX4-799] - use the latest xerces to replace the jaxp-ri-1.4.4 to resolve cocurrent issue
    * [SMX4-801] - update a set of bundle version
    * [SMX4-802] - use features.xml from cxf
    * [SMX4-805] - Ignore the sun saaj package from the org.osgi.framework.bootdelegation
    * [SMX4-808] - Ignore the sun jaxb package from the org.osgi.framework.bootdelegation
    * [SMX4-809] - camel-cache ehcache cache repilication using ehcache-jmsreplication
    * [SMX4-812] - Upgrade FreeMarker to 2.3.16
    * [SMX4-815] - upgrade to cxf 2.4.0
    * [SMX4-825] - Support timeout property on Camel NMR endpoints
    * [SMX4-836] - Upgrade FreeMarker to 2.3.17
    * [SMX4-837] - Upgrade FreeMarker to 2.3.18
    * [SMX4-846] - Upgrade to Jetty 7.4.1.v20110513
    * [SMX4-852] - Add 'karaf-framework' to boot features to avoid uninstalling core Karaf bundles
    * [SMX4-854] - add avalon-framework-api bundle
    * [SMX4-855] - create avalon-framework-impl bundle
    * [SMX4-863] - upgrade to jetty 7.4.2.v20110526
    * [SMX4-870] - ">>>> JavaDSL set body:" displayed but not noted in the Camel/OSGi example's README.txt file
    * [SMX4-871] - README.txt file incomplete for "simple" example in regards to the wsn.xml file.
    * [SMX4-877] - create wrap bundle for axiom API and Impl 1.2.12
    * [SMX4-882] - specify start-level as 50 for default installed jbi component features which ensure jbi component related bundle can get started before customer bundles when restart OSGi container
    * [SMX4-883] - Alter packaging options to better reflect common use cases
    * [SMX4-899] - xerces and xalan SPI factory package should be added in custom.properties org.osgi.framework.bootdelegation
    * [SMX4-900] - add camel-blueprint as default installed feature
    * [SMX4-910] - install activemq-web-console feature should work out of the box
    * [SMX4-911] - use system properties to define activemq url
    * [SMX4-923] - add activemq-spring feature to featuresBoot
    * [SMX4-924] - should ship servlet api 2.5 but not servlet api 3.0
    * [SMX4-931] - Sample project module elements are missing from top-level POM.
    * [SMX4-938] - features.xml should reuse jetty feature from karaf
    * [SMX4-939] - Refactor features build to be independent of NMR build
    * [SMX4-943] - Camel NMR producer is not registered with its keyName but using the UUID
    * [SMX4-956] - Monitor etc/activemq-broker.xml for changes
    * [SMX4-957] - Add a name attribute to the features descriptors
    * [SMX4-960] - extract servicemix-soap and servicemix-soap2 bundle into servicemix-shared feature
    * [SMX4-966] - Connection refused to embedded broker when starting up
    * [SMX4-978] - Upgrade to Camel 2.8.3
    * [SMX4-979] - add specs feature to featuresBoot list ensure the specs bundle are available in time
    * [SMX4-981] - Reorganize examples by technology
    * [SMX4-988] - should add delay to camel timer of  camel-nmr and camel-nmr-blueprint example so that the nmr endpoint get chance to create
    * [SMX4-989] - create demo using Camel and local ActiveMQ broker
    * [SMX4-998] - cleanup cxf related examples to remove unnecessary package/resource import and Required-Bundle
    * [SMX4-999] - enhance cxf-ws-security-osgi example to leverage cxf JAASLoginInterceptor to authenticate against karaf default jaas configuration
    * [SMX4-1002] - Use SLF4J instead of Java standard logging for CXF in SMX
    * [SMX4-1008] - let cxf-ws-rm example use http osgi transport

** New Feature
    * [SMX4-776] - Create OSGi bundle for Perf4j
    * [SMX4-786] - Add a struts2-core and struts-xwork bundles for SMX project
    * [SMX4-794] - Provide a convenience POM for users

** Task
    * [SMX4-752] - Switch to use slf4j as logger (instead of commons-logging)
    * [SMX4-770] - Update to Karaf 2.2.0
    * [SMX4-781] - Upgrade to Camel 2.7
    * [SMX4-785] - upgrade to cxf 2.3.3
    * [SMX4-795] - Update to CXF 2.4.0
    * [SMX4-816] - Create JBoss Netty 3.2.4 bundle
    * [SMX4-820] - Create Bundle for cometd java server 2.1.1
    * [SMX4-834] - upgrade karaf version to 2.2.1
    * [SMX4-851] - Velocity bundle - Add dynamic imports so the #parse macro can load the resource
    * [SMX4-856] - Upgrade to Java Mail 1.4.4
    * [SMX4-858] - Quartz 2.0.1 bundle
    * [SMX4-861] - upgrade to cxf 2.4.1
    * [SMX4-876] - Upgrade to Karaf 2.2.2
    * [SMX4-880] - Release Apache ServiceMix 4.4.0
    * [SMX4-881] - Upgrade to Groovy 1.8.0
    * [SMX4-887] - Upgrade to Quartz 1.8.5
    * [SMX4-888] - Upgrade to Camel 2.8.0
    * [SMX4-896] - upgrade to cxf 2.4.2
    * [SMX4-902] - upgrade to cxf 2.4.2
    * [SMX4-903] - upgrade to jetty 7.4.5.v20110725
    * [SMX4-905] - Create a scala 2.9.1 bundle
    * [SMX4-906] - upgrade xmlsec and opensaml bundle version
    * [SMX4-908] - Upgrade to Camel 2.8.1
    * [SMX4-912] - upgrade to spring-dm 1.2.1
    * [SMX4-916] - upgrade to cxf 2.4.4
    * [SMX4-942] - upgrade to spring 3.0.6
    * [SMX4-952] - upgrade axiom version to 1.2.12
    * [SMX4-961] - XStream 1.4.2 bundle
    * [SMX4-995] - use same version of jsr311 as cxf 2.4.4



                      Apache ServiceMix 4.3.0
                  ================================
 Overview
 --------

Apache ServiceMix 4.3.0 is a major release of the OSGi based ServiceMix ESB platform.  This release contains many
bugfixes and feature enhancements over the 4.2.0 release.  ServiceMix 4.3.0 includes the following dependencies:

- Apache Felix Karaf 2.1.3 (http://karaf.apache.org)
  A lightweight OSGi container built on top of Apache Felix OSGi framework.  Karaf provides much of the core OSGi
  functionality and features (SSH shell, console commands, provisioning, blueprint XML support, etc...)

- Apache ServiceMix NMR 1.4.0
  An OSGi based NMR and JBI container, with a new clustering engine ready for enterprise deployment

- Apache ServiceMix Components 2011.01
  OSGi and JBI compatible components for common integration bindings such as FTP, HTTP, JMS, etc. as well as
  service engines such as Camel (Enterprise Integration Patterns), Quartz, JSR-223 Scripting, etc.

ServiceMix 4.3.0 also ships with a web console for administering and deploying endpoints and components,
additional OSGi bundles, and configuration files.  We also include support for running outof the box web applications
via WAR file deployment.  This release includes preliminary implementations of the OSGi Enterprise Specification 4.2
and includes support for OSGi fragment bundles.  OSGi framework support defauls to Apache Felix, but can be changed
via a simple configuration paramater to use Eclipse Equinox.

 Java 1.5.0 support
 ------------------
To be able to run ServiceMix 4.3.0 using Java 1.5.0, you need to remove jaxp-ri-1.4.4.jar from the lib/endorsed folder.

 Changelog
 ---------
The following list shows the bug fixes and enhancements included in this release.

Release Notes - ServiceMix 4 - Version 4.3.0

** Sub-task
* [SMX4-543] - Improve Camel NMR component to leverage async camel routing

** Bug
* [SMX4-398] - openjpa bundle should import the transaction package without optional flag
* [SMX4-415] - need add josql bundle to activemq feature
* [SMX4-417] - calling <setHeader> with <groovy> expression can delete message and headers
* [SMX4-455] - activemq feature missing dependencies; fails to start two bundles without camel-cxf installed
* [SMX4-489] - ServiceMix 4.x/ Fuse 4.2 hangs when using command dev:show-tree
* [SMX4-519] - Allow configuring Camel NMR endpoint to bypass thread pool for handling exchanges
* [SMX4-520] - NMR Destination should check Exchange Status and Mep Pattern
* [SMX4-522] - Camel NMR component: reponse NMR message contains reference to itself in property
* [SMX4-527] - cxf nmr transport should copy over property headers and attachment between cxf message and nmr message
* [SMX4-530] - servicemix-vfs fails with sftp
* [SMX4-539] - Inconsistent use of Endpoint.INTERFACE_NAME in cxf nmr transport
* [SMX4-541] - Jetty bundles export package is not correct
* [SMX4-548] - remove javax.script package from config.properties for jre export package
* [SMX4-561] - Servicemix flatpack component is missing the default fpconvert.properties, causing NullPointerException
* [SMX4-564] - stacktrace dumped on console when shutdown smx
* [SMX4-578] - Ensure that SecuritySubject is properly conveyed by cxf-nmr transport
* [SMX4-581] - xpp3 bundle is missing META-INF/services/org.xmlpull.v1.XmlPullParserFactory needed to support zero configuation operation mode
* [SMX4-585] - incorrect MTOM message for NMR transport
* [SMX4-602] - Update Karaf jre package
* [SMX4-608] - Drools package doesn't export org.drools.runtime.rule
* [SMX4-648] - Camel NMR component does not propagate Exception when using an InOnly MEP
* [SMX4-649] - config:* commands not available out-of-the-box
* [SMX4-652] - camel example doesn't work
* [SMX4-674] - ActiveMQ 5.4.1 feature has a missing dependency
* [SMX4-706] - specify version for cxf-codegen-plugin in pluginManagement to avoid downloading latest snapshot cxf-codegen-plugin
* [SMX4-708] - NMR adds null header in Camel Exchange ?
* [SMX4-709] - Features pom contains duplicate dependency declaration
* [SMX4-711] - check Exception from Camel Exchange at very first place to honor asyn processor in camel 2.5
* [SMX4-720] - Several poms contain old JIRA URL
* [SMX4-729] - "Ather URL Handler not available" messages in the log file
* [SMX4-735] - Problem on install camel-cxf component for unresolved dependency org.apache.servicemix.specs/org.apache.servicemix.specs.jsr311-api_1.0/1.6.0
* [SMX4-739] - add nmr features.xml dependency to make the kit build pass
* [SMX4-748] - Improve logging policy to avoid impact on performances
* [SMX4-749] - JBI deployer version range is not up to date
* [SMX4-760] - JAXB API and implementation version mismatch in Camel features descriptor
* [SMX4-761] - cxf-osgi example miss a package import which cause it fail with felix
* [SMX4-763] - Remove examples/web from the distribution
* [SMX4-764] - Override Apache Felix Framework version to 3.0.8 in the distribution
* [SMX4-765] - ServiceMix doesn't start with Java 1.5.0

** Improvement
* [SMX4-512] - Upgrade to ActiveMQ 5.3.1
* [SMX4-523] - Use Camel Synchronization to ensure NMR exchange can be handled asynchronously
* [SMX4-531] - Update the jsmpp bundle to 2.1.0
* [SMX4-534] - Add quartz 1.8.1 bundle
* [SMX4-536] - Add Quartz 1.8.2 bundle
* [SMX4-538] - Add quartz 1.8.3 bundle
* [SMX4-544] - Update poms to not have warnings with Maven 3
* [SMX4-551] - upgrade to spring 3.x
* [SMX4-552] - Upgrade to ActiveMQ 5.4
* [SMX4-556] - Wrap the jaxb impl 2.1.13
* [SMX4-560] - Prepare the upgrade to ActiveMQ 5.4.0
* [SMX4-562] - Update flatpack to 3.2.0
* [SMX4-565] - Upgrade to Karaf 2.0.0
* [SMX4-567] - Normalize SMX4 naming convention of resources
* [SMX4-573] - Rome bundle should try to load the configure file from local bundle classloader as a fallback
* [SMX4-576] - Ensure that Subject is properly conveyed by camel-nmr component
* [SMX4-579] - extract common used classes for itests
* [SMX4-584] - Upgrade to the latest release of ServiceMix Bundles
* [SMX4-586] - The Camel examples uses @deprecated namespace
* [SMX4-588] - refactor NMRMessageHelper to use new api from cxf StaxUtis
* [SMX4-591] - Upgrade to ActveMQ 5.4.0
* [SMX4-592] - Add hibernate-validator 4.1.0.Final bundle
* [SMX4-598] - HSQLDB bundles.
* [SMX4-599] - Create drools-5.1.1 bundle with minimal set of dependencies
* [SMX4-600] - Create antlr-runtime 3.2 bundle
* [SMX4-601] - Upgrade to Karaf 2.1.0
* [SMX4-603] - Upgrade to Camel 2.5.0
* [SMX4-604] - Upgrade to CXF 2.2.11
* [SMX4-606] - Make the executors/threadpool viewable as JMX mbeans
* [SMX4-660] - Create OSGi wrap bundle for Jetty 6.1.25
* [SMX4-667] - Upgrade to JAXP 1.4.4
* [SMX4-673] - Upgrade to Karaf 2.1.1
* [SMX4-676] - Upgrade to Karaf 2.1.2
* [SMX4-689] - Upgrade to ActiveMQ 5.4.2
* [SMX4-710] - Add Camel NMR blueprint example
* [SMX4-713] - upgrade to cxf 2.3.1
* [SMX4-716] - Upgrade to SMX components 2010.02
* [SMX4-719] - Make camel-blueprint feature installed by default
* [SMX4-728] - Add a Camel blueprint example
* [SMX4-738] - remove org.apache.camel.osgi package import for camel-osgi example
* [SMX4-740] - JAXB-IMPL 2.1.13 Release
* [SMX4-741] - Upgrade to Karaf 2.1.3
* [SMX4-742] - Upgrade to Spring 3.0.5.RELEASE
* [SMX4-745] - Upgrade to Camel 2.6.0
* [SMX4-746] - Upgrade to CXF 2.3.2
* [SMX4-754] - Upgrade to ServiceMix Components 2011.01
* [SMX4-755] - Upgrade to ServiceMix NMR 1.4.0
* [SMX4-757] - Upgrade to Apache ODE 1.3.5
* [SMX4-766] - Upgrade to Felix Framework 3.0.9

** New Feature
* [SMX4-558] - Add a wrap bundle of xmlbeans 2.5.0
* [SMX4-559] - Add the wrap bundle of jsch-0.1.43
* [SMX4-590] - Create OSGi bundle for Jasypt 1.6
* [SMX4-614] - Documentation: Add a Getting Started Guide
* [SMX4-675] - Bundles for Mongo DB

** Task
* [SMX4-524] - upgrade to cxf 2.2.7
* [SMX4-528] - upgrade to cxf 2.2.8
* [SMX4-533] - upgrade to cxf 2.2.9
* [SMX4-542] - Upgrade to Camel 2.4.0
* [SMX4-545] - Update SMX to use aries version of blueprint and latest Felix/Karaf stuff that also uses aries
* [SMX4-547] - upgrade to use new karaf artifacts
* [SMX4-553] - Upgrade to google protobuf 2.3.0
* [SMX4-557] - Upgrade to Velocity 1.6.4
* [SMX4-563] - upgrade aries to 0.1-r964701
* [SMX4-574] - add commons-digester-1.8 bundle
* [SMX4-575] - add commons-configuration-1.4 bundle
* [SMX4-582] - upgrade to activemq 5.4
* [SMX4-587] - upgrade to cxf 2.2.10
* [SMX4-593] - Create Bundles for SIP API and RI.
* [SMX4-607] - downgrade geronimo-annotation version to 1.0 from 1.1
* [SMX4-613] - Create a wrap bundle dozer 5.3.0
* [SMX4-668] - Upgrade to MVEL 2.0.18
* [SMX4-671] - add scala 2.8.1 bundle
* [SMX4-672] - Create a wrap bundle for Jetty 6.1.26
* [SMX4-707] - Fix the camel-nmr failed unit tests

** Test
* [SMX4-554] - fix itests failure
* [SMX4-568] - add cxf mtom test
* [SMX4-650] - fix loan-broker-drools-su test failure
* [SMX4-651] - add osgi service property for itests test client

** Wish
* [SMX4-540] - Jetty bundle 6.1.24


See the README file for more general informations about ServiceMix 4.

Thanks you for downloading ServiceMix.  Enjoy !

The ServiceMix Team
http://servicemix.apache.org/team.html

