Modified:
websites/production/cxf/content/docs/application-server-specific-configuration-guide.html
==============================================================================
---
websites/production/cxf/content/docs/application-server-specific-configuration-guide.html
(original)
+++
websites/production/cxf/content/docs/application-server-specific-configuration-guide.html
Wed Sep 13 15:05:52 2017
@@ -32,9 +32,9 @@
<link type="text/css" rel="stylesheet"
href="/resources/highlighter/styles/shThemeCXF.css">
<script src='/resources/highlighter/scripts/shCore.js'></script>
-<script src='/resources/highlighter/scripts/shBrushJava.js'></script>
-<script src='/resources/highlighter/scripts/shBrushXml.js'></script>
<script src='/resources/highlighter/scripts/shBrushBash.js'></script>
+<script src='/resources/highlighter/scripts/shBrushXml.js'></script>
+<script src='/resources/highlighter/scripts/shBrushJava.js'></script>
<script>
SyntaxHighlighter.defaults['toolbar'] = false;
SyntaxHighlighter.all();
@@ -119,11 +119,11 @@ Apache CXF -- Application Server Specifi
<!-- Content -->
<div class="wiki-content">
<div id="ConfluenceContent"><p>This document provides app server-specific
configuration information for running Apache CXF.</p><p><style
type="text/css">/*<![CDATA[*/
-div.rbtoc1505311208404 {padding: 0px;}
-div.rbtoc1505311208404 ul {list-style: disc;margin-left: 0px;padding-left:
20px;}
-div.rbtoc1505311208404 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1505314843242 {padding: 0px;}
+div.rbtoc1505314843242 ul {list-style: disc;margin-left: 0px;padding-left:
20px;}
+div.rbtoc1505314843242 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style></p><div class="toc-macro rbtoc1505311208404">
+/*]]>*/</style></p><div class="toc-macro rbtoc1505314843242">
<ul class="toc-indentation"><li><a shape="rect"
href="#ApplicationServerSpecificConfigurationGuide-JBossApplicationServer">JBoss
Application Server</a></li><li><a shape="rect"
href="#ApplicationServerSpecificConfigurationGuide-SpringBoot">SpringBoot</a></li><li><a
shape="rect"
href="#ApplicationServerSpecificConfigurationGuide-WebLogic">WebLogic</a>
<ul class="toc-indentation"><li><a shape="rect"
href="#ApplicationServerSpecificConfigurationGuide-Putjarsinendorsedfolder">Put
jars in endorsed folder</a></li><li><a shape="rect"
href="#ApplicationServerSpecificConfigurationGuide-Packwarinanear,deploytheearwithweblogic-application.xml">Pack
war in an ear, deploy the ear with weblogic-application.xml</a></li></ul>
</li><li><a shape="rect"
href="#ApplicationServerSpecificConfigurationGuide-Websphere">Websphere</a>
@@ -140,7 +140,7 @@ div.rbtoc1505311208404 li {margin-left:
</li></ul>
</li><li><a shape="rect"
href="#ApplicationServerSpecificConfigurationGuide-IntegrationwithApplicationServerFAQ">Integration
with Application Server FAQ</a></li><li><a shape="rect"
href="#ApplicationServerSpecificConfigurationGuide-Resources">Resources</a></li></ul>
</div><h2
id="ApplicationServerSpecificConfigurationGuide-JBossApplicationServer">JBoss
Application Server</h2><p>JBoss Application Server (JBoss AS) comes with its
own webservices stack (JBossWS) in order for providing full JavaEE support.<br
clear="none"> Starting from JBoss AS 6 M4, the default webservices stack is
internally based on Apache CXF; as a consequence users might experiment
classloading issues with classes from both the CXF libraries and its
dependencies if included in deployments and not properly isolated. Please refer
to the relevant JBoss AS documentation for details on how to turn on
classloading isolation on the application server version in use.</p><p>In
particular, when willing to run Apache CXF based applications on top of JBoss
AS 7 series, users have basically two options:</p><ul><li><p>use JBoss AS as if
it was a servlet container with no WS functionalities: this basically implies
disabling the webservices subsystem for the user deployment, hence preventing
the AS webservices stack from processing the ws endpoint deployment and
letting the CXF libs included in the archive deal with any WS invocations when
CXFServlet is hit; the webservices subsystem is turned off by adding a
jboss-deployment-structure.xml as follows to the ws endpoint
deployment:</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;"><jboss-deployment-structure
xmlns="urn:jboss:deployment-structure:1.2">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"><jboss-deployment-structure
xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
<exclude-subsystems>
<subsystem name="webservices" />
@@ -149,7 +149,7 @@ div.rbtoc1505311208404 li {margin-left:
</jboss-deployment-structure>
</pre>
</div></div><p>this approach offers the fastest route to deploying CXF apps on
JBoss AS; the drawback is that no special ws integration with JBoss AS
internals is available</p></li></ul><ul><li>rely on JBossWS integration and the
Apache CXF libraries included in the application server (<a shape="rect"
class="external-link"
href="https://docs.jboss.org/author/display/AS71/Webservices+reference+guide"
rel="nofollow">documentation</a>): this implies removing any Apache CXF libs
from the ws deployment as well as any other dependencies which is already
included in JBoss AS (including any Java EE API jar); if included, the optional
web.xml descriptor is to be rewritten according to JBossWS convention (see <a
shape="rect" class="external-link"
href="https://docs.jboss.org/author/display/AS71/JAX-WS+User+Guide"
rel="nofollow">documentation</a>); the Spring support is optional in JBoss AS
and Spring based endpoint declaration is not the default/preferred
configuration approach for ws endpoin
ts, hence users willing to declare endpoints using Spring needs to create a
org.springframework.spring module and put their endpoint declarations in a
jbossws-cxf.xml descriptor; if the user application makes use of any lib
besides tha JavaEE api, proper module <a shape="rect" class="external-link"
href="https://docs.jboss.org/author/display/AS71/Class+Loading+in+AS7"
rel="nofollow">dependencies</a> are to be declared either using the
jboss-deployment-structure.xml descriptor or the archive MANIFEST.MF (few
directions on ws modules available <a shape="rect" class="external-link"
href="https://docs.jboss.org/author/display/AS71/JBoss+Modules+and+WS+applications"
rel="nofollow">here</a>)</li></ul><p>The second approach allows leveraging the
full JavaEE 6 stack (including e.g. JSR-109) as well as specific ws integration
with JBoss AS internals.</p><h2
id="ApplicationServerSpecificConfigurationGuide-SpringBoot">SpringBoot</h2><p>Please
see CXF <a shape="rect" href="springboot.html">Spri
ngBoot</a> documentation.</p><p>JAX-WS: see <a shape="rect"
class="external-link"
href="https://github.com/apache/cxf/tree/master/distribution/src/main/release/samples/jaxws_spring_boot"
rel="nofollow">JAX-WS Spring Boot</a> demo.</p><p>JAX-RS:
 see <a shape="rect" class="external-link"
href="https://github.com/apache/cxf/tree/master/distribution/src/main/release/samples/jax_rs/spring_boot"
rel="nofollow">JAX-RS Spring Boot</a> and <a shape="rect"
class="external-link"
href="https://github.com/apache/cxf/tree/master/distribution/src/main/release/samples/jax_rs/spring_boot_scan"
rel="nofollow">JAX-RS Spring Boot Scan</a> demos.</p><h2
id="ApplicationServerSpecificConfigurationGuide-WebLogic">WebLogic</h2><p>There
are two ways to deploy a CXF WAR archive in WebLogic. (<strong>Note: This has
been validated on WebLogic9.2.</strong>)</p><h4
id="ApplicationServerSpecificConfigurationGuide-Putjarsinendorsedfolder">Put
jars in endorsed folder</h4><ul><li>P
ut the geronimo-ws-metadata_2.0_spec-1.1.1.jar in the
$Weblogic_Home/jdk_../jre/lib/endorsed folder.</li><li>Deploy the CXF war in
weblogic.<br clear="none"> (This way is not recommended, since it might break
the application server itself. The method below is preferred, as it impacts a
single module only.)</li></ul><h4
id="ApplicationServerSpecificConfigurationGuide-Packwarinanear,deploytheearwithweblogic-application.xml">Pack
war in an ear, deploy the ear with
weblogic-application.xml</h4><ul><li><p>Create a standard J2EE application.xml
file in the META-INF folder. (Take $CXF_HOME/samples/java_first_spring_support
for example)</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;"><?xml version="1.0" encoding="UTF-8"?>
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application PUBLIC
"-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN"
"http://java.sun.com/dtd/application_1_3.dtd">
@@ -164,7 +164,7 @@ div.rbtoc1505311208404 li {margin-left:
</application>
</pre>
</div></div></li></ul><ul><li><p>Create a weblogic-application.xml (Weblogic
specific) in the META-INF folder.</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;"><?xml version="1.0" encoding="UTF-8"?>
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"><?xml version="1.0" encoding="UTF-8"?>
<weblogic-application xmlns="http://www.bea.com/ns/weblogic/90">
<application-param>
<param-name>webapp.encoding.default</param-name>
@@ -176,7 +176,7 @@ div.rbtoc1505311208404 li {margin-left:
</weblogic-application>
</pre>
</div></div></li></ul><p>The prefer-application-packages element you see above
sets up WebLogic's <a shape="rect" class="external-link"
href="http://e-docs.bea.com/wls/docs100/programming/classloading.html#wp1097187"
rel="nofollow">Filtering Classloader</a>. Each class whose package matches one
of the package-name elements listed will be searched for first within the EAR
before relying on the WebLogic system classloader's version. If a package for a
particular class is not listed here, WebLogic will try to load its own
(possibly older) version first, so if you are getting deployment errors due to
any particular class you might wish to add its package here.</p><p>Also note
you can, and may need to, specify other options in the weblogic-application.xml
file such as XML processing factories as shown <a shape="rect"
class="external-link"
href="http://cxf.547215.n5.nabble.com/Getting-error-while-deploying-on-weblogic-9-2-but-able-to-do-in-tomcat-td554060.html#a554061"
rel="nofollow">here
</a>. See the WebLogic <a shape="rect" class="external-link"
href="http://download.oracle.com/docs/cd/E12840_01/wls/docs103/programming/app_xml.html#wp1064995"
rel="nofollow">guide</a> for more information.</p><ul><li>Run "jar cvf ..."
command to create the ear and then deploy it. Alternatively, this <a
shape="rect" class="external-link"
href="http://www.jroller.com/gmazza/entry/deploying_webservices_on_weblogic"
rel="nofollow">blog entry</a> provides a Mavenized method of building the
EAR.</li></ul><h2
id="ApplicationServerSpecificConfigurationGuide-Websphere">Websphere</h2><h3
id="ApplicationServerSpecificConfigurationGuide-ForWebSphereVersions<6.1.0.29">For
WebSphere Versions < 6.1.0.29</h3><p>Adding jars to the 'endorsed' folder
appears to be the main solution:</p><h4
id="ApplicationServerSpecificConfigurationGuide-NoWebServicesFeaturePackforWebSphereinstalled">No
Web Services Feature Pack for WebSphere installed</h4><h5
id="ApplicationServerSpecificConfigurationGuide-putj
arintheendorsedfolder">put jar in the endorsed folder</h5><ul><li>put the
wsdl4j-1.6.1.jar in the $WebSphere_HOME/java/jre/lib/endorsed
folder.</li><li>In the WebSphere console, find the specific enterprise
application, click the "Class loading and update detection".<ul><li>Mark the
"Classes loaded with application class loader first" selected.</li><li>Mark the
"Class loader for each war file in application"
selected.</li></ul></li></ul><p>And then restart the Websphere server. (Because
we changed the endorsed folder, we need to restart it to make it take
effect).</p><div class="confluence-information-macro
confluence-information-macro-tip"><span class="aui-icon aui-icon-small
aui-iconfont-approve confluence-information-macro-icon"></span><div
class="confluence-information-macro-body"><p>Please make sure your classpath
doesn't have the servlet-2.5 library, since WebSphere6.1 is servlet-2.4
compliant!</p></div></div><h5
id="ApplicationServerSpecificConfigurationGuide-Addyourownclassl
oader">Add your own class loader</h5><p>If you put your wsdl4j-1.6.1 jar in
$WAS_HOME/java/jre/lib/endorsed, all your applications will depend on your
version of wsdl4j. Another solution is to create a new class loader in your
server which loads before parent class loader, create a shared library with
your version of wsdl4j, and add this shared library to your new class loader.
This version of wsdl4j will only be available for your specific server and not
affect applications running in other servers.</p><p><strong>Step by
step</strong></p><ol><li>In the WAS console navigate to <strong>Environment
> Shared Libraries</strong></li><li>Select the scope you wish your library
should be visible in</li><li>Click <strong>New</strong> and set values ex:
<code>name=MYAPP_SHARED_LIB, classpath=PATH_TO/wsdl4j-1.6.2.jar</code> and
<strong>Save</strong></li><li>Navigate to <strong>Application servers >
[your server name]</strong> <strong>> Java and Process Management > Class
loader >
; New</strong></li><li>Select <strong>Classes loaded with application class
loader first</strong> and <strong>Save</strong></li><li>Select your new class
loader and click <strong>Shared library references</strong></li><li>Add your
shared library (MYAPP_SHARED_LIB) <strong>Save</strong> and restart your
server.</li></ol><p>Tested in WAS 6.1 only but should work in earlier versions
as well.</p><p>Another user running WS6.1 FP 23 without the web services
feature pack came up with this solution that seemed to work for
them:</p><blockquote><p>Create a shared library with the following jars:<br
clear="none"> jsr173_api-1.0.jar<br clear="none"> jaxp-ri-1.4.2.jar<br
clear="none"> saaj-impl-1.3.2.jar<br clear="none">
wsdl4j-1.6.2.jar</p><p>Create a new parent-first classloader and have it
reference the shared library you just created. Restart everything and it should
work.</p></blockquote><h4
id="ApplicationServerSpecificConfigurationGuide-WebServicesFeaturePackforWebSphereInstalled">Web
Ser
vices Feature Pack for WebSphere Installed</h4><p>Things are way more
complicated if the Web Services Feature Pack for WebSphere is installed. With
this feature pack installed, it is impossible to deploy an application using
CXF, because the WebSphere Web Services engine starts parsing the JAX-WS
annotations of the services and tries to deploy the services.</p><p>Up to
fixpack 27 (6.1.0.27) there was no possibility to disable the WebSphere Web
Services engine.</p><h3
id="ApplicationServerSpecificConfigurationGuide-ForWebSphere6.1.0.29+,V7andV8">For
WebSphere 6.1.0.29+, V7 and V8</h3><p>Follow the PDF download given within
this IBM developerWorks article:<a shape="rect" class="external-link"
href="http://www.ibm.com/developerworks/websphere/library/techarticles/1001_thaker/1001_thaker.html"
rel="nofollow">http://www.ibm.com/developerworks/websphere/library/techarticles/1001_thaker/1001_thaker.html</a></p><p>As
described in the PDF, you'll need to change the Classloader order to "Clas
ses loaded with local class loader first (parent last)" and to disable the IBM
web services engine, either for the JVM as a whole or for the particular
module.</p><p>To disable for the whole JVM, set the JVM
property</p><p>com.ibm.websphere.webservices.DisableIBMJAXWSEngine=true</p><p>or
to disable the engine just for a specific module by
adding</p><p>DisableIBMJAXWSEngine: true</p><p>to
WAR/META-INF/MANIFEST.MF.</p><p>Another issue that comes up with certain
versions of WebSphere is an incompatibility with the SAAJ implementation. It is
recommended to use the org.apache.servicemix.bundles.saaj-impl-1.3.18_1.jar
saaj impl available from <a shape="rect" class="external-link"
href="http://repo1.maven.org/maven2/org/apache/servicemix/bundles/org.apache.servicemix.bundles.saaj-impl/1.3.18_1/"
rel="nofollow">http://repo1.maven.org/maven2/org/apache/servicemix/bundles/org.apache.servicemix.bundles.saaj-impl/1.3.18_1/</a>
as that contains a recent version of SAAJ along with it's required D
OM implementation which will work on the IBM JDK.</p><p>One user has reported
that he was able to get CXF working on WebSphere with a minimal set of CXF jars
by following the above<br clear="none"> procedures and using the list of
jars:</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;">FastInfoset-1.2.9.jar
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">FastInfoset-1.2.9.jar
aopalliance-1.0.jar
commons-logging-1.1.1.jar
cxf-2.5.2.jar
@@ -204,7 +204,7 @@ wsdl4j-1.6.2.jar
xmlschema-core-2.0.1.jar
</pre>
</div></div><h2
id="ApplicationServerSpecificConfigurationGuide-Glassfish">Glassfish</h2><p>CXF
Interceptors will not work in Glassfish without this sun-web.xml file to
configure the classloader. By default, Glassfish will use Metro for JAX-WS
services so the classloader needs to be configured to allow CXF libraries to
provide JAX-WS services. The following sun-web.xml xml source was added to
/WEB-INF to resolve this issue:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;"><?xml version="1.0" encoding="UTF-8"?>
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-web-app PUBLIC '-//Sun Microsystems, Inc.//DTD
Application Server 9.0 Servlet 2.5//EN'
'http://www.sun.com/software/appserver/dtds/sun-web-app_2_5-0.dtd'>
@@ -213,7 +213,7 @@ Application Server 9.0 Servlet 2.5//EN'
</sun-web-app>
</pre>
</div></div><h2
id="ApplicationServerSpecificConfigurationGuide-OC4J">OC4J</h2><div
class="confluence-information-macro confluence-information-macro-note"><span
class="aui-icon aui-icon-small aui-iconfont-warning
confluence-information-macro-icon"></span><div
class="confluence-information-macro-body"><p>This guide requires heavy
customization of the OC4J configuration. Bear in mind that some of steps
presented below are either undocumented or unsupported. We strongly advice you
to perform those steps in a separate container, dedicated exclusively for
CXF.</p></div></div><div class="confluence-information-macro
confluence-information-macro-note"><span class="aui-icon aui-icon-small
aui-iconfont-warning confluence-information-macro-icon"></span><div
class="confluence-information-macro-body"><p>Also see: <a shape="rect"
class="external-link"
href="http://chadthedeveloper.blogspot.com/2008/06/cxf-vs-oc4j-round-1.html"
rel="nofollow">http://chadthedeveloper.blogspot.com/2008/06/cxf-vs-oc
4j-round-1.html</a> for other suggestions on how to configure
OC4J.</p></div></div><h3
id="ApplicationServerSpecificConfigurationGuide-Disclaimer">Disclaimer</h3><p>This
guide covers only 10.1.3.X.X version of OC4J. Note that OC4J 10.1.2 is not JSE
1.5 certified server. OC4J 11_g_ is <a shape="rect" class="external-link"
href="http://java.sun.com/javaee/overview/compatibility.jsp"
rel="nofollow">fully JEE 5.0 certified stack</a> and comes with their own
JAX-WS implementation.</p><h3
id="ApplicationServerSpecificConfigurationGuide-Background">Background</h3><p>Oracle
OC4J comes with highly customized XML stack by Oracle including SAX, StAX,
JAXP, JAX-WS, SAAJ, WSDL and few others. All of those frameworks are Oracle
proprietary implementations in the OC4J distribution. This gives Oracle really
good interoperability between their products but it makes it rather hard to
introduce something which needs different implementation of above APIs (like
CXF).</p><div class="confluence-informati
on-macro confluence-information-macro-tip"><span class="aui-icon
aui-icon-small aui-iconfont-approve
confluence-information-macro-icon"></span><div
class="confluence-information-macro-body"><p><span
class="confluence-anchor-link"
id="ApplicationServerSpecificConfigurationGuide-orajaxws"></span><br
clear="none"> OC4J 10.1.3 comes with <a shape="rect" class="external-link"
href="http://www.oracle.com/technology/tech/java/oc4j/10131/OracleAS-NF-10131.pdf"
rel="nofollow">preliminary implementation of JAX-WS (JSR-181)</a> but this
implementation is somewhat limited only to top-down scenario, with very limited
customization (lack of JAXB 2.0 etc.).</p></div></div><h4
id="ApplicationServerSpecificConfigurationGuide-Configurationoverview">Configuration
overview</h4><p>A few components need to be customized in OC4J to allow CFX
integration:</p><ul><li><a shape="rect" class="external-link"
href="http://xerces.apache.org/xerces2-j/">Xerces</a></li><li>JAX-WS 2.0
APIs</li><li><a shape="rect" cl
ass="external-link" href="http://sourceforge.net/projects/wsdl4j"
rel="nofollow">WSDL4J</a></li></ul><p>Unfortunately, these components have to
be configured in different parts of OC4J.</p><h4
id="ApplicationServerSpecificConfigurationGuide-OracleOC4Jclassloading">Oracle
OC4J class loading</h4><p>A key part of successfully integrating CXF into OC4J
is to understand how class loaders work in OC4J. When starting OC4J there are
generally three stages where customization could occur:</p><ol><li>Virtual
Machine boot</li><li>OC4J boot</li><li>CXF (application)
boot</li></ol><p>Customizing in the last step is <a shape="rect"
class="external-link"
href="http://download-uk.oracle.com/docs/cd/B25221_03/web.1013/b14433/classload.htm"
rel="nofollow">quite easy to achieve</a> - basically OC4J has quite powerful
class loader and an easy customization console. Unfortunately there are some
components that could not be configured this way. They are configured during
OC4J boot. Unfortunately one of t
his is OC4J webservices stack (located in
<code>$ORACLE_HOME/webservices/lib</code>).</p><h4
id="ApplicationServerSpecificConfigurationGuide-Neededcomponents">Needed
components</h4><p>Before start please download <a shape="rect"
href="http://cxf.apache.org/download.html">Apache CXF 2.0.6 or better</a> and
<a shape="rect" class="external-link"
href="http://archive.apache.org/dist/xml/xerces-j/">Xerces 2.8.1</a></p><h4
id="ApplicationServerSpecificConfigurationGuide-Preparingstax-api">Preparing
stax-api</h4><p>If you use a version of CXF that includes stax-api.jar that in
turn include the QName class, remove <code>javax.xml.namespace.QName</code>
from the stax-api shipped with CXF. Oracle apparently has it already in
<code>$ORACLE_HOME/j2ee/home/lib/jax-qname-namespace.jar</code>.</p><p><span
class="confluence-anchor-link"
id="ApplicationServerSpecificConfigurationGuide-xerces"></span></p><h4
id="ApplicationServerSpecificConfigurationGuide-ReplacetheOracleXMLparserwithXerces">Replace
the Oracle XML parser with Xerces</h4><p>The basic idea behind how to do this
is described in detail <a shape="rect" class="external-link"
href="http://www.oracle.com/technology/tech/java/oc4j/1013/how_to/how-to-swapxmlparser/doc/readme.html"
rel="nofollow">here</a></p><p>Create OC4J shared library named
<code>cxf.foundation</code> and fill it with:</p><ul><li>xercesImpl.jar (from
Xerces distribution)</li><li>xml-apis-1.2.02.jar (from
CXF-distribution)</li><li>xalan-2.7.0.jar
(ditto)</li><li><p>geronimo-ws-metadata_2.0_spec-1.1.1.jar (ditto)</p><div
class="confluence-information-macro confluence-information-macro-note"><span
class="aui-icon aui-icon-small aui-iconfont-warning
confluence-information-macro-icon"></span><div
class="confluence-information-macro-body"><p>When building Your application
<strong>DO NOT INCLUDE THOSE COMPONENTS</strong>
again.</p></div></div></li></ul><h4
id="ApplicationServerSpecificConfigurationGuide-GetridofOC4JJAX-WSlibraries">Get
rid of OC4J JAX-WS libr
aries</h4><p>OC4J has <a shape="rect"
href="application-server-specific-configuration-guide.html">preliminary support
for JAX-WS</a>, unfortunately this means that during OC4J boot it loads
<em>outdated</em> JAX-WS APIs and implementation by Oracle. This occurs even
before shared libraries comes into action, at a very early stage of OC4J boot.
Boot-time OC4J libraries are configured in <code>boot.xml</code> file in
<code>$ORACLE_HOME/j2ee/home/oc4j.jar</code> bootstrap jar. To get rid of
this:</p><ul><li>unpack <code>oc4j.jar</code> file</li><li>locate
<code>META-INF/boot.xml</code> file and edit it</li><li>find
section</li></ul><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;"><!-- WS jax-rpc -->
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"><!-- WS jax-rpc -->
<code-source path="${oracle.home}/webservices/lib/jaxr-api.jar"/>
<code-source
path="${oracle.home}/webservices/lib/jaxrpc-api.jar"/>
<code-source path="${oracle.home}/webservices/lib/jaxb-api.jar"/>
@@ -221,7 +221,7 @@ Application Server 9.0 Servlet 2.5//EN'
<code-source path="${oracle.home}/webservices/lib/jws-api.jar"
if="java.specification.version == /1\.[5-6]/"/>
</pre>
</div></div><p>and comment out line which include <code>jws-api.jar</code>
entry, like below</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;"><!-- <code-source
path="${oracle.home}/webservices/lib/jws-api.jar"
if="java.specification.version == /1\.[5-6]/"/> -->
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"><!-- <code-source
path="${oracle.home}/webservices/lib/jws-api.jar"
if="java.specification.version == /1\.[5-6]/"/> -->
</pre>
</div></div><ul><li>repackage <code>oc4j.jar</code> (don't forget about
<code>MANIFEST.MF</code> - use <code>jar -m
META-INF/MANIFEST.MF</code>)</li></ul><p><span class="confluence-anchor-link"
id="ApplicationServerSpecificConfigurationGuide-wsdl4j"></span></p><h4
id="ApplicationServerSpecificConfigurationGuide-swappingOraclewsdl.jarwithwsdl4j.jarandjaxb.jarAPIwithjaxb-api-2.0.jar">swapping
Oracle <code>wsdl.jar</code> with <code>wsdl4j.jar</code> and
<code>jaxb.jar</code> API with
<code>jaxb-api-2.0.jar</code></h4><p>Additionally Oracle provides it's own
implementation of WSDL functionality which conflicts with
<code>wsdl4j.jar</code>. To get rid of this add
<code>-Xbootclasspath/p:"<path to wsdlj>/wsdl4j-1.6.1.jar;<path to
jaxb2>/jaxb-api-2.0.jar"</code> option to JVM parametrs (either in command
line running OC4J standalone or in OPMN).</p><h4
id="ApplicationServerSpecificConfigurationGuide-Deployingapplications">Deploying
applications</h4><p>When deploying please fol
low those steps:</p><ul><li>Edit deployment plan</li><li>Edit <code>Configure
class loading</code> in the deployment plan like described <a shape="rect"
class="external-link"
href="http://www.oracle.com/technology/tech/java/oc4j/1013/how_to/how-to-swapxmlparser/doc/readme.html"
rel="nofollow">here</a></li><li><strong>Uncheck</strong>
<code><strong>oracle.xml</strong></code> library</li><li><strong>Check</strong>
<code><strong>cxf.foundation</strong></code>
library</li><li><strong>Uncheck</strong> <code><strong>Search Local Classes
First</strong></code></li><li><p>do not include <code>xercesImpl</code>,
<code>xml-apis</code>, <code>xalan</code> and
<code>geronimo-ws-metadata_2.0_spec-1.1.1.jar</code> in <code>war</code> -
those will be automatically loaded by by OC4J Shared Libraries class
loader.</p><div class="confluence-information-macro
confluence-information-macro-tip"><span class="aui-icon aui-icon-small
aui-iconfont-approve confluence-information-macro-icon"></span><div class=
"confluence-information-macro-body"><p>You can automate above steps by
packaging You <code>war</code> into <code>ear</code> archive (even though) if
it's only <code>war</code> and providing <code>orion-application.xml</code>
proprietary descriptor as described <a shape="rect" class="external-link"
href="http://download-west.oracle.com/docs/cd/B32110_01/web.1013/b28952/classload.htm#CIHIHDEG"
rel="nofollow">here</a>. You could also provide proprietary
<code>orion-web.xml</code> in Your <code>war</code> instrumenting <code>Search
Local Classes First</code> attribute described above. This step is described <a
shape="rect" class="external-link"
href="http://www.oracle.com/technology/tech/java/oc4j/htdocs/how-to-servlet-sysclassloader.html"
rel="nofollow">here</a>.</p></div></div></li></ul><h4
id="ApplicationServerSpecificConfigurationGuide-OracleFAQ">Oracle FAQ</h4><h5
id="ApplicationServerSpecificConfigurationGuide-I'mgettingjava.lang.ClassCastException:org.apache.xerces.jaxp.DocumentB
uilderFactoryImpl">I'm getting <code>java.lang.ClassCastException:
org.apache.xerces.jaxp.DocumentBuilderFactoryImpl</code></h5><p>This primarily
happens when:</p><ul><li>xerces is loaded twice - by shared library class
loader and application class loader</li><li>or when there is mismatch between
<code>xerces</code> and <code>oracle</code> implementation of SAX
API</li></ul><p>Please be sure You properly installed and enabled for Your
application <code>cxf.foundation</code> shared library as described <a
shape="rect"
href="application-server-specific-configuration-guide.html">here</a>. If Yes
please be sure that You didn't include xercesImpl.jar in Your <code>war</code>.
If You still have problems please <a shape="rect" class="external-link"
href="http://java.sun.com/javase/6/docs/api/javax/xml/parsers/SAXParserFactory.html#newInstance()"
rel="nofollow">see how You can debug JAXP problems</a> - be sure that
<code>org.apache.xerces.jaxp.DocumentBuilderFactoryImpl</code> are instantia
ted from within <code>JAXP</code> and not
<code>oracle.xml.parser.v2.DocumentBuilder</code>.</p><p><span
class="confluence-anchor-link"
id="ApplicationServerSpecificConfigurationGuide-f2"></span></p><h5
id="ApplicationServerSpecificConfigurationGuide-IcannotgetWSDL(gettingHTTP500accesingmyCXFserviceWSDLwithhttp://myshot/myservice?wsdl)">I
cannot get WSDL (getting HTTP 500 accesing my CXF service WSDL with <a
shape="rect" class="external-link" href="http://myshot/myservice?wsdl"
rel="nofollow">http://myshot/myservice?wsdl</a>)</h5><p>Please be sure that
<code>wsdl4j.jar</code> is loaded before <code>wsdl.jar</code> as described <a
shape="rect"
href="application-server-specific-configuration-guide.html">here</a></p><h5
id="ApplicationServerSpecificConfigurationGuide-I'mgettingjava.lang.NoSuchMethodException:oracle.j2ee.ws.wsdl.extensions.soap.SOAPBodyImpl.getElementType()">I'm
getting <code>java.lang.NoSuchMethodException:
oracle.j2ee.ws.wsdl.extensions.soap.SOAPBodyImpl.getElementTyp
e()</code></h5><p><a shape="rect"
href="application-server-specific-configuration-guide.html">See this</a></p><h5
id="ApplicationServerSpecificConfigurationGuide-Icannotgetittoworkstill">I
cannot get it to work still</h5><p>Try something simple. Download OC4J
standalone and bootstrap it from command line directly: <code>java [options]
-jar oc4j.jar</code>. Enable <a shape="rect" class="external-link"
href="http://java.sun.com/javase/6/docs/api/javax/xml/parsers/SAXParserFactory.html#newInstance()"
rel="nofollow">SAX debugging</a>. Be sure You don't include douplicated jars
in Your application like <code>xercesImpl, xalan, xml-apis and
geronimo-ws-metadata_2.0_spec-1.1.1.jar</code>. Review steps above once more.
It works <img class="emoticon emoticon-wink"
src="https://cwiki.apache.org/confluence/s/en_GB/5997/6f42626d00e36f53fe51440403446ca61552e2a2.1/_/images/icons/emoticons/wink.png"
data-emoticon-name="wink" alt="(wink)"> .</p><h2
id="ApplicationServerSpecificConfigurationGuide-In
tegrationwithApplicationServerFAQ">Integration with Application Server
FAQ</h2><p>1.<br clear="none"> Q: I have this error:
javax.xml.ws.WebServiceException: Cannot create SAAJ factory instance.<br
clear="none"> A: Please make sure you have the saaj-impl-1.3.jar in the
classpath and make sure your app picks up this one instead of weblogic
one.</p><h2
id="ApplicationServerSpecificConfigurationGuide-Resources">Resources</h2><p><a
shape="rect" class="external-link"
href="http://download-uk.oracle.com/docs/cd/B25221_03/web.1013/b14433/classload.htm"
rel="nofollow">Utilizing the OC4J Class Loading Framework</a><br clear="none">
<a shape="rect" class="external-link"
href="http://xfire.codehaus.org/XFire+on+WebLogic+9.2" rel="nofollow">Deploy
XFire in WebLogic</a><br clear="none"> <a shape="rect" class="external-link"
href="http://edocs.bea.com/wls/docs92/programming/classloading.html"
rel="nofollow">Understanding WebLogic ClassLoader</a><br clear="none"> <a
shape="rect" class="external-li
nk" href="http://www.jboss.org/wiki/Wiki.jsp?page=ClassLoadingConfiguration"
rel="nofollow">JBoss Class Configuration</a><br clear="none"> <a shape="rect"
class="external-link"
href="http://java.sun.com/javase/6/docs/api/javax/xml/parsers/SAXParserFactory.html#newInstance()"
rel="nofollow">Troubleshooting SAX</a></p></div>
</div>
Modified: websites/production/cxf/content/docs/architectural-decisions.html
==============================================================================
--- websites/production/cxf/content/docs/architectural-decisions.html (original)
+++ websites/production/cxf/content/docs/architectural-decisions.html Wed Sep
13 15:05:52 2017
@@ -110,11 +110,11 @@ Apache CXF -- Architectural Decisions
<div id="ConfluenceContent"><p><strong>work in progresss</strong></p>
<style type="text/css">/*<![CDATA[*/
-div.rbtoc1505311214236 {padding: 0px;}
-div.rbtoc1505311214236 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1505311214236 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1505314845706 {padding: 0px;}
+div.rbtoc1505314845706 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1505314845706 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style><div class="toc-macro rbtoc1505311214236">
+/*]]>*/</style><div class="toc-macro rbtoc1505314845706">
<ul class="toc-indentation"><li><a shape="rect"
href="#ArchitecturalDecisions-DecisionProcess">Decision Process</a></li><li><a
shape="rect"
href="#ArchitecturalDecisions-Howtodocumentarchitecturaldecisions">How to
document architectural decisions</a>
<ul class="toc-indentation"><li><a shape="rect"
href="#ArchitecturalDecisions-Template:Shortonelinesummaryofthedecision">Template:
Short one line summary of the decision</a>
<ul class="toc-indentation"><li><a shape="rect"
href="#ArchitecturalDecisions-Reasonsforthedecision">Reasons for the
decision</a></li><li><a shape="rect"
href="#ArchitecturalDecisions-Alternatives">Alternatives</a>
Modified:
websites/production/cxf/content/docs/asynchronous-client-http-transport.html
==============================================================================
---
websites/production/cxf/content/docs/asynchronous-client-http-transport.html
(original)
+++
websites/production/cxf/content/docs/asynchronous-client-http-transport.html
Wed Sep 13 15:05:52 2017
@@ -117,14 +117,14 @@ Apache CXF -- Asynchronous Client HTTP T
<!-- Content -->
<div class="wiki-content">
<div id="ConfluenceContent"><h1
id="AsynchronousClientHTTPTransport-AsynchronousClientHTTPTransport">Asynchronous
Client HTTP Transport</h1><p>By default, CXF uses a transport based on the
in-JDK HttpURLConnection object to perform HTTP requests. The HttpURLConnection
object uses a blocking model for all IO operations which requires a per-thread
execution model. From a pure performance standpoint, this model generally
performs very well, but it does have problems scaling when many requests need
to be executed simultaneously.</p><p>Also, the JAX-WS specification allows for
generation of asynchronous methods on generated proxies as well as using
asynchronous methods on the Dispatch objects. These methods can take an
AsyncHandler object and return a polling Future object so applications do not
have to wait for the response. With the HttpURLConnection based transport, CXF
was forced to consume a background thread for each outstanding
request.</p><p>CXF also has an HTTP client transport
that is based on the <a shape="rect" class="external-link"
href="http://hc.apache.org/httpcomponents-asyncclient-dev/index.html">Apache
HTTP Components HttpAsyncClient</a> library. Its Maven artifactId is <span
style="line-height: 1.4285715;">cxf-rt-transports-http-hc.</span><span
style="line-height: 1.4285715;"> The HttpAsyncClient library uses a
non-blocking IO model. This allows many more requests to be outstanding without
consuming extra background threads. It also allows greater control over things
like Keep-Alive handling which is very difficult or impossible with the
HttpURLConnection based transport. However, the non-blocking model does not
perform quite as well as the blocking model for pure synchronous
request/response transactions.</span></p><p>By default, if the
cxf-rt-transports-http-hc module is found on the classpath, CXF will use the
HttpAsyncClient based implementation for any Async calls, but will continue to
use the HttpURLConnection based transport for
synchronous calls. This allows a good balance of performance for the common
synchronous cases with scalability for the asynchronous cases. However, using a
contextual property of "use.async.http.conduit" and set to true/false, you can
control whether the async or blocking version is used. If "true", the
HttpAsyncClient will be used even for synchronous calls, if "false",
asynchronous calls will rely on the traditional method of using
HTTPURLConnection along with a work queue to mimic the asynchronocity. 
And if TLSClientParameters sets an SSLSocketFactory,  as SocketFactory
class and SocketFactory#createSocket methods in particular are inherently
blocking and sockets instantiated in such a way cannot be used for
asynchronous, so this lead to use the HttpURLConnection based
transport.</p><p>Another reason to use the asynchronous transport is to use
HTTP methods that HttpURLConnection does not support. For example, the
github.com REST API specifies the use of PATCH for some
cases, but HttpURLConnection rejects PATCH.</p><h3
id="AsynchronousClientHTTPTransport-UsingtheHTTPComponentsTransportfromJavaCode">Using
the HTTP Components Transport from Java Code</h3><p>To force global use of the
HTTP Components transport, you can set a bus-level property:</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Confluence"
style="font-size:12px;"> Bus bus = BusFactory.getDefaultBus();
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"> Bus bus = BusFactory.getDefaultBus();
// insist on the async connector to use PATCH.
bus.setProperty(AsyncHTTPConduit.USE_ASYNC, Boolean.TRUE);</pre>
</div></div><pre><span style="font-size: 16.0px;line-height:
1.5625;font-family: Arial , sans-serif;">Setting Credentials</span></pre><p>The
"normal" CXF/JAX-WS method of setting user credentials via the
BindingProvider.USERNAME_PROPERTY/PASSWORD_PROPERTY will work with the Async
transport as well. However, the HttpAsyncClient library does have some
additional capabilities around NTLM that can be leveraged. In order to use
that, you need to:</p><ul><li>Turn on the AutoRedirect and turn off the
Chunking for the Conduit. This will allow CXF to cache the response in a manner
that will allow the transport to keep resending the request during the
authentication negotiation.</li></ul><ul><li><p>Force the use of the Async
transport even for synchronous calls</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;">bp.getRequestContext().put("use.async.http.conduit",
Boolean.TRUE);
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">bp.getRequestContext().put("use.async.http.conduit",
Boolean.TRUE);
</pre>
</div></div></li></ul><ul><li><p>Set the property
"org.apache.http.auth.Credentials" to an instance of the Credentials. For
example:</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;">Credentials creds = new NTCredentials("username",
"pswd", null, "domain");
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">Credentials creds = new NTCredentials("username",
"pswd", null, "domain");
bp.getRequestContext().put(Credentials.class.getName(), creds);
</pre>
</div></div></li></ul><h3
id="AsynchronousClientHTTPTransport-Configuration">Configuration</h3><p>The
Asynchronous HTTP Transport has several options that can set using Bus
properties or via the OSGi configuration services to control various aspects of
the underlying Apache HTTP Components HttpAsyncClient objects.</p><p>Settings
related to the underlying TCP socket (see <a shape="rect" class="external-link"
href="http://docs.oracle.com/javase/7/docs/api/java/net/Socket.html"
rel="nofollow">java.net.Socket</a> for a definition of these values):</p><div
class="table-wrap"><table class="confluenceTable"><tbody><tr><td colspan="1"
rowspan="1"
class="confluenceTd"><p>org.apache.cxf.transport.http.async.TCP_NODELAY
(Default true)</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>org.apache.cxf.transport.http.async.SO_KEEPALIVE</p></td></tr><tr><td
colspan="1" rowspan="1"
class="confluenceTd"><p>org.apache.cxf.transport.http.async.SO_LINGER</p></td></tr><tr><td
colspan="
1" rowspan="1"
class="confluenceTd"><p>org.apache.cxf.transport.http.async.SO_TIMEOUT</p></td></tr></tbody></table></div><p>Settings
related to Keep-Alive connection management:</p><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>org.apache.cxf.transport.http.async.CONNECTION_TTL</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Maximum time a connection to
live(from creation to expiry)<span> </span>. Default is
60000.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>org.apache.cxf.transport.http.async.MAX_CONNECTIONS</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><span>Maximum number of
connections opened in total. Default is 5000.</span></p></td></tr><tr><td
colspan="1" rowspan="1"
class="confluenceTd"><p>org.apache.cxf.transport.http.async.MAX_PER_HOST_CONNECTIONS</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><span>Maximum number of
connections opened
per host. Default is
1000.</span></p></td></tr></tbody></table></div><p>Settings related to Apache
HttpAsyncClient threads and selectors:</p><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>org.apache.cxf.transport.http.async.ioThreadCount</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Number of threads
HttpAsyncClient uses to process IO events. Default is "-1" which means one
thread per CPU core.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>org.apache.cxf.transport.http.async.interestOpQueued</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>true/false for whether the
interest ops are queues or process directly.</p></td></tr><tr><td colspan="1"
rowspan="1"
class="confluenceTd"><p>org.apache.cxf.transport.http.async.selectInterval</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Default 1000 ms. How often the
selector thread wakes up if there are no events
to process additional things like queue
expirations.</p></td></tr></tbody></table></div><p>Setting to control which
conduit is used</p><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p>org.apache.cxf.transport.http.async.usePolicy</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>ALWAYS, ASYNC_ONLY,
NEVER.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Similar in
meaning to the "use.async.http.conduit" context property described above.
Whether to use the HttpAsyncClient: ALWAYS for both synchronous and
asynchronous calls, ASYNC_ONLY (default) for asynchronous calls only, NEVER
will use HTTPURLConnection for both types of
calls.</p></td></tr></tbody></table></div></div>
Modified: websites/production/cxf/content/docs/atom-logging.html
==============================================================================
--- websites/production/cxf/content/docs/atom-logging.html (original)
+++ websites/production/cxf/content/docs/atom-logging.html Wed Sep 13 15:05:52
2017
@@ -32,9 +32,9 @@
<link type="text/css" rel="stylesheet"
href="/resources/highlighter/styles/shThemeCXF.css">
<script src='/resources/highlighter/scripts/shCore.js'></script>
-<script src='/resources/highlighter/scripts/shBrushJava.js'></script>
-<script src='/resources/highlighter/scripts/shBrushXml.js'></script>
<script src='/resources/highlighter/scripts/shBrushBash.js'></script>
+<script src='/resources/highlighter/scripts/shBrushXml.js'></script>
+<script src='/resources/highlighter/scripts/shBrushJava.js'></script>
<script>
SyntaxHighlighter.defaults['toolbar'] = false;
SyntaxHighlighter.all();
@@ -119,13 +119,13 @@ Apache CXF -- ATOM Logging
<!-- Content -->
<div class="wiki-content">
<div id="ConfluenceContent"><p><strong>This feature is available since CXF
2.3.0, as part of the cxf-rt-management-web component</strong></p><p>CXF
supports collecting log events, converting them to <a shape="rect"
class="external-link" href="http://tools.ietf.org/html/rfc4287"
rel="nofollow">ATOM Syndication Format</a> and either pushing them to the
Atom-aware consumers or making them available for polling. Logging is based on
a custom <code>java.util.logging</code> (JUL) handler that can be registered
with loggers extending today's publishing protocols.</p><p><strong>CXF JAXRS
and JAXWS endpoints</strong> can avail of this feature.</p><h2
id="ATOMLogging-PushStyle">Push Style</h2><p>Push-style handler enqueues log
records as they are published from loggers. After the queue size exceeds
configurable "batch size", processing of collection of these records (in size
of batch size) is triggered. Batch of log events is transformed by converter to
ATOM element and then it is pushed out b
y deliverer to client. Both converter and deliverer are configurable units
that allow to change transformation and transportation strategies. Next to
predefined own custom implementations can be used when necessary – see
examples. Batches are processed sequentially to allow client side to recreate
stream of events.</p><p><strong>Limitations:</strong> Reliability is not
supported out of the box, however there is predefined retrying delivery
strategy. Persistence is also not supported, any enqueued and undelivered log
events are lost on shutdown. Definitions of delivery endpoints is static,
subscription of callback URIs is not yet supported.</p><h3
id="ATOMLogging-Springconfiguration">Spring configuration</h3><p>In simplest
case pushing ATOM Feeds can be declared this way:</p><div class="code panel
pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;"> <bean
class="org.apache.cxf.management.web.logging.atom.AtomPushBean"
init-method="init">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"> <bean
class="org.apache.cxf.management.web.logging.atom.AtomPushBean"
init-method="init">
<property name="url" value="http://somewhere.com/foo/bar"/>
<property name="level" value="ALL" />
</bean>
</pre>
</div></div><p>Spring bean creates ATOM push handler and registers it with
root logger for all log levels. This setup leads to logging everything CXF,
Spring and others included. Since batch size is not specified default value of
one is used - each event is packed up as single feed pushed out to specified
URL. Default conversion strategy and default WebClient-based deliver are
used.</p><p>More complex example shows how to specify non-root logger and
define batch size:</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;"> <bean
class="org.apache.cxf.management.web.logging.atom.AtomPushBean"
init-method="init">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"> <bean
class="org.apache.cxf.management.web.logging.atom.AtomPushBean"
init-method="init">
<property name="url" value="http://somewhere.com/foo/bar"/>
<property name="logger" value="org.apache.cxf.jaxrs" />
<property name="level" value="INFO" />
@@ -133,7 +133,7 @@ Apache CXF -- ATOM Logging
</bean>
</pre>
</div></div><p>To push to client events generated by different loggers on
different levels, "loggers" property must be used instead of pair "logger" and
"level":</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;"> <bean
class="org.apache.cxf.jaxrs.management.web.atom.AtomPushBean"
init-method="init">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"> <bean
class="org.apache.cxf.jaxrs.management.web.atom.AtomPushBean"
init-method="init">
<property name="url" value="http://somewhere.com/foo/bar"/>
<property name="loggers" value="
org.apache.cxf:DEBUG,
@@ -143,7 +143,7 @@ Apache CXF -- ATOM Logging
</bean>
</pre>
</div></div><p>In example above, second logger does not have specified level,
in such case default level of "INFO" is used.</p><p>In all above cases, when
first delivery fails engine of ATOM push handler is shutdown and no events will
be processed and pushed until configuration reload. To avoid this frequent
case, retrial can be enabled:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;"> <bean
class="org.apache.cxf.management.web.logging.atom.AtomPushBean"
init-method="init">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"> <bean
class="org.apache.cxf.management.web.logging.atom.AtomPushBean"
init-method="init">
<property name="url" value="http://somewhere.com/foo/bar"/>
<property name="logger" value="org.apache.cxf.jaxrs" />
<property name="level" value="INFO" />
@@ -153,7 +153,7 @@ Apache CXF -- ATOM Logging
</bean>
</pre>
</div></div><p>In this case for 5 minutes ("retryTimeout") after delivery
failure there will be 1 minute pause ("retryPauseTime") repeated every time
with same value ("retryPause" as "linear"). Instead of same pause time,
"exponential" value of "retryPause" can be used - each next time pause time
doubles. When timeout value is set to 0 retrying is infinite. In case of
invalid or missing values defaults are used: for pause time 30 seconds and for
timeout 0 (infinite). Instead of same pause time, "exponential" value of
"retryPauseType" can be used - each next time pause time doubles. When timeout
value is set to 0 retrying is infinite. In case of invalid or missing values
defaults are used: for pause time 30 seconds and for timeout 0
(infinite).</p><p>Ultimate control is given by "converter" and "deliverer"
properties. Either beans of predefined or custom classes can be used (see
"Programming syle" chapter for more details). Example below shows custom class
using different transport p
rotocol than default:</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;"> <bean id="soapDeliverer" ...
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"> <bean id="soapDeliverer" ...
...
<bean class="org.apache.cxf.management.web.logging.atom.AtomPushBean"
init-method="init">
<property name="deliverer">
@@ -163,7 +163,7 @@ Apache CXF -- ATOM Logging
</bean>
</pre>
</div></div><p>Note that specifying custom deliverer cause ignoring "url" and
"retryXxx" because underneath configuration replaces employed tandem of
RetryingDeliverer and WebClientDeliverer with provided one.</p><p>When ATOM
feeds must be delivered to more than one endpoint and additionally each
endpoint is fed by different loggers simply use multiple ATOM push beans in
Spring config:</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;"> <bean id="atom1"
class="org.apache.cxf.management.web.logging.atom.AtomPushBean"
init-method="init">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"> <bean id="atom1"
class="org.apache.cxf.management.web.logging.atom.AtomPushBean"
init-method="init">
<property name="url" value="http://someplace.com/foo/bar"/>
...
</bean>
@@ -174,7 +174,7 @@ Apache CXF -- ATOM Logging
....
</pre>
</div></div><h3 id="ATOMLogging-Propertiesfile">Properties file</h3><p>When
CXF is used either without Spring or logging is configured with properties
file, support for this type of configuration becomes handy. ATOM push handler
supports "simple configuration" with properties file; simple means aligned to
expressiveness of JUL configuration that is limited to cases, where each type
of handler can be used only once and registered with root logger.</p><p>Set of
properties is very similar to Spring configuration with following
exceptions:</p><ul><li>Properties specify classes of custom deliverers and
converters, instead of instances.</li><li>Custom deliverer must have public
constructor with the only String parameters; created instance will have passed
URL of client.</li><li>Multiple client endpoints is not supported out of the
box (cannot instantiate multiple handlers as in
Spring)</li></ul><p>Example:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent p
anelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;"> handlers =
org.apache.cxf.management.web.logging.atom.AtomPushHandler,
java.util.logging.ConsoleHandler
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"> handlers =
org.apache.cxf.management.web.logging.atom.AtomPushHandler,
java.util.logging.ConsoleHandler
.level = INFO
...
org.apache.cxf.jaxrs.ext.management.web.AtomPushHandler.url =
http://localhost:9080
@@ -187,7 +187,7 @@ Apache CXF -- ATOM Logging
...
</pre>
</div></div><h3 id="ATOMLogging-Programmingstyle">Programming style</h3><p>In
most complex cases direct programming using <code><a shape="rect"
href="http://cxf.apache.org/javadoc/latest/org/apache/cxf/management/web/logging/atom/package-summary.html">org.apache.cxf.jaxrs.ext.logging.atom</a></code>
package may be necessary. In this case AtomPushHandler class is main artifact
and Deliverer and Converter interfaces and their implementations are necessary
components.</p><p>Following example:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;"> Deliverer d = new
WebClientDeliverer("http://somewhere.com/foo/bar");
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"> Deliverer d = new
WebClientDeliverer("http://somewhere.com/foo/bar");
d = new RetryingDeliverer(d, 300, 60, true);
Converter c = new SingleEntryContentConverter();
AtomPushHandler h = new AtomPushHandler(1, c, d);
@@ -196,7 +196,7 @@ Apache CXF -- ATOM Logging
l.addHandler(h);
</pre>
</div></div><p>is equivalent to Spring configuration:</p><div class="code
panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;"> <bean
class="org.apache.cxf.management.web.logging.atom.AtomPushBean"
init-method="init">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"> <bean
class="org.apache.cxf.management.web.logging.atom.AtomPushBean"
init-method="init">
<property name="url" value="http://somewhere.com/foo/bar"/>
<property name="logger" value="org.apache.cxf.jaxrs" />
<property name="level" value="INFO" />
@@ -206,7 +206,7 @@ Apache CXF -- ATOM Logging
</bean>
</pre>
</div></div><h2 id="ATOMLogging-PollStyle">Poll Style</h2><p><a shape="rect"
class="external-link"
href="http://svn.apache.org/repos/asf/cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/logging/atom/AtomPullServer.java">AtomPullServer</a>
acts as an Atom feed endpoint and makes all log events it has accumulated or
read from some external storage available for polling.</p><p>Log events are
made available in pages, that is a feed instance will list up to a configurable
maximum number of entries and will also include atom links of types 'prev',
'next', 'first' and 'last', thus making it possible to browse through all the
log records.</p><h3 id="ATOMLogging-Springconfiguration.1">Spring
configuration</h3><p>When configuring AtomPullServer endpoints, one can set the
'loggers' property the same way as it is done for AtomPushBeans, for example
:</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;"> <bean
class="org.apache.cxf.management.web.logging.atom.AtomPullServer"
init-method="init">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"> <bean
class="org.apache.cxf.management.web.logging.atom.AtomPullServer"
init-method="init">
<property name="loggers" value="
org.apache.cxf:DEBUG,
org.apache.cxf.jaxrs,
@@ -216,7 +216,7 @@ Apache CXF -- ATOM Logging
</bean>
</pre>
</div></div><p>In addition to the 'loggers' property, a 'pageSize' property
limiting a number of entries per page to 30 is also set (default is
40).</p><p>One can have a <a shape="rect" class="external-link"
href="http://svn.apache.org/repos/asf/cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/logging/ReadWriteLogStorage.java">ReadWriteLogStorage</a>
bean injected into AtomPushBean if the log records have to be periodically
offloaded from memory and persisted across restarts :</p><div class="code panel
pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;"> <bean id="storage"
class="org.apache.cxf.systest.jaxrs.JAXRSLoggingAtomPullSpringTest$Storage"/>
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"> <bean id="storage"
class="org.apache.cxf.systest.jaxrs.JAXRSLoggingAtomPullSpringTest$Storage"/>
<bean class="org.apache.cxf.management.web.logging.atom.AtomPullServer"
init-method="init">
<property name="loggers" value="org.apache.cxf.jaxrs" />
@@ -227,7 +227,7 @@ Apache CXF -- ATOM Logging
</bean>
</pre>
</div></div><p>When a number of records in memory reaches 400 (default is 500)
then the records will be offloaded into a provided storage and will be read
from it after the restart or when a client has requested a relevant page. If no
storage is available then after an in-memory limit is reached the oldest
records will be discarded, one can set a maxInMemorySize property to a large
enough value if needed.</p><p>Another option is to require a given
AtomPullServer to read from the external read-only storage by registering a <a
shape="rect" class="external-link"
href="http://svn.apache.org/repos/asf/cxf/trunk/rt/management-web/src/main/java/org/apache/cxf/management/web/logging/ReadableLogStorage.java">ReadableLogStorage</a>
bean. For example, very often, the runtime is already logging to some external
file, thus AtomPullServer can be asked to read from this file only with the
help of ReadableLogStorage, without AtomPullServer having to catch log events
too.</p><p>Once AtomPullServer h
as been configured, it has to be registered as a service bean with the jaxrs
endpoint so that Atom aware clients (blog readers, etc) can start polling it
:</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;"><jaxrs:server id="atomServer" address="/atom">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"><jaxrs:server id="atomServer" address="/atom">
<jaxrs:serviceBeans>
<ref bean="atomPullServer"/>
</jaxrs:serviceBeans>
@@ -242,7 +242,7 @@ Apache CXF -- ATOM Logging
<bean id="entry"
class="org.apache.cxf.jaxrs.provider.AtomEntryProvider"/>
</pre>
</div></div><h3
id="ATOMLogging-LinkingtoAtomendpointsfromCXFServicespage">Linking to Atom
endpoints from CXF Services page</h3><p>If you would like your users to find
about the Atom feeds which are collecting log events from your endpoints then
AtomPullServers will need to have a CXF bus injected, as well as be told about
the address of the corresponding atom feed endpoint and of the jaxrs or jaxws
endpoint :</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;"><bean id="atomPullServer"
class="org.apache.cxf.management.web.logging.atom.AtomPullServer"
init-method="init">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"><bean id="atomPullServer"
class="org.apache.cxf.management.web.logging.atom.AtomPullServer"
init-method="init">
<property name="loggers"
value="org.apache.cxf.systest.jaxrs.JAXRSLoggingAtomPullSpringTest$Resource:ALL"/>
<property name="bus">
<ref bean="cxf"/>
Modified:
websites/production/cxf/content/docs/bundling-cxf-into-single-jar-with-maven-shade-plugin.html
==============================================================================
---
websites/production/cxf/content/docs/bundling-cxf-into-single-jar-with-maven-shade-plugin.html
(original)
+++
websites/production/cxf/content/docs/bundling-cxf-into-single-jar-with-maven-shade-plugin.html
Wed Sep 13 15:05:52 2017
@@ -171,7 +171,7 @@ Apache CXF -- Bundling CXF into single j
<span class="jira-issue CXF-6545"><a shape="rect" class="issue-link"
href="https://issues.apache.org/jira/browse/CXF-6545?src=confmacro">CXF-6545</a></span>
<br clear="none"><br clear="none"></li></ol><p>The fix is to use the Maven
Shade Plugin's AppendingTransformer to combine all the copies of the
bus-extensions.txt file present in the jars. See these examples here:</p><p><a
shape="rect" class="external-link"
href="https://fisheye6.atlassian.com/browse/cxf/osgi/bundle/all/pom.xml?r=12acd46e3dbe98fa1321374b09174d5876271f08#to448"
rel="nofollow">https://fisheye6.atlassian.com/browse/cxf/osgi/bundle/all/pom.xml?r=12acd46e3dbe98fa1321374b09174d5876271f08#to448</a></p><p><a
shape="rect" class="external-link"
href="https://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html#AppendingTransformer">https://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html#AppendingTransformer</a></p><p>You
can handle it with the plugin configuration for the Shade plugin e.g., like
this:</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeHeader panelHeader pdl" style="border-bottom
-width: 1px;"><b>Shade Plugin Example</b></div><div class="codeContent
panelContent pdl">
-<pre class="brush: xml; gutter: true; first-line: 1; theme: Confluence"
style="font-size:12px;"><plugin>
+<pre class="brush: xml; gutter: true; first-line: 1; theme: Default"
style="font-size:12px;"><plugin>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
Modified: websites/production/cxf/content/docs/bus-configuration.html
==============================================================================
--- websites/production/cxf/content/docs/bus-configuration.html (original)
+++ websites/production/cxf/content/docs/bus-configuration.html Wed Sep 13
15:05:52 2017
@@ -32,9 +32,9 @@
<link type="text/css" rel="stylesheet"
href="/resources/highlighter/styles/shThemeCXF.css">
<script src='/resources/highlighter/scripts/shCore.js'></script>
-<script src='/resources/highlighter/scripts/shBrushJava.js'></script>
-<script src='/resources/highlighter/scripts/shBrushXml.js'></script>
<script src='/resources/highlighter/scripts/shBrushBash.js'></script>
+<script src='/resources/highlighter/scripts/shBrushXml.js'></script>
+<script src='/resources/highlighter/scripts/shBrushJava.js'></script>
<script>
SyntaxHighlighter.defaults['toolbar'] = false;
SyntaxHighlighter.all();
@@ -129,7 +129,7 @@ Apache CXF -- Bus Configuration
<p>Here, simply define a bus element in your Spring configuration file, and
add child elements as required, for example:</p>
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:cxf="http://cxf.apache.org/core"
@@ -160,7 +160,7 @@ http://www.springframework.org/schema/be
<p>Although usually less convenient, interceptors can be added to the bus
using Java code. Given an <a shape="rect"
href="http://cxf.apache.org/javadoc/latest/org/apache/cxf/jaxws/EndpointImpl.html">EndpointImpl</a>
object, the bus can be accessed (and interceptors added) as follows:</p>
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">
import javax.xml.ws.Endpoint;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
Modified: websites/production/cxf/content/docs/celtix-migration-guide.html
==============================================================================
--- websites/production/cxf/content/docs/celtix-migration-guide.html (original)
+++ websites/production/cxf/content/docs/celtix-migration-guide.html Wed Sep 13
15:05:52 2017
@@ -32,8 +32,8 @@
<link type="text/css" rel="stylesheet"
href="/resources/highlighter/styles/shThemeCXF.css">
<script src='/resources/highlighter/scripts/shCore.js'></script>
-<script src='/resources/highlighter/scripts/shBrushJava.js'></script>
<script src='/resources/highlighter/scripts/shBrushBash.js'></script>
+<script src='/resources/highlighter/scripts/shBrushJava.js'></script>
<script>
SyntaxHighlighter.defaults['toolbar'] = false;
SyntaxHighlighter.all();
@@ -127,7 +127,7 @@ Apache CXF -- Celtix Migration Guide
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">
SpringBusFactory bf = new SpringBusFactory();
Bus bus = bf.createBus("ws_rm.xml");
bf.setDefaultBus(bus);
@@ -135,7 +135,7 @@ SpringBusFactory bf = new SpringBusFacto
</div></div>
<p> Later, to get the bus, you can call:</p>
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">
Bus bus = bf.getDefaultBus();
</pre>
</div></div>
@@ -146,7 +146,7 @@ Bus bus = bf.getDefaultBus();
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">
HelloWorld helloWorld = helloWorldService.getPort(
new QName("http://www.my/wsdl/target/namespace",
"SOAPOverHTTPEndpoint"),
HelloWorld.class );