Author: buildbot
Date: Wed Jul 22 14:20:21 2015
New Revision: 959169
Log:
Production update by buildbot for camel
Modified:
websites/production/camel/content/book-component-appendix.html
websites/production/camel/content/book-in-one-page.html
websites/production/camel/content/cache/main.pageCache
websites/production/camel/content/cxf.html
Modified: websites/production/camel/content/book-component-appendix.html
==============================================================================
--- websites/production/camel/content/book-component-appendix.html (original)
+++ websites/production/camel/content/book-component-appendix.html Wed Jul 22
14:20:21 2015
@@ -997,7 +997,7 @@ commetdComponent.setSslContextParameters
password="keystorePassword"/>
</camel:keyManagers>
</camel:sslContextParameters>...
-Â
+?
<bean id="cometd"
class="org.apache.camel.component.cometd.CometdComponent">
<property name="sslContextParameters"
ref="sslContextParameters"/>
</bean>
@@ -1268,11 +1268,11 @@ template.send("direct:alias-verify&
]]></script>
</div></div><p></p><h3 id="BookComponentAppendix-SeeAlso.8">See Also</h3>
<ul><li><a shape="rect" href="configuring-camel.html">Configuring
Camel</a></li><li><a shape="rect"
href="component.html">Component</a></li><li><a shape="rect"
href="endpoint.html">Endpoint</a></li><li><a shape="rect"
href="getting-started.html">Getting Started</a></li></ul><ul><li><a
shape="rect" href="crypto.html">Crypto</a> Crypto is also available as a <a
shape="rect" href="data-format.html">Data Format</a></li></ul> <h2
id="BookComponentAppendix-CXFComponent">CXF Component</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>When using CXF as a consumer, the
<a shape="rect" href="cxf-bean-component.html">CXF Bean Component</a> allows
you to factor out how message payloads are received from their processing as a
RESTful or SOAP web service. This has the potential of using a multitude of
transports to cons
ume web services. The bean component's configuration is also simpler and
provides the fastest method to implement web services using Camel and
CXF.</p></div></div><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>When using CXF in streaming modes
(see DataFormat option), then also read about <a shape="rect"
href="stream-caching.html">Stream caching</a>.</p></div></div><p>The
<strong>cxf:</strong> component provides integration with <a shape="rect"
href="http://cxf.apache.org">Apache CXF</a> for connecting to JAX-WS services
hosted in CXF.</p><p><style type="text/css">/*<![CDATA[*/
-div.rbtoc1437293926066 {padding: 0px;}
-div.rbtoc1437293926066 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1437293926066 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1437574680528 {padding: 0px;}
+div.rbtoc1437574680528 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1437574680528 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style></p><div class="toc-macro rbtoc1437293926066">
+/*]]>*/</style></p><div class="toc-macro rbtoc1437574680528">
<ul class="toc-indentation"><li><a shape="rect"
href="#BookComponentAppendix-CXFComponent">CXF Component</a>
<ul class="toc-indentation"><li><a shape="rect"
href="#BookComponentAppendix-URIformat">URI format</a></li><li><a shape="rect"
href="#BookComponentAppendix-Options">Options</a>
<ul class="toc-indentation"><li><a shape="rect"
href="#BookComponentAppendix-Thedescriptionsofthedataformats">The descriptions
of the dataformats</a>
@@ -1337,7 +1337,7 @@ div.rbtoc1437293926066 li {margin-left:
</bean>
]]></script>
-</div></div><p>Then, your endpoint can reference the
<code>CxfHeaderFilterStrategy</code>.</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div>Then, your endpoint can reference the
<code>CxfHeaderFilterStrategy</code>.<div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
<script class="brush: xml; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
<route>
<from
uri="cxf:bean:routerNoRelayEndpoint?headerFilterStrategy=#dropAllMessageHeadersStrategy"/>
@@ -1471,7 +1471,7 @@ public class WriteXmlDeclarationIntercep
}
]]></script>
-</div></div><p>You can add a customer interceptor like this and configure it
into you camel-cxf endpont</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
+</div></div>You can add a customer interceptor like this and configure it into
you camel-cxf endpont<div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
<script class="brush: xml; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
<cxf:cxfEndpoint id="routerEndpoint"
address="http://localhost:${CXFTestSupport.port2}/CXFGreeterRouterTest/CamelContext/RouterPort"
serviceClass="org.apache.hello_world_soap_http.GreeterImpl"
@@ -1486,7 +1486,7 @@ public class WriteXmlDeclarationIntercep
</cxf:properties>
</cxf:cxfEndpoint>
]]></script>
-</div></div><p>Or adding a message header for it like this if you are using
<strong>Camel 2.4</strong>.</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
+</div></div>Or adding a message header for it like this if you are using
<strong>Camel 2.4</strong>.<div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[ // set up the response context which force
start document
Map<String, Object> map = new HashMap<String, Object>();
map.put("org.apache.cxf.stax.force-start-document", Boolean.TRUE);
@@ -1611,7 +1611,7 @@ protected RouteBuilder createRouteBuilde
<process ref="InsertResponseOutHeaderProcessor" />
</route>
]]></script>
-</div></div><p>SOAP headers are propagated to and from Camel Message headers.
The Camel message header name is "org.apache.cxf.headers.Header.list" which is
a constant defined in CXF (org.apache.cxf.headers.Header.HEADER_LIST). The
header value is a List of CXF SoapHeader objects
(org.apache.cxf.binding.soap.SoapHeader). The following snippet is the
InsertResponseOutHeaderProcessor (that insert a new SOAP header in the response
message). The way to access SOAP headers in both
InsertResponseOutHeaderProcessor and InsertRequestOutHeaderProcessor are
actually the same. The only difference between the two processors is setting
the direction of the inserted SOAP header.</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div>SOAP headers are propagated to and from Camel Message headers. The
Camel message header name is "org.apache.cxf.headers.Header.list" which is a
constant defined in CXF (org.apache.cxf.headers.Header.HEADER_LIST). The header
value is a List of CXF SoapHeader objects
(org.apache.cxf.binding.soap.SoapHeader). The following snippet is the
InsertResponseOutHeaderProcessor (that insert a new SOAP header in the response
message). The way to access SOAP headers in both
InsertResponseOutHeaderProcessor and InsertRequestOutHeaderProcessor are
actually the same. The only difference between the two processors is setting
the direction of the inserted SOAP header.<div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
public static class InsertResponseOutHeaderProcessor implements Processor {
@@ -1667,7 +1667,7 @@ from(getRouterEndpointURI()).process(new
})
.to(getServiceEndpointURI());
]]></script>
-</div></div><h3
id="BookComponentAppendix-SOAPheadersarenotavailableinMESSAGEmode">SOAP headers
are not available in MESSAGE mode</h3><p>SOAP headers are not available in
MESSAGE mode as SOAP processing is skipped.</p><h3
id="BookComponentAppendix-HowtothrowaSOAPFaultfromCamel">How to throw a SOAP
Fault from Camel</h3><p>If you are using a <code>camel-cxf</code> endpoint to
consume the SOAP request, you may need to throw the SOAP Fault from the camel
context.<br clear="none"> Basically, you can use the <code>throwFault</code>
DSL to do that; it works for <code>POJO</code>, <code>PAYLOAD</code> and
<code>MESSAGE</code> data format.<br clear="none"> You can define the soap
fault like this</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
+</div></div>Since Camel 2.16.0, you can also use the same way as described in
sub-chapter "How to get and set SOAP headers in POJO mode" to set or get the
SOAP headers. <h3
id="BookComponentAppendix-SOAPheadersarenotavailableinMESSAGEmode">SOAP headers
are not available in MESSAGE mode</h3><p>SOAP headers are not available in
MESSAGE mode as SOAP processing is skipped.</p><h3
id="BookComponentAppendix-HowtothrowaSOAPFaultfromCamel">How to throw a SOAP
Fault from Camel</h3><p>If you are using a <code>camel-cxf</code> endpoint to
consume the SOAP request, you may need to throw the SOAP Fault from the camel
context.<br clear="none"> Basically, you can use the <code>throwFault</code>
DSL to do that; it works for <code>POJO</code>, <code>PAYLOAD</code> and
<code>MESSAGE</code> data format.<br clear="none"> You can define the soap
fault like this</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
SOAP_FAULT = new SoapFault(EXCEPTION_MESSAGE, SoapFault.FAULT_CODE_CLIENT);
Element detail = SOAP_FAULT.getOrCreateDetail();
@@ -1675,11 +1675,11 @@ Document doc = detail.getOwnerDocument()
Text tn = doc.createTextNode(DETAIL_TEXT);
detail.appendChild(tn);
]]></script>
-</div></div><p>Then throw it as you like</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div>Then throw it as you like<div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
from(routerEndpointURI).setFaultBody(constant(SOAP_FAULT));
]]></script>
-</div></div><p>If your CXF endpoint is working in the <code>MESSAGE</code>
data format, you could set the the SOAP Fault message in the message body and
set the response code in the message header.</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div>If your CXF endpoint is working in the <code>MESSAGE</code> data
format, you could set the the SOAP Fault message in the message body and set
the response code in the message header.<div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
from(routerEndpointURI).process(new Processor() {
@@ -1693,7 +1693,7 @@ from(routerEndpointURI).process(new Proc
});
]]></script>
-</div></div><p>Same for using POJO data format. You can set the SOAPFault on
the out body and also indicate it's a fault by calling
Message.setFault(true):</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
+</div></div>Same for using POJO data format. You can set the SOAPFault on the
out body and also indicate it's a fault by calling Message.setFault(true):<div
class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
from("direct:start").onException(SoapFault.class).maximumRedeliveries(0).handled(true)
.process(new Processor() {
@@ -1749,7 +1749,7 @@ from("direct:start").onExcepti
</cxf:properties>
]]></script>
-</div></div><p>You can produce a Camel message with attachment to send to a
CXF endpoint in Payload mode.</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div>You can produce a Camel message with attachment to send to a CXF
endpoint in Payload mode.<div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
Exchange exchange =
context.createProducerTemplate().send("direct:testEndpoint", new
Processor() {
@@ -1802,7 +1802,7 @@ Assert.assertEquals(560, image.getWidth(
Assert.assertEquals(300, image.getHeight());
]]></script>
-</div></div><p>You can also consume a Camel message received from a CXF
endpoint in Payload mode.</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
+</div></div>You can also consume a Camel message received from a CXF endpoint
in Payload mode.<div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
public static class MyProcessor implements Processor {
@@ -1852,7 +1852,7 @@ public static class MyProcessor implemen
}
}
]]></script>
-</div></div><p><strong>Message Mode:</strong> Attachments are not supported as
it does not process the message at all.</p><p><strong>CXF_MESSAGE
Mode</strong>: MTOM is supported, and Attachments can be retrieved by Camel
Message APIs mentioned above. Note that when receiving a multipart (i.e. MTOM)
message the default SOAPMessage to String converter will provide the complete
multipart payload on the body. If you require just the SOAP XML as a String,
you can set the message body with message.getSOAPPart(), and Camel convert can
do the rest of work for you.</p><h3
id="BookComponentAppendix-StreamingSupportinPAYLOADmode">Streaming Support in
PAYLOAD mode</h3><p>In 2.8.2, the camel-cxf component now supports streaming of
incoming messages when using PAYLOAD mode. Previously, the incoming messages
would have been completely DOM parsed. For large messages, this is time
consuming and uses a significant amount of memory. Starting in 2.8.2, the
incoming messages can remain as a javax.xml.tr
ansform.Source while being routed and, if nothing modifies the payload, can
then be directly streamed out to the target destination. For common "simple
proxy" use cases (example: from("cxf:...").to("cxf:...")), this can provide
very significant performance increases as well as significantly lowered memory
requirements.</p><p>However, there are cases where streaming may not be
appropriate or desired. Due to the streaming nature, invalid incoming XML may
not be caught until later in the processing chain. Also, certain actions may
require the message to be DOM parsed anyway (like WS-Security or message
tracing and such) in which case the advantages of the streaming is limited. At
this point, there are two ways to control the streaming:</p><ul><li>Endpoint
property: you can add "allowStreaming=false" as an endpoint property to turn
the streaming on/off.</li></ul><ul><li>Component property: the CxfComponent
object also has an allowStreaming property that can set the default for
endpoints
created from that component.</li></ul><p>Global system property: you can add
a system property of "org.apache.camel.component.cxf.streaming" to "false" to
turn if off. That sets the global default, but setting the endpoint property
above will override this value for that endpoint.</p><h3
id="BookComponentAppendix-UsingthegenericCXFDispatchmode">Using the generic CXF
Dispatch mode</h3><p>From 2.8.0, the camel-cxf component supports the generic
<a shape="rect" href="https://cxf.apache.org/docs/jax-ws-dispatch-api.html">CXF
dispatch mode</a> that can transport messages of arbitrary structures
(i.e., not bound to a specific XML schema). To use this mode, you simply omit
specifying the wsdlURL and serviceClass attributes of the CXF endpoint.</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
+</div></div><strong>Message Mode:</strong> Attachments are not supported as it
does not process the message at all.<p><strong>CXF_MESSAGE Mode</strong>: MTOM
is supported, and Attachments can be retrieved by Camel Message APIs mentioned
above. Note that when receiving a multipart (i.e. MTOM) message the default
SOAPMessage to String converter will provide the complete multipart payload on
the body. If you require just the SOAP XML as a String, you can set the message
body with message.getSOAPPart(), and Camel convert can do the rest of work for
you.</p><h3 id="BookComponentAppendix-StreamingSupportinPAYLOADmode">Streaming
Support in PAYLOAD mode</h3><p>In 2.8.2, the camel-cxf component now supports
streaming of incoming messages when using PAYLOAD mode. Previously, the
incoming messages would have been completely DOM parsed. For large messages,
this is time consuming and uses a significant amount of memory. Starting in
2.8.2, the incoming messages can remain as a javax.xml.transform
.Source while being routed and, if nothing modifies the payload, can then be
directly streamed out to the target destination. For common "simple proxy" use
cases (example: from("cxf:...").to("cxf:...")), this can provide very
significant performance increases as well as significantly lowered memory
requirements.</p><p>However, there are cases where streaming may not be
appropriate or desired. Due to the streaming nature, invalid incoming XML may
not be caught until later in the processing chain. Also, certain actions may
require the message to be DOM parsed anyway (like WS-Security or message
tracing and such) in which case the advantages of the streaming is limited. At
this point, there are two ways to control the streaming:</p><ul><li>Endpoint
property: you can add "allowStreaming=false" as an endpoint property to turn
the streaming on/off.</li></ul><ul><li>Component property: the CxfComponent
object also has an allowStreaming property that can set the default for
endpoints create
d from that component.</li></ul><p>Global system property: you can add a
system property of "org.apache.camel.component.cxf.streaming" to "false" to
turn if off. That sets the global default, but setting the endpoint property
above will override this value for that endpoint.</p><h3
id="BookComponentAppendix-UsingthegenericCXFDispatchmode">Using the generic CXF
Dispatch mode</h3><p>From 2.8.0, the camel-cxf component supports the generic
<a shape="rect" href="https://cxf.apache.org/docs/jax-ws-dispatch-api.html">CXF
dispatch mode</a> that can transport messages of arbitrary structures
(i.e., not bound to a specific XML schema). To use this mode, you simply omit
specifying the wsdlURL and serviceClass attributes of the CXF endpoint.</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
<script class="brush: xml; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[<cxf:cxfEndpoint
id="testEndpoint"
address="http://localhost:9000/SoapContext/SoapAnyPort">
<cxf:properties>
<entry key="dataFormat" value="PAYLOAD"/>
@@ -4291,7 +4291,7 @@ public class PatientLookupService {
]]></script>
</div></div><p><strong>sync=true</strong> indicates that this listener is
synchronous and therefore will return a HL7 response to the caller. The HL7
codec is setup with <strong>encoder=#hl7encoder </strong>and<strong>
decoder=#hl7decoder</strong>. Note that <code>hl7encoder</code> and
<code>hl7decoder</code> are just bean IDs, so they could be named differently.
The beans can be set in the Spring XML file:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
<script class="brush: xml; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[ <bean id="hl7decoder"
class="org.apache.camel.component.hl7.HL7MLLPNettyDecoderFactory"/>
-Â <bean id="hl7encoder"
class="org.apache.camel.component.hl7.HL7MLLPNettyEncoderFactory"/>]]></script>
+? <bean id="hl7encoder"
class="org.apache.camel.component.hl7.HL7MLLPNettyEncoderFactory"/>]]></script>
</div></div><p>The endpoint <strong>hl7NettyListener</strong> can then be used
in a route as a consumer, as this Java DSL example illustrates:</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
from("hl7NettyListener").beanRef("patientLookupService");
]]></script>
@@ -4352,7 +4352,7 @@ String patientId = msg.getQRD().getWhoSu
.setHeader("PATIENT_ID",terser("QRD-8(0)-1"))
.to("mock:test1");
- Â // continue processing if extracted field equals a message header
+ ?// continue processing if extracted field equals a message header
from("direct:test2")
.filter(terser("QRD-8(0)-1").isEqualTo(header("PATIENT_ID"))
.to("mock:test2");
@@ -4625,9 +4625,9 @@ ProtocolSocketFactory factory =
Protocol.registerProtocol("https",
new Protocol(
-Â Â Â Â Â Â Â "https",
-Â Â Â Â Â Â Â factory,
-Â Â Â Â Â Â Â 443));
+??????? "https",
+??????? factory,
+??????? 443));
from("direct:start")
.to("https://mail.google.com/mail/").to("mock:results");
@@ -6184,7 +6184,7 @@ but the following listed types were not
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[public class Jt400RouteBuilder extends
RouteBuilder {
@Override
public void configure() throws Exception {
-
from("direct:work").to("jt400://GRUPO:ATWORK@server/QSYS.LIB/assets.LIB/compute.PGM?fieldsLength=10,10,512&ouputFieldsIdx=2,3").to(âdirect:playâ);
+
from("direct:work").to("jt400://GRUPO:ATWORK@server/QSYS.LIB/assets.LIB/compute.PGM?fieldsLength=10,10,512&ouputFieldsIdx=2,3").to(?direct:play?);
}
}
]]></script>
Modified: websites/production/camel/content/book-in-one-page.html
==============================================================================
--- websites/production/camel/content/book-in-one-page.html (original)
+++ websites/production/camel/content/book-in-one-page.html Wed Jul 22 14:20:21
2015
@@ -3685,11 +3685,11 @@ The tutorial has been designed in two pa
While not actual tutorials you might find working through the source of the
various <a shape="rect" href="examples.html">Examples</a> useful.</li></ul>
<h2 id="BookInOnePage-TutorialonSpringRemotingwithJMS">Tutorial on Spring
Remoting with JMS</h2><p> </p><div class="confluence-information-macro
confluence-information-macro-information"><p class="title">Thanks</p><span
class="aui-icon aui-icon-small aui-iconfont-info
confluence-information-macro-icon"></span><div
class="confluence-information-macro-body"><p>This tutorial was kindly donated
to Apache Camel by Martin Gilday.</p></div></div><h2
id="BookInOnePage-Preface">Preface</h2><p>This tutorial aims to guide the
reader through the stages of creating a project which uses Camel to facilitate
the routing of messages from a JMS queue to a <a shape="rect"
class="external-link" href="http://www.springramework.org"
rel="nofollow">Spring</a> service. The route works in a synchronous fashion
returning a response to the client.</p><p><style type="text/css">/*<![CDATA[*/
-div.rbtoc1437488267574 {padding: 0px;}
-div.rbtoc1437488267574 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1437488267574 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1437574714082 {padding: 0px;}
+div.rbtoc1437574714082 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1437574714082 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style></p><div class="toc-macro rbtoc1437488267574">
+/*]]>*/</style></p><div class="toc-macro rbtoc1437574714082">
<ul class="toc-indentation"><li><a shape="rect"
href="#BookInOnePage-TutorialonSpringRemotingwithJMS">Tutorial on Spring
Remoting with JMS</a></li><li><a shape="rect"
href="#BookInOnePage-Preface">Preface</a></li><li><a shape="rect"
href="#BookInOnePage-Prerequisites">Prerequisites</a></li><li><a shape="rect"
href="#BookInOnePage-Distribution">Distribution</a></li><li><a shape="rect"
href="#BookInOnePage-About">About</a></li><li><a shape="rect"
href="#BookInOnePage-CreatetheCamelProject">Create the Camel Project</a>
<ul class="toc-indentation"><li><a shape="rect"
href="#BookInOnePage-UpdatethePOMwithDependencies">Update the POM with
Dependencies</a></li></ul>
</li><li><a shape="rect" href="#BookInOnePage-WritingtheServer">Writing the
Server</a>
@@ -5789,11 +5789,11 @@ So we completed the last piece in the pi
<p>This example has been removed from <strong>Camel 2.9</strong> onwards.
Apache Axis 1.4 is a very old and unsupported framework. We encourage users to
use <a shape="rect" href="cxf.html">CXF</a> instead of Axis.</p></div></div>
<style type="text/css">/*<![CDATA[*/
-div.rbtoc1437488268537 {padding: 0px;}
-div.rbtoc1437488268537 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1437488268537 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1437574715278 {padding: 0px;}
+div.rbtoc1437574715278 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1437574715278 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style><div class="toc-macro rbtoc1437488268537">
+/*]]>*/</style><div class="toc-macro rbtoc1437574715278">
<ul class="toc-indentation"><li><a shape="rect"
href="#BookInOnePage-TutorialusingAxis1.4withApacheCamel">Tutorial using Axis
1.4 with Apache Camel</a>
<ul class="toc-indentation"><li><a shape="rect"
href="#BookInOnePage-Prerequisites">Prerequisites</a></li><li><a shape="rect"
href="#BookInOnePage-Distribution">Distribution</a></li><li><a shape="rect"
href="#BookInOnePage-Introduction">Introduction</a></li><li><a shape="rect"
href="#BookInOnePage-SettinguptheprojecttorunAxis">Setting up the project to
run Axis</a>
<ul class="toc-indentation"><li><a shape="rect"
href="#BookInOnePage-Maven2">Maven 2</a></li><li><a shape="rect"
href="#BookInOnePage-wsdl">wsdl</a></li><li><a shape="rect"
href="#BookInOnePage-ConfiguringAxis">Configuring Axis</a></li><li><a
shape="rect" href="#BookInOnePage-RunningtheExample">Running the
Example</a></li></ul>
@@ -17791,11 +17791,11 @@ template.send("direct:alias-verify&
]]></script>
</div></div><p></p><h3 id="BookInOnePage-SeeAlso.28">See Also</h3>
<ul><li><a shape="rect" href="configuring-camel.html">Configuring
Camel</a></li><li><a shape="rect"
href="component.html">Component</a></li><li><a shape="rect"
href="endpoint.html">Endpoint</a></li><li><a shape="rect"
href="getting-started.html">Getting Started</a></li></ul><ul><li><a
shape="rect" href="crypto.html">Crypto</a> Crypto is also available as a <a
shape="rect" href="data-format.html">Data Format</a></li></ul> <h2
id="BookInOnePage-CXFComponent">CXF Component</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>When using CXF as a consumer, the
<a shape="rect" href="cxf-bean-component.html">CXF Bean Component</a> allows
you to factor out how message payloads are received from their processing as a
RESTful or SOAP web service. This has the potential of using a multitude of
transports to consume web
services. The bean component's configuration is also simpler and provides the
fastest method to implement web services using Camel and
CXF.</p></div></div><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>When using CXF in streaming modes
(see DataFormat option), then also read about <a shape="rect"
href="stream-caching.html">Stream caching</a>.</p></div></div><p>The
<strong>cxf:</strong> component provides integration with <a shape="rect"
href="http://cxf.apache.org">Apache CXF</a> for connecting to JAX-WS services
hosted in CXF.</p><p><style type="text/css">/*<![CDATA[*/
-div.rbtoc1437488294923 {padding: 0px;}
-div.rbtoc1437488294923 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1437488294923 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1437574736517 {padding: 0px;}
+div.rbtoc1437574736517 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1437574736517 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style></p><div class="toc-macro rbtoc1437488294923">
+/*]]>*/</style></p><div class="toc-macro rbtoc1437574736517">
<ul class="toc-indentation"><li><a shape="rect"
href="#BookInOnePage-CXFComponent">CXF Component</a>
<ul class="toc-indentation"><li><a shape="rect"
href="#BookInOnePage-URIformat">URI format</a></li><li><a shape="rect"
href="#BookInOnePage-Options">Options</a>
<ul class="toc-indentation"><li><a shape="rect"
href="#BookInOnePage-Thedescriptionsofthedataformats">The descriptions of the
dataformats</a>
@@ -17860,7 +17860,7 @@ div.rbtoc1437488294923 li {margin-left:
</bean>
]]></script>
-</div></div><p>Then, your endpoint can reference the
<code>CxfHeaderFilterStrategy</code>.</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div>Then, your endpoint can reference the
<code>CxfHeaderFilterStrategy</code>.<div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
<script class="brush: xml; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
<route>
<from
uri="cxf:bean:routerNoRelayEndpoint?headerFilterStrategy=#dropAllMessageHeadersStrategy"/>
@@ -17994,7 +17994,7 @@ public class WriteXmlDeclarationIntercep
}
]]></script>
-</div></div><p>You can add a customer interceptor like this and configure it
into you camel-cxf endpont</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
+</div></div>You can add a customer interceptor like this and configure it into
you camel-cxf endpont<div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
<script class="brush: xml; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
<cxf:cxfEndpoint id="routerEndpoint"
address="http://localhost:${CXFTestSupport.port2}/CXFGreeterRouterTest/CamelContext/RouterPort"
serviceClass="org.apache.hello_world_soap_http.GreeterImpl"
@@ -18009,7 +18009,7 @@ public class WriteXmlDeclarationIntercep
</cxf:properties>
</cxf:cxfEndpoint>
]]></script>
-</div></div><p>Or adding a message header for it like this if you are using
<strong>Camel 2.4</strong>.</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
+</div></div>Or adding a message header for it like this if you are using
<strong>Camel 2.4</strong>.<div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[ // set up the response context which force
start document
Map<String, Object> map = new HashMap<String, Object>();
map.put("org.apache.cxf.stax.force-start-document", Boolean.TRUE);
@@ -18134,7 +18134,7 @@ protected RouteBuilder createRouteBuilde
<process ref="InsertResponseOutHeaderProcessor" />
</route>
]]></script>
-</div></div><p>SOAP headers are propagated to and from Camel Message headers.
The Camel message header name is "org.apache.cxf.headers.Header.list" which is
a constant defined in CXF (org.apache.cxf.headers.Header.HEADER_LIST). The
header value is a List of CXF SoapHeader objects
(org.apache.cxf.binding.soap.SoapHeader). The following snippet is the
InsertResponseOutHeaderProcessor (that insert a new SOAP header in the response
message). The way to access SOAP headers in both
InsertResponseOutHeaderProcessor and InsertRequestOutHeaderProcessor are
actually the same. The only difference between the two processors is setting
the direction of the inserted SOAP header.</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div>SOAP headers are propagated to and from Camel Message headers. The
Camel message header name is "org.apache.cxf.headers.Header.list" which is a
constant defined in CXF (org.apache.cxf.headers.Header.HEADER_LIST). The header
value is a List of CXF SoapHeader objects
(org.apache.cxf.binding.soap.SoapHeader). The following snippet is the
InsertResponseOutHeaderProcessor (that insert a new SOAP header in the response
message). The way to access SOAP headers in both
InsertResponseOutHeaderProcessor and InsertRequestOutHeaderProcessor are
actually the same. The only difference between the two processors is setting
the direction of the inserted SOAP header.<div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
public static class InsertResponseOutHeaderProcessor implements Processor {
@@ -18190,7 +18190,7 @@ from(getRouterEndpointURI()).process(new
})
.to(getServiceEndpointURI());
]]></script>
-</div></div><h3
id="BookInOnePage-SOAPheadersarenotavailableinMESSAGEmode">SOAP headers are not
available in MESSAGE mode</h3><p>SOAP headers are not available in MESSAGE mode
as SOAP processing is skipped.</p><h3
id="BookInOnePage-HowtothrowaSOAPFaultfromCamel">How to throw a SOAP Fault from
Camel</h3><p>If you are using a <code>camel-cxf</code> endpoint to consume the
SOAP request, you may need to throw the SOAP Fault from the camel context.<br
clear="none"> Basically, you can use the <code>throwFault</code> DSL to do
that; it works for <code>POJO</code>, <code>PAYLOAD</code> and
<code>MESSAGE</code> data format.<br clear="none"> You can define the soap
fault like this</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
+</div></div>Since Camel 2.16.0, you can also use the same way as described in
sub-chapter "How to get and set SOAP headers in POJO mode" to set or get the
SOAP headers. <h3
id="BookInOnePage-SOAPheadersarenotavailableinMESSAGEmode">SOAP headers are not
available in MESSAGE mode</h3><p>SOAP headers are not available in MESSAGE mode
as SOAP processing is skipped.</p><h3
id="BookInOnePage-HowtothrowaSOAPFaultfromCamel">How to throw a SOAP Fault from
Camel</h3><p>If you are using a <code>camel-cxf</code> endpoint to consume the
SOAP request, you may need to throw the SOAP Fault from the camel context.<br
clear="none"> Basically, you can use the <code>throwFault</code> DSL to do
that; it works for <code>POJO</code>, <code>PAYLOAD</code> and
<code>MESSAGE</code> data format.<br clear="none"> You can define the soap
fault like this</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
SOAP_FAULT = new SoapFault(EXCEPTION_MESSAGE, SoapFault.FAULT_CODE_CLIENT);
Element detail = SOAP_FAULT.getOrCreateDetail();
@@ -18198,11 +18198,11 @@ Document doc = detail.getOwnerDocument()
Text tn = doc.createTextNode(DETAIL_TEXT);
detail.appendChild(tn);
]]></script>
-</div></div><p>Then throw it as you like</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div>Then throw it as you like<div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
from(routerEndpointURI).setFaultBody(constant(SOAP_FAULT));
]]></script>
-</div></div><p>If your CXF endpoint is working in the <code>MESSAGE</code>
data format, you could set the the SOAP Fault message in the message body and
set the response code in the message header.</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div>If your CXF endpoint is working in the <code>MESSAGE</code> data
format, you could set the the SOAP Fault message in the message body and set
the response code in the message header.<div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
from(routerEndpointURI).process(new Processor() {
@@ -18216,7 +18216,7 @@ from(routerEndpointURI).process(new Proc
});
]]></script>
-</div></div><p>Same for using POJO data format. You can set the SOAPFault on
the out body and also indicate it's a fault by calling
Message.setFault(true):</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
+</div></div>Same for using POJO data format. You can set the SOAPFault on the
out body and also indicate it's a fault by calling Message.setFault(true):<div
class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
from("direct:start").onException(SoapFault.class).maximumRedeliveries(0).handled(true)
.process(new Processor() {
@@ -18272,7 +18272,7 @@ from("direct:start").onExcepti
</cxf:properties>
]]></script>
-</div></div><p>You can produce a Camel message with attachment to send to a
CXF endpoint in Payload mode.</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div>You can produce a Camel message with attachment to send to a CXF
endpoint in Payload mode.<div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
Exchange exchange =
context.createProducerTemplate().send("direct:testEndpoint", new
Processor() {
@@ -18325,7 +18325,7 @@ Assert.assertEquals(560, image.getWidth(
Assert.assertEquals(300, image.getHeight());
]]></script>
-</div></div><p>You can also consume a Camel message received from a CXF
endpoint in Payload mode.</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
+</div></div>You can also consume a Camel message received from a CXF endpoint
in Payload mode.<div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
public static class MyProcessor implements Processor {
@@ -18375,7 +18375,7 @@ public static class MyProcessor implemen
}
}
]]></script>
-</div></div><p><strong>Message Mode:</strong> Attachments are not supported as
it does not process the message at all.</p><p><strong>CXF_MESSAGE
Mode</strong>: MTOM is supported, and Attachments can be retrieved by Camel
Message APIs mentioned above. Note that when receiving a multipart (i.e. MTOM)
message the default SOAPMessage to String converter will provide the complete
multipart payload on the body. If you require just the SOAP XML as a String,
you can set the message body with message.getSOAPPart(), and Camel convert can
do the rest of work for you.</p><h3
id="BookInOnePage-StreamingSupportinPAYLOADmode">Streaming Support in PAYLOAD
mode</h3><p>In 2.8.2, the camel-cxf component now supports streaming of
incoming messages when using PAYLOAD mode. Previously, the incoming messages
would have been completely DOM parsed. For large messages, this is time
consuming and uses a significant amount of memory. Starting in 2.8.2, the
incoming messages can remain as a javax.xml.transform.
Source while being routed and, if nothing modifies the payload, can then be
directly streamed out to the target destination. For common "simple proxy" use
cases (example: from("cxf:...").to("cxf:...")), this can provide very
significant performance increases as well as significantly lowered memory
requirements.</p><p>However, there are cases where streaming may not be
appropriate or desired. Due to the streaming nature, invalid incoming XML may
not be caught until later in the processing chain. Also, certain actions may
require the message to be DOM parsed anyway (like WS-Security or message
tracing and such) in which case the advantages of the streaming is limited. At
this point, there are two ways to control the streaming:</p><ul><li>Endpoint
property: you can add "allowStreaming=false" as an endpoint property to turn
the streaming on/off.</li></ul><ul><li>Component property: the CxfComponent
object also has an allowStreaming property that can set the default for
endpoints created
from that component.</li></ul><p>Global system property: you can add a system
property of "org.apache.camel.component.cxf.streaming" to "false" to turn if
off. That sets the global default, but setting the endpoint property above will
override this value for that endpoint.</p><h3
id="BookInOnePage-UsingthegenericCXFDispatchmode">Using the generic CXF
Dispatch mode</h3><p>From 2.8.0, the camel-cxf component supports the generic
<a shape="rect" href="https://cxf.apache.org/docs/jax-ws-dispatch-api.html">CXF
dispatch mode</a> that can transport messages of arbitrary structures
(i.e., not bound to a specific XML schema). To use this mode, you simply omit
specifying the wsdlURL and serviceClass attributes of the CXF endpoint.</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
+</div></div><strong>Message Mode:</strong> Attachments are not supported as it
does not process the message at all.<p><strong>CXF_MESSAGE Mode</strong>: MTOM
is supported, and Attachments can be retrieved by Camel Message APIs mentioned
above. Note that when receiving a multipart (i.e. MTOM) message the default
SOAPMessage to String converter will provide the complete multipart payload on
the body. If you require just the SOAP XML as a String, you can set the message
body with message.getSOAPPart(), and Camel convert can do the rest of work for
you.</p><h3 id="BookInOnePage-StreamingSupportinPAYLOADmode">Streaming Support
in PAYLOAD mode</h3><p>In 2.8.2, the camel-cxf component now supports streaming
of incoming messages when using PAYLOAD mode. Previously, the incoming messages
would have been completely DOM parsed. For large messages, this is time
consuming and uses a significant amount of memory. Starting in 2.8.2, the
incoming messages can remain as a javax.xml.transform.Source
while being routed and, if nothing modifies the payload, can then be directly
streamed out to the target destination. For common "simple proxy" use cases
(example: from("cxf:...").to("cxf:...")), this can provide very significant
performance increases as well as significantly lowered memory
requirements.</p><p>However, there are cases where streaming may not be
appropriate or desired. Due to the streaming nature, invalid incoming XML may
not be caught until later in the processing chain. Also, certain actions may
require the message to be DOM parsed anyway (like WS-Security or message
tracing and such) in which case the advantages of the streaming is limited. At
this point, there are two ways to control the streaming:</p><ul><li>Endpoint
property: you can add "allowStreaming=false" as an endpoint property to turn
the streaming on/off.</li></ul><ul><li>Component property: the CxfComponent
object also has an allowStreaming property that can set the default for
endpoints created from t
hat component.</li></ul><p>Global system property: you can add a system
property of "org.apache.camel.component.cxf.streaming" to "false" to turn if
off. That sets the global default, but setting the endpoint property above will
override this value for that endpoint.</p><h3
id="BookInOnePage-UsingthegenericCXFDispatchmode">Using the generic CXF
Dispatch mode</h3><p>From 2.8.0, the camel-cxf component supports the generic
<a shape="rect" href="https://cxf.apache.org/docs/jax-ws-dispatch-api.html">CXF
dispatch mode</a> that can transport messages of arbitrary structures
(i.e., not bound to a specific XML schema). To use this mode, you simply omit
specifying the wsdlURL and serviceClass attributes of the CXF endpoint.</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
<script class="brush: xml; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[<cxf:cxfEndpoint
id="testEndpoint"
address="http://localhost:9000/SoapContext/SoapAnyPort">
<cxf:properties>
<entry key="dataFormat" value="PAYLOAD"/>
Modified: websites/production/camel/content/cache/main.pageCache
==============================================================================
Binary files - no diff available.
Modified: websites/production/camel/content/cxf.html
==============================================================================
--- websites/production/camel/content/cxf.html (original)
+++ websites/production/camel/content/cxf.html Wed Jul 22 14:20:21 2015
@@ -141,7 +141,7 @@
</bean>
]]></script>
-</div></div><p>Then, your endpoint can reference the
<code>CxfHeaderFilterStrategy</code>.</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div>Then, your endpoint can reference the
<code>CxfHeaderFilterStrategy</code>.<div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
<script class="brush: xml; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
<route>
<from
uri="cxf:bean:routerNoRelayEndpoint?headerFilterStrategy=#dropAllMessageHeadersStrategy"/>
@@ -275,7 +275,7 @@ public class WriteXmlDeclarationIntercep
}
]]></script>
-</div></div><p>You can add a customer interceptor like this and configure it
into you camel-cxf endpont</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
+</div></div>You can add a customer interceptor like this and configure it into
you camel-cxf endpont<div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
<script class="brush: xml; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
<cxf:cxfEndpoint id="routerEndpoint"
address="http://localhost:${CXFTestSupport.port2}/CXFGreeterRouterTest/CamelContext/RouterPort"
serviceClass="org.apache.hello_world_soap_http.GreeterImpl"
@@ -290,7 +290,7 @@ public class WriteXmlDeclarationIntercep
</cxf:properties>
</cxf:cxfEndpoint>
]]></script>
-</div></div><p>Or adding a message header for it like this if you are using
<strong>Camel 2.4</strong>.</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
+</div></div>Or adding a message header for it like this if you are using
<strong>Camel 2.4</strong>.<div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[ // set up the response context which force
start document
Map<String, Object> map = new HashMap<String, Object>();
map.put("org.apache.cxf.stax.force-start-document", Boolean.TRUE);
@@ -415,7 +415,7 @@ protected RouteBuilder createRouteBuilde
<process ref="InsertResponseOutHeaderProcessor" />
</route>
]]></script>
-</div></div><p>SOAP headers are propagated to and from Camel Message headers.
The Camel message header name is "org.apache.cxf.headers.Header.list" which is
a constant defined in CXF (org.apache.cxf.headers.Header.HEADER_LIST). The
header value is a List of CXF SoapHeader objects
(org.apache.cxf.binding.soap.SoapHeader). The following snippet is the
InsertResponseOutHeaderProcessor (that insert a new SOAP header in the response
message). The way to access SOAP headers in both
InsertResponseOutHeaderProcessor and InsertRequestOutHeaderProcessor are
actually the same. The only difference between the two processors is setting
the direction of the inserted SOAP header.</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div>SOAP headers are propagated to and from Camel Message headers. The
Camel message header name is "org.apache.cxf.headers.Header.list" which is a
constant defined in CXF (org.apache.cxf.headers.Header.HEADER_LIST). The header
value is a List of CXF SoapHeader objects
(org.apache.cxf.binding.soap.SoapHeader). The following snippet is the
InsertResponseOutHeaderProcessor (that insert a new SOAP header in the response
message). The way to access SOAP headers in both
InsertResponseOutHeaderProcessor and InsertRequestOutHeaderProcessor are
actually the same. The only difference between the two processors is setting
the direction of the inserted SOAP header.<div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
public static class InsertResponseOutHeaderProcessor implements Processor {
@@ -471,7 +471,7 @@ from(getRouterEndpointURI()).process(new
})
.to(getServiceEndpointURI());
]]></script>
-</div></div><h3 id="CXF-SOAPheadersarenotavailableinMESSAGEmode">SOAP headers
are not available in MESSAGE mode</h3><p>SOAP headers are not available in
MESSAGE mode as SOAP processing is skipped.</p><h3
id="CXF-HowtothrowaSOAPFaultfromCamel">How to throw a SOAP Fault from
Camel</h3><p>If you are using a <code>camel-cxf</code> endpoint to consume the
SOAP request, you may need to throw the SOAP Fault from the camel context.<br
clear="none"> Basically, you can use the <code>throwFault</code> DSL to do
that; it works for <code>POJO</code>, <code>PAYLOAD</code> and
<code>MESSAGE</code> data format.<br clear="none"> You can define the soap
fault like this</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
+</div></div>Since Camel 2.16.0, you can also use the same way as described in
sub-chapter "How to get and set SOAP headers in POJO mode" to set or get the
SOAP headers. <h3 id="CXF-SOAPheadersarenotavailableinMESSAGEmode">SOAP
headers are not available in MESSAGE mode</h3><p>SOAP headers are not available
in MESSAGE mode as SOAP processing is skipped.</p><h3
id="CXF-HowtothrowaSOAPFaultfromCamel">How to throw a SOAP Fault from
Camel</h3><p>If you are using a <code>camel-cxf</code> endpoint to consume the
SOAP request, you may need to throw the SOAP Fault from the camel context.<br
clear="none"> Basically, you can use the <code>throwFault</code> DSL to do
that; it works for <code>POJO</code>, <code>PAYLOAD</code> and
<code>MESSAGE</code> data format.<br clear="none"> You can define the soap
fault like this</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
SOAP_FAULT = new SoapFault(EXCEPTION_MESSAGE, SoapFault.FAULT_CODE_CLIENT);
Element detail = SOAP_FAULT.getOrCreateDetail();
@@ -479,11 +479,11 @@ Document doc = detail.getOwnerDocument()
Text tn = doc.createTextNode(DETAIL_TEXT);
detail.appendChild(tn);
]]></script>
-</div></div><p>Then throw it as you like</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div>Then throw it as you like<div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
from(routerEndpointURI).setFaultBody(constant(SOAP_FAULT));
]]></script>
-</div></div><p>If your CXF endpoint is working in the <code>MESSAGE</code>
data format, you could set the the SOAP Fault message in the message body and
set the response code in the message header.</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div>If your CXF endpoint is working in the <code>MESSAGE</code> data
format, you could set the the SOAP Fault message in the message body and set
the response code in the message header.<div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
from(routerEndpointURI).process(new Processor() {
@@ -497,7 +497,7 @@ from(routerEndpointURI).process(new Proc
});
]]></script>
-</div></div><p>Same for using POJO data format. You can set the SOAPFault on
the out body and also indicate it's a fault by calling
Message.setFault(true):</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
+</div></div>Same for using POJO data format. You can set the SOAPFault on the
out body and also indicate it's a fault by calling Message.setFault(true):<div
class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
from("direct:start").onException(SoapFault.class).maximumRedeliveries(0).handled(true)
.process(new Processor() {
@@ -553,7 +553,7 @@ from("direct:start").onExcepti
</cxf:properties>
]]></script>
-</div></div><p>You can produce a Camel message with attachment to send to a
CXF endpoint in Payload mode.</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div>You can produce a Camel message with attachment to send to a CXF
endpoint in Payload mode.<div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
Exchange exchange =
context.createProducerTemplate().send("direct:testEndpoint", new
Processor() {
@@ -606,7 +606,7 @@ Assert.assertEquals(560, image.getWidth(
Assert.assertEquals(300, image.getHeight());
]]></script>
-</div></div><p>You can also consume a Camel message received from a CXF
endpoint in Payload mode.</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
+</div></div>You can also consume a Camel message received from a CXF endpoint
in Payload mode.<div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
<script class="brush: java; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[
public static class MyProcessor implements Processor {
@@ -656,7 +656,7 @@ public static class MyProcessor implemen
}
}
]]></script>
-</div></div><p><strong>Message Mode:</strong> Attachments are not supported as
it does not process the message at all.</p><p><strong>CXF_MESSAGE
Mode</strong>: MTOM is supported, and Attachments can be retrieved by Camel
Message APIs mentioned above. Note that when receiving a multipart (i.e. MTOM)
message the default SOAPMessage to String converter will provide the complete
multipart payload on the body. If you require just the SOAP XML as a String,
you can set the message body with message.getSOAPPart(), and Camel convert can
do the rest of work for you.</p><h3
id="CXF-StreamingSupportinPAYLOADmode">Streaming Support in PAYLOAD
mode</h3><p>In 2.8.2, the camel-cxf component now supports streaming of
incoming messages when using PAYLOAD mode. Previously, the incoming messages
would have been completely DOM parsed. For large messages, this is time
consuming and uses a significant amount of memory. Starting in 2.8.2, the
incoming messages can remain as a javax.xml.transform.Source whi
le being routed and, if nothing modifies the payload, can then be directly
streamed out to the target destination. For common "simple proxy" use cases
(example: from("cxf:...").to("cxf:...")), this can provide very significant
performance increases as well as significantly lowered memory
requirements.</p><p>However, there are cases where streaming may not be
appropriate or desired. Due to the streaming nature, invalid incoming XML may
not be caught until later in the processing chain. Also, certain actions may
require the message to be DOM parsed anyway (like WS-Security or message
tracing and such) in which case the advantages of the streaming is limited. At
this point, there are two ways to control the streaming:</p><ul><li>Endpoint
property: you can add "allowStreaming=false" as an endpoint property to turn
the streaming on/off.</li></ul><ul><li>Component property: the CxfComponent
object also has an allowStreaming property that can set the default for
endpoints created from that
component.</li></ul><p>Global system property: you can add a system property
of "org.apache.camel.component.cxf.streaming" to "false" to turn if off. That
sets the global default, but setting the endpoint property above will override
this value for that endpoint.</p><h3
id="CXF-UsingthegenericCXFDispatchmode">Using the generic CXF Dispatch
mode</h3><p>From 2.8.0, the camel-cxf component supports the generic <a
shape="rect" href="https://cxf.apache.org/docs/jax-ws-dispatch-api.html">CXF
dispatch mode</a> that can transport messages of arbitrary structures
(i.e., not bound to a specific XML schema). To use this mode, you simply omit
specifying the wsdlURL and serviceClass attributes of the CXF endpoint.</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
+</div></div><strong>Message Mode:</strong> Attachments are not supported as it
does not process the message at all.<p><strong>CXF_MESSAGE Mode</strong>: MTOM
is supported, and Attachments can be retrieved by Camel Message APIs mentioned
above. Note that when receiving a multipart (i.e. MTOM) message the default
SOAPMessage to String converter will provide the complete multipart payload on
the body. If you require just the SOAP XML as a String, you can set the message
body with message.getSOAPPart(), and Camel convert can do the rest of work for
you.</p><h3 id="CXF-StreamingSupportinPAYLOADmode">Streaming Support in PAYLOAD
mode</h3><p>In 2.8.2, the camel-cxf component now supports streaming of
incoming messages when using PAYLOAD mode. Previously, the incoming messages
would have been completely DOM parsed. For large messages, this is time
consuming and uses a significant amount of memory. Starting in 2.8.2, the
incoming messages can remain as a javax.xml.transform.Source while bein
g routed and, if nothing modifies the payload, can then be directly streamed
out to the target destination. For common "simple proxy" use cases (example:
from("cxf:...").to("cxf:...")), this can provide very significant performance
increases as well as significantly lowered memory requirements.</p><p>However,
there are cases where streaming may not be appropriate or desired. Due to the
streaming nature, invalid incoming XML may not be caught until later in the
processing chain. Also, certain actions may require the message to be DOM
parsed anyway (like WS-Security or message tracing and such) in which case the
advantages of the streaming is limited. At this point, there are two ways to
control the streaming:</p><ul><li>Endpoint property: you can add
"allowStreaming=false" as an endpoint property to turn the streaming
on/off.</li></ul><ul><li>Component property: the CxfComponent object also has
an allowStreaming property that can set the default for endpoints created from
that compon
ent.</li></ul><p>Global system property: you can add a system property of
"org.apache.camel.component.cxf.streaming" to "false" to turn if off. That sets
the global default, but setting the endpoint property above will override this
value for that endpoint.</p><h3 id="CXF-UsingthegenericCXFDispatchmode">Using
the generic CXF Dispatch mode</h3><p>From 2.8.0, the camel-cxf component
supports the generic <a shape="rect"
href="https://cxf.apache.org/docs/jax-ws-dispatch-api.html">CXF dispatch
mode</a> that can transport messages of arbitrary structures (i.e., not
bound to a specific XML schema). To use this mode, you simply omit specifying
the wsdlURL and serviceClass attributes of the CXF endpoint.</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
<script class="brush: xml; gutter: false; theme: Default"
type="syntaxhighlighter"><![CDATA[<cxf:cxfEndpoint
id="testEndpoint"
address="http://localhost:9000/SoapContext/SoapAnyPort">
<cxf:properties>
<entry key="dataFormat" value="PAYLOAD"/>