You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2016/05/27 07:43:16 UTC

[1/2] camel git commit: Added camel-snmp docs to Gitbook

Repository: camel
Updated Branches:
  refs/heads/master e09d69644 -> ed4aaa4c5


Added camel-snmp docs to Gitbook


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/8b4a5108
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/8b4a5108
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/8b4a5108

Branch: refs/heads/master
Commit: 8b4a5108a2e9ca6b7a3751c82e5563c77e1a09ec
Parents: e09d696
Author: Andrea Cosentino <an...@gmail.com>
Authored: Fri May 27 09:34:29 2016 +0200
Committer: Andrea Cosentino <an...@gmail.com>
Committed: Fri May 27 09:34:29 2016 +0200

----------------------------------------------------------------------
 components/camel-snmp/src/main/docs/snmp.adoc | 189 +++++++++++++++++++++
 docs/user-manual/en/SUMMARY.md                |   1 +
 2 files changed, 190 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/8b4a5108/components/camel-snmp/src/main/docs/snmp.adoc
----------------------------------------------------------------------
diff --git a/components/camel-snmp/src/main/docs/snmp.adoc b/components/camel-snmp/src/main/docs/snmp.adoc
new file mode 100644
index 0000000..2a4ecb3
--- /dev/null
+++ b/components/camel-snmp/src/main/docs/snmp.adoc
@@ -0,0 +1,189 @@
+[[SNMP-SNMPComponent]]
+SNMP Component
+~~~~~~~~~~~~~~
+
+*Available as of Camel 2.1*
+
+The *snmp:* component gives you the ability to poll SNMP capable devices
+or receiving traps.
+
+Maven users will need to add the following dependency to their `pom.xml`
+for this component:
+
+[source,xml]
+------------------------------------------------------------
+<dependency>
+    <groupId>org.apache.camel</groupId>
+    <artifactId>camel-snmp</artifactId>
+    <version>x.x.x</version>
+    <!-- use the same version as your Camel core version -->
+</dependency>
+------------------------------------------------------------
+
+[[SNMP-URIformat]]
+URI format
+^^^^^^^^^^
+
+[source,java]
+--------------------------------
+snmp://hostname[:port][?Options]
+--------------------------------
+
+The component supports polling OID values from an SNMP enabled device
+and receiving traps.
+
+You can append query options to the URI in the following format,
+`?option=value&option=value&...`
+
+[[SNMP-Options]]
+Options
+^^^^^^^
+
+
+// component options: START
+The SNMP component has no options.
+// component options: END
+
+
+
+// endpoint options: START
+The SNMP component supports 36 endpoint options which are listed below:
+
+{% raw %}
+[width="100%",cols="2s,1,1m,1m,5",options="header"]
+|=======================================================================
+| Name | Group | Default | Java Type | Description
+| host | consumer |  | String | *Required* Hostname of the SNMP enabled device
+| port | consumer |  | Integer | *Required* Port number of the SNMP enabled device
+| 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.
+| delay | consumer | 60000 | long | Sets update rate in seconds
+| oids | consumer |  | String | Defines which values you are interested in. Please have a look at the Wikipedia to get a better understanding. You may provide a single OID or a coma separated list of OIDs. Example: oids=1.3.6.1.2.1.1.3.01.3.6.1.2.1.25.3.2.1.5.11.3.6.1.2.1.25.3.5.1.1.11.3.6.1.2.1.43.5.1.1.11.1
+| protocol | consumer | udp | String | Here you can select which protocol to use. You can use either udp or tcp.
+| retries | consumer | 2 | int | Defines how often a retry is made before canceling the request.
+| sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
+| snmpCommunity | consumer | public | String | Sets the community octet string for the snmp request.
+| snmpContextEngineId | consumer |  | String | Sets the context engine ID field of the scoped PDU.
+| snmpContextName | consumer |  | String | Sets the context name field of this scoped PDU.
+| snmpVersion | consumer | 0 | int | Sets the snmp version for the request. The value 0 means SNMPv1 1 means SNMPv2c and the value 3 means SNMPv3
+| timeout | consumer | 1500 | int | Sets the timeout value for the request in millis.
+| type | consumer |  | SnmpActionType | Which operation to perform such as poll trap etc.
+| 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.
+| pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
+| exchangePattern | advanced | InOnly | ExchangePattern | Sets the default exchange pattern when creating an exchange
+| synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
+| backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
+| backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
+| backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
+| greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
+| initialDelay | scheduler | 1000 | long | Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
+| runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
+| scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
+| scheduler | scheduler | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either camel-spring or camel-quartz2 component
+| schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
+| startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
+| timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
+| useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
+| authenticationPassphrase | security |  | String | The authentication passphrase. If not null authenticationProtocol must also be not null. RFC3414 11.2 requires passphrases to have a minimum length of 8 bytes. If the length of authenticationPassphrase is less than 8 bytes an IllegalArgumentException is thrown.
+| authenticationProtocol | security |  | String | Authentication protocol to use if security level is set to enable authentication The possible values are: MD5 SHA1
+| privacyPassphrase | security |  | String | The privacy passphrase. If not null privacyProtocol must also be not null. RFC3414 11.2 requires passphrases to have a minimum length of 8 bytes. If the length of authenticationPassphrase is less than 8 bytes an IllegalArgumentException is thrown.
+| privacyProtocol | security |  | String | The privacy protocol ID to be associated with this user. If set to null this user only supports unencrypted messages.
+| securityLevel | security | 3 | int | Sets the security level for this target. The supplied security level must be supported by the security model dependent information associated with the security name set for this target. The value 1 means: No authentication and no encryption. Anyone can create and read messages with this security level The value 2 means: Authentication and no encryption. Only the one with the right authentication key can create messages with this security level but anyone can read the contents of the message. The value 3 means: Authentication and encryption. Only the one with the right authentication key can create messages with this security level and only the one with the right encryption/decryption key can read the contents of the message.
+| securityName | security |  | String | Sets the security name to be used with this target.
+|=======================================================================
+{% endraw %}
+// endpoint options: END
+
+
+[[SNMP-Theresultofapoll]]
+The result of a poll
+^^^^^^^^^^^^^^^^^^^^
+
+Given the situation, that I poll for the following OIDs:
+
+*OIDs*
+
+[source,java]
+-------------------------
+1.3.6.1.2.1.1.3.0
+1.3.6.1.2.1.25.3.2.1.5.1
+1.3.6.1.2.1.25.3.5.1.1.1
+1.3.6.1.2.1.43.5.1.1.11.1
+-------------------------
+
+The result will be the following:
+
+*Result of toString conversion*
+
+[source,xml]
+-----------------------------------------------------------
+<?xml version="1.0" encoding="UTF-8"?>
+<snmp>
+  <entry>
+    <oid>1.3.6.1.2.1.1.3.0</oid>
+    <value>6 days, 21:14:28.00</value>
+  </entry>
+  <entry>
+    <oid>1.3.6.1.2.1.25.3.2.1.5.1</oid>
+    <value>2</value>
+  </entry>
+  <entry>
+    <oid>1.3.6.1.2.1.25.3.5.1.1.1</oid>
+    <value>3</value>
+  </entry>
+  <entry>
+    <oid>1.3.6.1.2.1.43.5.1.1.11.1</oid>
+    <value>6</value>
+  </entry>
+  <entry>
+    <oid>1.3.6.1.2.1.1.1.0</oid>
+    <value>My Very Special Printer Of Brand Unknown</value>
+  </entry>
+</snmp>
+-----------------------------------------------------------
+
+As you maybe recognized there is one more result than
+requested....1.3.6.1.2.1.1.1.0. +
+ This one is filled in by the device automatically in this special case.
+So it may absolutely happen, that you receive more than you
+requested...be prepared.
+
+[[SNMP-Examples]]
+Examples
+^^^^^^^^
+
+Polling a remote device:
+
+[source,java]
+---------------------------------------------------------------------
+snmp:192.168.178.23:161?protocol=udp&type=POLL&oids=1.3.6.1.2.1.1.5.0
+---------------------------------------------------------------------
+
+Setting up a trap receiver (*Note that no OID info is needed here!*):
+
+[source,java]
+-----------------------------------------
+snmp:127.0.0.1:162?protocol=udp&type=TRAP
+-----------------------------------------
+
+*From Camel 2.10.0*, you can get the community of SNMP TRAP with message
+header 'securityName', +
+ peer address of the SNMP TRAP with message header 'peerAddress'.
+
+Routing example in Java: (converts the SNMP PDU to XML String)
+
+[source,java]
+------------------------------------------------------------------------------
+from("snmp:192.168.178.23:161?protocol=udp&type=POLL&oids=1.3.6.1.2.1.1.5.0").
+convertBodyTo(String.class).
+to("activemq:snmp.states");
+------------------------------------------------------------------------------
+
+[[SNMP-SeeAlso]]
+See Also
+^^^^^^^^
+
+* link:configuring-camel.html[Configuring Camel]
+* link:component.html[Component]
+* link:endpoint.html[Endpoint]
+* link:getting-started.html[Getting Started]
+

