camel-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
Subject camel git commit: Add camel-cxf cxfrs component docs to Gitbook
Date Thu, 30 Jun 2016 14:39:15 GMT
Repository: camel
Updated Branches:
  refs/heads/master 2c13c7ecf -> 02ace89eb

Add camel-cxf cxfrs component docs to Gitbook


Branch: refs/heads/master
Commit: 02ace89eb785c619113a9b7a2a7bd407551459f3
Parents: 2c13c7e
Author: Andrea Cosentino <>
Authored: Thu Jun 30 16:37:51 2016 +0200
Committer: Andrea Cosentino <>
Committed: Thu Jun 30 16:37:51 2016 +0200

 components/camel-cxf/src/main/docs/cxfrs.adoc | 368 +++++++++++++++++++++
 docs/user-manual/en/                |   1 +
 2 files changed, 369 insertions(+)
diff --git a/components/camel-cxf/src/main/docs/cxfrs.adoc b/components/camel-cxf/src/main/docs/cxfrs.adoc
new file mode 100644
index 0000000..06fa687
--- /dev/null
+++ b/components/camel-cxf/src/main/docs/cxfrs.adoc
@@ -0,0 +1,368 @@
+CXFRS Component
+When using CXF as a consumer, the link:cxf-bean-component.html[CXF Bean
+Component] 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.
+The *cxfrs:* component provides integration with
+[Apache CXF] for connecting to JAX-RS 1.1 and 2.0
+services hosted in CXF.
+Maven users will need to add the following dependency to their pom.xml
+for this component:
+   <groupId>org.apache.camel</groupId>
+   <artifactId>camel-cxf</artifactId>
+   <version>x.x.x</version>  <!-- use the same version as your Camel core
version -->
+URI format
+Where *address* represents the CXF endpoint's address
+Where *rsEndpoint* represents the spring bean's name which presents the
+CXFRS client or server
+For either style above, you can append options to the URI as follows:
+// component options: START
+The CXF-RS component supports 1 options which are listed below.
+{% raw %}
+| Name | Java Type | Description
+| headerFilterStrategy | HeaderFilterStrategy | To use a custom HeaderFilterStrategy to filter
header to and from Camel message.
+{% endraw %}
+// component options: END
+// endpoint options: START
+The CXF-RS component supports 29 endpoint options which are listed below:
+{% raw %}
+| Name | Group | Default | Java Type | Description
+| beanId | common |  | String | To lookup an existing configured CxfRsEndpoint. Must used
bean: as prefix.
+| address | common |  | String | The service publish address.
+| features | common |  | List | Set the feature list to the CxfRs endpoint.
+| loggingFeatureEnabled | common | false | boolean | This option enables CXF Logging Feature
which writes inbound and outbound REST messages to log.
+| loggingSizeLimit | common |  | int | To limit the total size of number of bytes the logger
will output when logging feature has been enabled.
+| modelRef | common |  | String | This option is used to specify the model file which is
useful for the resource class without annotation. When using this option then the service
class can be omitted to emulate document-only endpoints
+| providers | common |  | String | Set custom JAX-RS provider(s) list to the CxfRs endpoint.
You can specify a string with a list of providers to lookup in the registy separated by comma.
+| resourceClasses | common |  | List | The resource classes which you want to export as REST
service. Multiple classes can be separated by comma.
+| schemaLocations | common |  | List | Sets the locations of the schema(s) which can be used
to validate the incoming XML or JAXB-driven JSON.
+| skipFaultLogging | common | false | boolean | This option controls whether the PhaseInterceptorChain
skips logging the Fault that it catches.
+| bindingStyle | consumer | Default | BindingStyle | Sets how requests and responses will
be mapped to/from Camel. Two values are possible: SimpleConsumer: This binding style processes
request parameters multiparts etc. and maps them to IN headers IN attachments and to the message
body. It aims to eliminate low-level processing of org.apache.cxf.message.MessageContentsList.
It also also adds more flexibility and simplicity to the response mapping. Only available
for consumers. Default: The default style. For consumers this passes on a MessageContentsList
to the route requiring low-level processing in the route. This is the traditional binding
style which simply dumps the org.apache.cxf.message.MessageContentsList coming in from the
CXF stack onto the IN message body. The user is then responsible for processing it according
to the contract defined by the JAX-RS method signature. Custom: allows you to specify a custom
binding through the binding option.
+| bridgeErrorHandler | consumer | false | boolean | Allows for bridging the consumer to the
Camel routing Error Handler which mean any exceptions occurred while the consumer is trying
to pickup incoming messages or the likes will now be processed as a message and handled by
the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler
to deal with exceptions that will be logged at WARN/ERROR level and ignored.
+| exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use
a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options
is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR
level and ignored.
+| hostnameVerifier | producer |  | HostnameVerifier | The hostname verifier to be used. Use
the notation to reference a HostnameVerifier from the registry.
+| sslContextParameters | producer |  | SSLContextParameters | The Camel SSL setting reference.
Use the notation to reference the SSL Context.
+| throwExceptionOnFailure | producer | true | boolean | This option tells the CxfRsProducer
to inspect return codes and will generate an Exception if the return code is larger than 207.
+| httpClientAPI | producer (advanced) | true | boolean | If it is true the CxfRsProducer
will use the HttpClientAPI to invoke the service. If it is false the CxfRsProducer will use
the ProxyClientAPI to invoke the service
+| ignoreDeleteMethodMessageBody | producer (advanced) | false | boolean | This option is
used to tell CxfRsProducer to ignore the message body of the DELETE method when using HTTP
+| maxClientCacheSize | producer (advanced) | 10 | int | This option allows you to configure
the maximum size of the cache. The implementation caches CXF clients or ClientFactoryBean
in CxfProvider and CxfRsProvider.
+| binding | advanced |  | CxfRsBinding | To use a custom CxfBinding to control the binding
between Camel Message and CXF Message.
+| bus | advanced |  | Bus | To use a custom configured CXF Bus.
+| continuationTimeout | advanced | 30000 | long | This option is used to set the CXF continuation
timeout which could be used in CxfConsumer by default when the CXF server is using Jetty or
Servlet transport.
+| cxfRsEndpointConfigurer | advanced |  | CxfRsEndpointConfigurer | This option could apply
the implementation of org.apache.camel.component.cxf.jaxrs.CxfRsEndpointConfigurer which supports
to configure the CXF endpoint in programmatic way. User can configure the CXF server and client
by implementing configureServer/Client method of CxfEndpointConfigurer.
+| defaultBus | advanced | false | boolean | Will set the default bus when CXF endpoint create
a bus by itself
+| exchangePattern | advanced | InOnly | ExchangePattern | Sets the default exchange pattern
when creating an exchange
+| headerFilterStrategy | advanced |  | HeaderFilterStrategy | To use a custom HeaderFilterStrategy
to filter header to and from Camel message.
+| performInvocation | advanced | false | boolean | When the option is true Camel will perform
the invocation of the resource class instance and put the response object into the exchange
for further processing.
+| propagateContexts | advanced | false | boolean | When the option is true JAXRS UriInfo
HttpHeaders Request and SecurityContext contexts will be available to custom CXFRS processors
as typed Camel exchange properties. These contexts can be used to analyze the current requests
using JAX-RS API.
+| synchronous | advanced | false | boolean | Sets whether synchronous processing should be
strictly used or Camel is allowed to use asynchronous processing (if supported).
+{% endraw %}
+// endpoint options: END
+You can also configure the CXF REST endpoint through the spring
+configuration. Since there are lots of difference between the CXF REST
+client and CXF REST Server, we provide different configuration for
+them. Please check out the
+file] and[CXF JAX-RS
+documentation] for more information.
+How to configure the REST endpoint in Camel
+schema file], there are two elements for the REST endpoint definition.
+*cxf:rsServer* for REST consumer, *cxf:rsClient* for REST producer. +
+ You can find a Camel REST service route configuration example here.
+How to override the CXF producer address from message header
+The `camel-cxfrs` producer supports to override the services address by
+setting the message with the key of "CamelDestinationOverrideUrl".
+ // set up the service address from the message header to override the setting of CXF endpoint
+ exchange.getIn().setHeader(Exchange.DESTINATION_OVERRIDE_URL, constant(getServiceAddress()));
+Consuming a REST Request - Simple Binding Style
+*Available as of Camel 2.11*
+The `Default` binding style is rather low-level, requiring the user to
+manually process the `MessageContentsList` object coming into the route.
+Thus, it tightly couples the route logic with the method signature and
+parameter indices of the JAX-RS operation. Somewhat inelegant, difficult
+and error-prone.
+In contrast, the `SimpleConsumer` binding style performs the following
+mappings, in order to *make the request data more accessible* to you
+within the Camel Message:
+* JAX-RS Parameters (@HeaderParam, @QueryParam, etc.) are injected as IN
+message headers. The header name matches the value of the annotation.
+* The request entity (POJO or other type) becomes the IN message body.
+If a single entity cannot be identified in the JAX-RS method signature,
+it falls back to the original `MessageContentsList`.
+* Binary `@Multipart` body parts become IN message attachments,
+supporting `DataHandler`, `InputStream`, `DataSource` and CXF's
+`Attachment` class.
+* Non-binary `@Multipart` body parts are mapped as IN message headers.
+The header name matches the Body Part name.
+Additionally, the following rules apply to the *Response mapping*:
+* If the message body type is different to ``
+(user-built response), a new `Response` is created and the message body
+is set as the entity (so long it's not null). The response status code
+is taken from the `Exchange.HTTP_RESPONSE_CODE` header, or defaults to
+200 OK if not present.
+* If the message body type is equal to ``, it
+means that the user has built a custom response, and therefore it is
+respected and it becomes the final response.
+* In all cases, Camel headers permitted by custom or default
+`HeaderFilterStrategy` are added to the HTTP response.
+Enabling the Simple Binding Style
+This binding style can be activated by setting the `bindingStyle`
+parameter in the consumer endpoint to value `SimpleConsumer`:
+  from("cxfrs:bean:rsServer?bindingStyle=SimpleConsumer")
+    .to("log:TEST?showAll=true");
+Examples of request binding with different method signatures
+Below is a list of method signatures along with the expected result from
+the Simple binding.
+*`public Response doAction(BusinessObject request);`* +
+ Request payload is placed in IN message body, replacing the original
+*`public Response doAction(BusinessObject request, @HeaderParam("abcd") String abcd, @QueryParam("defg")
String defg);`* 
+ Request payload placed in IN message body, replacing the original
+MessageContentsList. Both request params mapped as IN message headers
+with names abcd and defg.
+*`public Response doAction(@HeaderParam("abcd") String abcd, @QueryParam("defg") String defg);`*

+ Both request params mapped as IN message headers with names abcd and
+defg. The original MessageContentsList is preserved, even though it only
+contains the 2 parameters.
+*`public Response doAction(@Multipart(value="body1") BusinessObject request, @Multipart(value="body2")
BusinessObject request2);`* 
+ The first parameter is transferred as a header with name body1, and the
+second one is mapped as header body2. The original MessageContentsList
+is preserved as the IN message body.
+*`public Response doAction(InputStream abcd);`* 
+ The InputStream is unwrapped from the MessageContentsList and preserved
+as the IN message body.
+*`public Response doAction(DataHandler abcd);`* 
+ The DataHandler is unwrapped from the MessageContentsList and preserved
+as the IN message body.
+More examples of the Simple Binding Style
+Given a JAX-RS resource class with this method:
+    @POST @Path("/customers/{type}")
+    public Response newCustomer(Customer customer, @PathParam("type") String type, @QueryParam("active")
@DefaultValue("true") boolean active) {
+        return null;
+    }
+Serviced by the following route:
+    from("cxfrs:bean:rsServer?bindingStyle=SimpleConsumer")
+        .recipientList(simple("direct:${header.operationName}"));
+    from("direct:newCustomer")
+        .log("Request: type=${header.type}, active=${}, customerData=${body}");
+The following HTTP request with XML payload (given that the Customer DTO
+is JAXB-annotated):
+POST /customers/gold?active=true
+  <fullName>Raul Kripalani</fullName>
+  <country>Spain</country>
+  <project>Apache Camel</project>
+Will print the message:
+Request: type=gold, active=true, customerData=<Customer.toString() representation>
+For more examples on how to process requests and write responses can be
+Consuming a REST Request - Default Binding Style
+The[CXF JAXRS front end]
+implements the[JAX-RS (JSR-311) API], so we can
+export the resources classes as a REST service. And we leverage the
+[CXF Invoker
+API] to turn a REST request into a normal Java object method
+invocation. +
+ Unlike the link:restlet.html[Camel Restlet] component, you don't need
+to specify the URI template within your endpoint, CXF takes care of the
+REST request URI to resource class method mapping according to the
+JSR-311 specification. All you need to do in Camel is delegate this
+method request to a right processor or endpoint.
+Here is an example of a CXFRS route...
+And the corresponding resource class used to configure the endpoint...
+INFO:*Note about resource classes*
+By default, JAX-RS resource classes are *only*used to configure JAX-RS
+properties. Methods will *not* be executed during routing of messages to
+the endpoint. Instead, it is the responsibility of the route to do all
+Note that starting from Camel 2.15 it is also sufficient to provide an
+interface only as opposed to a no-op service implementation class for
+the default mode.
+Starting from Camel 2.15, if a *performInvocation* option is enabled,
+the service implementation will be invoked first, the response will be
+set on the Camel exchange and the route execution will continue as
+usual. This can be useful for integrating the existing JAX-RS implementations into Camel
routes and
+for post-processing JAX-RS Responses in custom processors.
+How to invoke the REST service through camel-cxfrs producer
+The[CXF JAXRS front end]
+proxy-based client API], with this API you can invoke the remote REST
+service through a proxy. The `camel-cxfrs` producer is based on this
+API]. +
+ You just need to specify the operation name in the message header and
+prepare the parameter in the message body, the camel-cxfrs producer will
+generate right REST request for you.
+Here is an example:
+The[CXF JAXRS front end] also
+http centric client API]. You can also invoke this API from
+`camel-cxfrs` producer. You need to specify the
+the[HTTP_METHOD] and
+let the producer use the http centric client API by using the URI option
+*httpClientAPI* or by setting the message header
+You can turn the response object to the type class specified with the
+From Camel 2.1, we also support to specify the query parameters from
+cxfrs URI for the CXFRS http centric client.
+Error formatting macro: snippet: java.lang.IndexOutOfBoundsException:
+Index: 20, Size: 20
+To support the Dynamical routing, you can override the URI's query
+parameters by using the CxfConstants.CAMEL_CXF_RS_QUERY_MAP header to
+set the parameter map for it.
diff --git a/docs/user-manual/en/ b/docs/user-manual/en/
index fce1d5a..88fcf63 100644
--- a/docs/user-manual/en/
+++ b/docs/user-manual/en/
@@ -147,6 +147,7 @@
         * [Crypto Digital Signatures](crypto-digital-signatures.adoc)
     * [CSV](csv.adoc)
     * [CXF](cxf.adoc)
+        * [CXFRS](cxfrs.adoc)
         * [CXF Transport](cxf-transport.adoc)
     * [Disruptor](disruptor.adoc)
     * [DNS](dns.adoc)

View raw message