http://git-wip-us.apache.org/repos/asf/camel/blob/8b4a5108/docs/user-manual/en/SUMMARY.md
----------------------------------------------------------------------
diff --git a/docs/user-manual/en/SUMMARY.md b/docs/user-manual/en/SUMMARY.md
index 0ed562a..de04129 100644
--- a/docs/user-manual/en/SUMMARY.md
+++ b/docs/user-manual/en/SUMMARY.md
@@ -240,6 +240,7 @@
     * [SJMS Batch](sjms-batch.adoc)
     * [Slack](slack.adoc)
     * [SMPP](smpp.adoc)
+    * [SNMP](snmp.adoc)
     * [Telegram](telegram.adoc)
     * [Twitter](twitter.adoc)
     * [Websocket](websocket.adoc)


[2/2] camel git commit: Added camel-soap docs to Gitbook

Posted by ac...@apache.org.
Added camel-soap docs to Gitbook


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/ed4aaa4c
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/ed4aaa4c
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/ed4aaa4c

Branch: refs/heads/master
Commit: ed4aaa4c5bc21efa918a350f0c0805415dff2b05
Parents: 8b4a510
Author: Andrea Cosentino <an...@gmail.com>
Authored: Fri May 27 09:42:43 2016 +0200
Committer: Andrea Cosentino <an...@gmail.com>
Committed: Fri May 27 09:42:43 2016 +0200

----------------------------------------------------------------------
 components/camel-soap/src/main/docs/soap.adoc | 289 +++++++++++++++++++++
 docs/user-manual/en/SUMMARY.md                |   3 +-
 2 files changed, 291 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/ed4aaa4c/components/camel-soap/src/main/docs/soap.adoc
----------------------------------------------------------------------
diff --git a/components/camel-soap/src/main/docs/soap.adoc b/components/camel-soap/src/main/docs/soap.adoc
new file mode 100644
index 0000000..cb27ab9
--- /dev/null
+++ b/components/camel-soap/src/main/docs/soap.adoc
@@ -0,0 +1,289 @@
+[[SOAP-SOAPDataFormat]]
+SOAP DataFormat
+~~~~~~~~~~~~~~~
+
+*Available as of Camel 2.3*
+
+SOAP is a link:data-format.html[Data Format] which uses JAXB2 and JAX-WS
+annotations to marshal and unmarshal SOAP payloads. It provides the
+basic features of Apache CXF without need for the CXF Stack.
+
+*Supported SOAP versions*
+
+SOAP 1.1 is supported by default. SOAP 1.2 is supported from Camel 2.11
+onwards.
+
+*Namespace prefix mapping*
+
+See link:jaxb.html[JAXB] for details how you can control namespace
+prefix mappings when marshalling using link:soap.html[SOAP] data format.
+
+[[SOAP-ElementNameStrategy]]
+ElementNameStrategy
+^^^^^^^^^^^^^^^^^^^
+
+An element name strategy is used for two purposes. The first is to find
+a xml element name for a given object and soap action when marshaling
+the object into a SOAP message. The second is to find an Exception class
+for a given soap fault name.
+
+[width="100%",cols="10%,90%",options="header",]
+|=======================================================================
+|Strategy |Usage
+
+|QNameStrategy |Uses a fixed qName that is configured on instantiation. Exception lookup
+is not supported
+
+|TypeNameStrategy |Uses the name and namespace from the @XMLType annotation of the given
+type. If no namespace is set then package-info is used. Exception lookup
+is not supported
+
+|ServiceInterfaceStrategy |Uses information from a webservice interface to determine the type name
+and to find the exception class for a SOAP fault
+|=======================================================================
+
+If you have generated the web service stub code with cxf-codegen or a
+similar tool then you probably will want to use the
+ServiceInterfaceStrategy. In the case you have no annotated service
+interface you should use QNameStrategy or TypeNameStrategy.
+
+[[SOAP-UsingtheJavaDSL]]
+Using the Java DSL
+^^^^^^^^^^^^^^^^^^
+
+The following example uses a named DataFormat of _soap_ which is
+configured with the package com.example.customerservice to initialize
+the
+http://java.sun.com/javase/6/docs/api/javax/xml/bind/JAXBContext.html[JAXBContext].
+The second parameter is the ElementNameStrategy. The route is able to
+marshal normal objects as well as exceptions. (Note the below just sends
+a SOAP Envelope to a queue. A web service provider would actually need
+to be listening to the queue for a SOAP call to actually occur, in which
+case it would be a one way SOAP request. If you need request reply then
+you should look at the next example.)
+
+[source,java]
+-------------------------------------------------------------------------------------------------------------------------------------
+SoapJaxbDataFormat soap = new SoapJaxbDataFormat("com.example.customerservice", new ServiceInterfaceStrategy(CustomerService.class));
+from("direct:start")
+  .marshal(soap)
+  .to("jms:myQueue");
+-------------------------------------------------------------------------------------------------------------------------------------
+
+TIP: *See also*
+As the SOAP dataformat inherits from the link:jaxb.html[JAXB] dataformat
+most settings apply here as well
+
+
+[[SOAP-UsingSOAP1.2]]
+Using SOAP 1.2
+++++++++++++++
+
+*Available as of Camel 2.11*
+
+[source,java]
+-------------------------------------------------------------------------------------------------------------------------------------
+SoapJaxbDataFormat soap = new SoapJaxbDataFormat("com.example.customerservice", new ServiceInterfaceStrategy(CustomerService.class));
+soap.setVersion("1.2");
+from("direct:start")
+  .marshal(soap)
+  .to("jms:myQueue");
+-------------------------------------------------------------------------------------------------------------------------------------
+
+When using XML DSL there is a version attribute you can set on the
+<soapjaxb> element.
+
+[source,xml]
+-----------------------------------------------------------------------------------------------------
+    <!-- Defining a ServiceInterfaceStrategy for retrieving the element name when marshalling -->
+    <bean id="myNameStrategy" class="org.apache.camel.dataformat.soap.name.ServiceInterfaceStrategy">
+        <constructor-arg value="com.example.customerservice.CustomerService"/>
+    <constructor-arg value="true"/>
+    </bean>
+-----------------------------------------------------------------------------------------------------
+
+And in the Camel route
+
+[source,xml]
+---------------------------------------------------------------------------------------------------------------
+<route>
+  <from uri="direct:start"/>
+  <marshal>
+    <soapjaxb contentPath="com.example.customerservice" version="1.2" elementNameStrategyRef="myNameStrategy"/>
+  </marshal>
+  <to uri="jms:myQueue"/>
+</route>
+---------------------------------------------------------------------------------------------------------------
+
+[[SOAP-Multi-partMessages]]
+Multi-part Messages
+^^^^^^^^^^^^^^^^^^^
+
+*Available as of Camel 2.8.1*
+
+Multi-part SOAP messages are supported by the ServiceInterfaceStrategy.
+The ServiceInterfaceStrategy must be initialized with a service
+interface definition that is annotated in accordance with JAX-WS 2.2 and
+meets the requirements of the Document Bare style. The target method
+must meet the following criteria, as per the JAX-WS specification: 1) it
+must have at most one `in` or `in/out` non-header parameter, 2) if it
+has a return type other than `void` it must have no `in/out` or `out`
+non-header parameters, 3) if it it has a return type of `void` it must
+have at most one `in/out` or `out` non-header parameter.
+
+The ServiceInterfaceStrategy should be initialized with a boolean
+parameter that indicates whether the mapping strategy applies to the
+request parameters or response parameters.
+
+[source,java]
+-------------------------------------------------------------------------------------------------------------------------------------------
+ServiceInterfaceStrategy strat =  new ServiceInterfaceStrategy(com.example.customerservice.multipart.MultiPartCustomerService.class, true);
+SoapJaxbDataFormat soapDataFormat = new SoapJaxbDataFormat("com.example.customerservice.multipart", strat);
+-------------------------------------------------------------------------------------------------------------------------------------------
+
+[[SOAP-Multi-partRequest]]
+Multi-part Request
+++++++++++++++++++
+
+The payload parameters for a multi-part request are initiazlied using a
+`BeanInvocation` object that reflects the signature of the target
+operation. The camel-soap DataFormat maps the content in the
+`BeanInvocation` to fields in the SOAP header and body in accordance
+with the JAX-WS mapping when the `marshal()` processor is invoked.
+
+[source,java]
+----------------------------------------------------------------------------------------
+BeanInvocation beanInvocation = new BeanInvocation();
+
+// Identify the target method
+beanInvocation.setMethod(MultiPartCustomerService.class.getMethod("getCustomersByName", 
+    GetCustomersByName.class, com.example.customerservice.multipart.Product.class));
+
+// Populate the method arguments
+GetCustomersByName getCustomersByName = new GetCustomersByName();
+getCustomersByName.setName("Dr. Multipart");
+                
+Product product = new Product();
+product.setName("Multiuse Product");
+product.setDescription("Useful for lots of things.");
+                
+Object[] args = new Object[] {getCustomersByName, product};
+
+// Add the arguments to the bean invocation
+beanInvocation.setArgs(args);
+
+// Set the bean invocation object as the message body
+exchange.getIn().setBody(beanInvocation); 
+----------------------------------------------------------------------------------------
+
+[[SOAP-Multi-partResponse]]
+Multi-part Response
++++++++++++++++++++
+
+A multi-part soap response may include an element in the soap body and
+will have one or more elements in the soap header. The camel-soap
+DataFormat will unmarshall the element in the soap body (if it exists)
+and place it onto the body of the out message in the exchange. Header
+elements will *not* be marshaled into their JAXB mapped object types.
+Instead, these elements are placed into the camel out message header
+`org.apache.camel.dataformat.soap.UNMARSHALLED_HEADER_LIST`. The
+elements will appear either as element instance values, or as
+JAXBElement values, depending upon the setting for the
+`ignoreJAXBElement` property. This property is inherited from
+camel-jaxb.
+
+You can also have the camel-soap DataFormate ignore header content
+all-together by setting the `ignoreUnmarshalledHeaders` value to `true`.
+
+[[SOAP-HolderObjectmapping]]
+Holder Object mapping
++++++++++++++++++++++
+
+JAX-WS specifies the use of a type-parameterized `javax.xml.ws.Holder`
+object for `In/Out` and `Out` parameters. A `Holder` object may be used
+when building the `BeanInvocation`, or you may use an instance of the
+parameterized-type directly. The camel-soap DataFormat marshals Holder
+values in accordance with the JAXB mapping for the class of the
+`Holder`'s value. No mapping is provided for `Holder` objects in an
+unmarshalled response.
+
+[[SOAP-Examples]]
+Examples
+^^^^^^^^
+
+[[SOAP-Webserviceclient]]
+Webservice client
++++++++++++++++++
+
+The following route supports marshalling the request and unmarshalling a
+response or fault.
+
+[source,java]
+---------------------------------------------------------------------------------------------------------------------------------------
+String WS_URI = "cxf://http://myserver/customerservice?serviceClass=com.example.customerservice&dataFormat=MESSAGE";
+SoapJaxbDataFormat soapDF = new SoapJaxbDataFormat("com.example.customerservice", new ServiceInterfaceStrategy(CustomerService.class));
+from("direct:customerServiceClient")
+  .onException(Exception.class)
+    .handled(true)
+    .unmarshal(soapDF)
+  .end()
+  .marshal(soapDF)
+  .to(WS_URI)
+  .unmarshal(soapDF);
+---------------------------------------------------------------------------------------------------------------------------------------
+
+The below snippet creates a proxy for the service interface and makes a
+SOAP call to the above route.
+
+[source,java]
+---------------------------------------------------------------------------------------------------
+import org.apache.camel.Endpoint;
+import org.apache.camel.component.bean.ProxyHelper;
+...
+
+Endpoint startEndpoint = context.getEndpoint("direct:customerServiceClient");
+ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+// CustomerService below is the service endpoint interface, *not* the javax.xml.ws.Service subclass
+CustomerService proxy = ProxyHelper.createProxy(startEndpoint, classLoader, CustomerService.class);
+GetCustomersByNameResponse response = proxy.getCustomersByName(new GetCustomersByName());
+---------------------------------------------------------------------------------------------------
+
+[[SOAP-WebserviceServer]]
+Webservice Server
++++++++++++++++++
+
+Using the following route sets up a webservice server that listens on
+jms queue customerServiceQueue and processes requests using the class
+CustomerServiceImpl. The customerServiceImpl of course should implement
+the interface CustomerService. Instead of directly instantiating the
+server class it could be defined in a spring context as a regular bean.
+
+[source,java]
+---------------------------------------------------------------------------------------------------------------------------------------
+SoapJaxbDataFormat soapDF = new SoapJaxbDataFormat("com.example.customerservice", new ServiceInterfaceStrategy(CustomerService.class));
+CustomerService serverBean = new CustomerServiceImpl();
+from("jms://queue:customerServiceQueue")
+  .onException(Exception.class)
+    .handled(true)
+    .marshal(soapDF)
+  .end()
+  .unmarshal(soapDF)
+  .bean(serverBean)
+  .marshal(soapDF);
+---------------------------------------------------------------------------------------------------------------------------------------
+
+[[SOAP-Dependencies]]
+Dependencies
+^^^^^^^^^^^^
+
+To use the SOAP dataformat in your camel routes you need to add the
+following dependency to your pom.
+
+[source,xml]
+-------------------------------------
+<dependency>
+  <groupId>org.apache.camel</groupId>
+  <artifactId>camel-soap</artifactId>
+  <version>2.3.0</version>
+</dependency>
+-------------------------------------

http://git-wip-us.apache.org/repos/asf/camel/blob/ed4aaa4c/docs/user-manual/en/SUMMARY.md
----------------------------------------------------------------------
diff --git a/docs/user-manual/en/SUMMARY.md b/docs/user-manual/en/SUMMARY.md
index de04129..ba914b1 100644
--- a/docs/user-manual/en/SUMMARY.md
+++ b/docs/user-manual/en/SUMMARY.md
@@ -266,7 +266,8 @@
     * [Jaxb](jaxb.adoc)
     * [Jibx](jibx.adoc)
     * [Lzf](lzf.adoc)
-    * [Protobuf](protobuf.adoc)
+    * [SOAP](soap.adoc)
+    * [YAML](yaml.adoc)
     * [XML JSON](xmljson.adoc)
     * [YAML](yaml.adoc)