CAMEL-14191: EIP docs - Add links to last EIP patterns and add new pages if missing content
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/MessageHistory.gif b/docs/user-manual/modules/ROOT/assets/images/eip/MessageHistory.gif
new file mode 100644
index 0000000..fd40eed
--- /dev/null
+++ b/docs/user-manual/modules/ROOT/assets/images/eip/MessageHistory.gif
Binary files differ
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/MessagingAdapterSolution.gif b/docs/user-manual/modules/ROOT/assets/images/eip/MessagingAdapterSolution.gif
new file mode 100644
index 0000000..d624bc9
--- /dev/null
+++ b/docs/user-manual/modules/ROOT/assets/images/eip/MessagingAdapterSolution.gif
Binary files differ
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/MessagingGatewaySolution.gif b/docs/user-manual/modules/ROOT/assets/images/eip/MessagingGatewaySolution.gif
new file mode 100644
index 0000000..8c0d0a6
--- /dev/null
+++ b/docs/user-manual/modules/ROOT/assets/images/eip/MessagingGatewaySolution.gif
Binary files differ
diff --git a/docs/user-manual/modules/ROOT/pages/bean-integration.adoc b/docs/user-manual/modules/ROOT/pages/bean-integration.adoc
index ab32537..d0cc785 100644
--- a/docs/user-manual/modules/ROOT/pages/bean-integration.adoc
+++ b/docs/user-manual/modules/ROOT/pages/bean-integration.adoc
@@ -18,62 +18,40 @@
 [width="100%",cols="10%,90%",options="header",]
 |=======================================================================
 |Annotation |Description
-
-|`@EndpointInject` |To inject an endpoint, see more details at xref:pojo-producing.adoc[POJO
-Producing].
-
-|`@BeanInject` |To inject a bean obtained from the
-Registry. See xref:bean-injection.adoc[Bean
-Injection].
-
-|`@PropertyInject` |To inject a value using
-property placeholder.
-
-|`@Produce` |To inject a producer to send message to an endpoint. See
-POJO Producing.
-
-|`@Consume` |To inject a consumer on a method. See xref:pojo-consuming.adoc[POJO
-Consuming].
-
-|`@BindToRegistry` |Used for binding a bean to the registry. If no name is specified then the bean will have its name auto computed based on the class name, field name, or method name where the annotation is configured.
+|`@EndpointInject` |To inject an endpoint, see more details at xref:pojo-producing.adoc[POJO Producing].
+|`@BeanInject` |To inject a bean obtained from the Registry. See xref:bean-injection.adoc[Bean Injection].
+|`@PropertyInject` |To inject a value using property placeholder.
+|`@Produce` |To inject a producer to send message to an endpoint. See xref:pojo-producing.adoc[POJO Producing].
+|`@Consume` |To inject a consumer on a method. See xref:pojo-consuming.adoc[POJO Consuming].
+|`@BindToRegistry` |Used for binding a bean to the registry.
+  If no name is specified then the bean will have its name auto computed based on the class name,
+ field name, or method name where the annotation is configured.
 |=======================================================================
 
 See more details at:
 
-* POJO Consuming to consume and possibly route
-messages from Camel
-* POJO Producing to make it easy to produce
-camel messages from your POJOs
-* DynamicRouter Annotation for
-creating a Dynamic Router from a POJO method
-* RecipientList Annotation for
-creating a Recipient List from a POJO method
-* RoutingSlip Annotation for creating
-a Routing Slip for a POJO method
-* Bean Injection to inject Camel related
-resources into your POJOs
-* xref:using-exchange-pattern-annotations.adoc[Using Exchange Pattern
-Annotations] describes how the pattern annotations can be used to change
-the behaviour of method invocations with
-Spring Remoting or
-POJO Producing
+* xref:pojo-consuming.adoc[POJO Consuming] to consume and possibly route messages from Camel
+* xref:pojo-producing.adoc[POJO Producing] to make it easy to produce camel messages from your POJOs
+* `@DynamicRouter` Annotation for creating a xref:dynamic-router.adoc[Dynamic Router] from a POJO method
+* `@RecipientList` Annotation for creating a xref:recipientList-eip.adoc[Recipient List] from a POJO method
+* `@RoutingSlip` Annotation for creating a xref:routingSlip-eip.adoc[Routing Slip] for a POJO method
+* xref:bean-injection.adoc[Bean Injection] to inject Camel related resources into your POJOs
+* xref:using-exchange-pattern-annotations.adoc[Using Exchange Pattern Annotations]
+  describes how the pattern annotations can be used to change
+  the behaviour of method invocations with Spring Remoting or POJO Producing
 
 *Example*
 
-See the POJO Messaging Example for how
-to use the annotations for routing and messaging.
+See the https://github.com/apache/camel/tree/master/examples/camel-example-pojo-messaging[POJO Messaging Example]
+for how to use the annotations for routing and messaging.
 
 [[BeanIntegration-BeanComponent]]
 == Bean Component
 
 The xref:components::bean-component.adoc[Bean] component allows one to invoke a particular
 method. Alternately the xref:components::bean-component.adoc[Bean] component supports the
-creation of a proxy via
-http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/component/bean/ProxyHelper.html[ProxyHelper]
-to a Java interface; which the implementation just sends a message
-containing a
-http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/component/bean/BeanInvocation.html[BeanInvocation]
-to some Camel endpoint.
+creation of a proxy via `ProxyHelper` to a Java interface; which allows to hide sending data
+to the endpoint via an interface. See more at xref:hiding-middleware.adoc[Hiding Middleware].
 
 [[BeanIntegration-SpringRemoting]]
 == Spring Remoting
diff --git a/docs/user-manual/modules/ROOT/pages/enterprise-integration-patterns.adoc b/docs/user-manual/modules/ROOT/pages/enterprise-integration-patterns.adoc
index 6e4760f..c95a9f3 100644
--- a/docs/user-manual/modules/ROOT/pages/enterprise-integration-patterns.adoc
+++ b/docs/user-manual/modules/ROOT/pages/enterprise-integration-patterns.adoc
@@ -257,11 +257,11 @@
 control its transactions with the messaging system?
 
 a|image::eip/MessagingGatewayIcon.gif[image]
-|Messaging Gateway |How do you encapsulate
+|xref:messaging-gateway.adoc[Messaging Gateway] |How do you encapsulate
 access to the messaging system from the rest of the application?
 
 a|image::eip/MessagingAdapterIcon.gif[image]
-|Service Activator |How can an application
+|xref:service-activator.adoc[Service Activator] |How can an application
 design a service to be invoked both via various messaging technologies
 and via non-messaging techniques?
 |=======================================================================
@@ -286,7 +286,7 @@
 on a point-to-point channel?
 
 |
-|Message History |How can we effectively
+|xref:message-history.adoc[Message History] |How can we effectively
 analyze and debug the flow of messages in a loosely coupled system?
 
 |
diff --git a/docs/user-manual/modules/ROOT/pages/message-history.adoc b/docs/user-manual/modules/ROOT/pages/message-history.adoc
new file mode 100644
index 0000000..a903ff1
--- /dev/null
+++ b/docs/user-manual/modules/ROOT/pages/message-history.adoc
@@ -0,0 +1,99 @@
+[[Message-History]]
+= Message History
+
+Camel supports the
+https://www.enterpriseintegrationpatterns.com/patterns/messaging/MessageHistory.html[Message History]
+from the xref:enterprise-integration-patterns.adoc[EIP patterns] book.
+
+The Message History from the EIP patterns allows for analyzing and debugging the flow of messages in a loosely coupled system.
+
+image::eip/MessageHistory.gif[image]
+
+Attaching a Message History to the message will provide a list of all applications that the message passed through since its origination.
+
+During routing Camel captures how the Exchange is routed, as a `org.apache.camel.MessageHistory` entity
+that is stored on the Exchange. On the `org.apache.camel.MessageHistory` there is information abut the
+route id, processor id, timestamp, and elapsed time it took to process the Exchange by the processor.
+
+== Enabling or disabling Message History
+
+The Message History can be enabled or disabled per CamelContext or per route (enabled by default).
+For example you can turn it off with
+
+[source,java]
+----
+camelContext.setMessageHistory(false);
+----
+
+Or in XML
+
+[source,xml]
+----
+<camelContext messageHistory="false">
+
+</camelContext>
+----
+
+You can also do this per route. Then a route level configuration overrides the CamelContext level configuration.
+
+== Route stack-trace in exceptions logged by error handler
+
+If Message History is enabled, then Camel will leverage this information,
+when the Error Handler logs exhausted exceptions. Then in addition to the caused exception with its stacktrace,
+you can see the message history; you may think this as a "route stacktrace".
+
+And example is provided below:
+
+[source,text]
+----
+2013-05-31 14:41:28,084 [ - seda://start] ERROR DefaultErrorHandler            - Failed delivery for (MessageId: ID-davsclaus-air-lan-55446-1370004087263-0-1 on ExchangeId: ID-davsclaus-air-lan-55446-1370004087263-0-3). Exhausted after delivery attempt: 1 caught: java.lang.IllegalArgumentException: Forced to dump message history
+
+Message History
+---------------------------------------------------------------------------------------------------------------------------------------
+RouteId              ProcessorId          Processor                                                                        Elapsed (ms)
+[route1            ] [to1               ] [log:foo                                                                       ] [         6]
+[route1            ] [to2               ] [direct:bar                                                                    ] [       102]
+[route2            ] [to5               ] [log:bar                                                                       ] [         1]
+[route2            ] [delay2            ] [delay[{100}]                                                                  ] [       100]
+[route2            ] [to6               ] [mock:bar                                                                      ] [         0]
+[route1            ] [delay1            ] [delay[{300}]                                                                  ] [       303]
+[route1            ] [to3               ] [log:baz                                                                       ] [         0]
+[route1            ] [process1          ] [org.apache.camel.processor.MessageHistoryDumpRoutingTest$1$1@6a53f9d8         ] [         2]
+
+Stacktrace
+---------------------------------------------------------------------------------------------------------------------------------------
+java.lang.IllegalArgumentException: Forced to dump message history
+    at org.apache.camel.processor.MessageHistoryDumpRoutingTest$1$1.process(MessageHistoryDumpRoutingTest.java:54)
+    at org.apache.camel.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:63)
+    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:388)
+    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:189)
+    at org.apache.camel.processor.Pipeline.process(Pipeline.java:118)
+    at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)
+    at org.apache.camel.processor.DelayProcessorSupport.process(DelayProcessorSupport.java:117)
+    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:388)
+    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:189)
+    at org.apache.camel.processor.Pipeline.process(Pipeline.java:118)
+    at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)
+    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:189)
+    at org.apache.camel.component.seda.SedaConsumer.sendToConsumers(SedaConsumer.java:293)
+    at org.apache.camel.component.seda.SedaConsumer.doRun(SedaConsumer.java:202)
+    at org.apache.camel.component.seda.SedaConsumer.run(SedaConsumer.java:149)
+    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
+    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
+    at java.lang.Thread.run(Thread.java:722)
+----
+
+You can turn off logging message history from the Error Handler using
+
+[source,java]
+----
+errorHandler(defaultErrorHandler().logExhaustedMessageHistory(false));
+----
+
+From Camel 2.17 onwards the Error Handler do not log the message body/header details anymore (to avoid logging sensitive message body details).
+You can turn on the old behavior.
+
+[source,java]
+----
+errorHandler(defaultErrorHandler().logExhaustedMessageBody(true));
+----
\ No newline at end of file
diff --git a/docs/user-manual/modules/ROOT/pages/messaging-gateway.adoc b/docs/user-manual/modules/ROOT/pages/messaging-gateway.adoc
new file mode 100644
index 0000000..f63365b
--- /dev/null
+++ b/docs/user-manual/modules/ROOT/pages/messaging-gateway.adoc
@@ -0,0 +1,20 @@
+[[Messaging-Gateway]]
+= Messaging Gateway
+
+Camel supports the
+https://www.enterpriseintegrationpatterns.com/patterns/messaging/MessagingGateway.html[Messaging Gateway]
+from the xref:enterprise-integration-patterns.adoc[EIP patterns] book.
+
+How do you encapsulate access to the messaging system from the rest of the application?
+
+image::eip/MessagingGatewaySolution.gif[image]
+
+Use a Messaging Gateway, a class than wraps messaging-specific method calls and exposes domain-specific methods to the application.
+
+Camel has several endpoint components that support the Messaging Gateway from the EIP patterns.
+Components like xref:components::bean-component.adoc[Bean] and xref:components::bean-component.adoc[CXF] provide a a way
+to bind a Java interface to the message exchange.
+
+Another approach is to use `@Produce` annotations which you can read about in xref:pojo-producing.adoc[POJO Producing]
+which also can be used as a Messaging Gateway EIP solution.
+
diff --git a/docs/user-manual/modules/ROOT/pages/pojo-producing.adoc b/docs/user-manual/modules/ROOT/pages/pojo-producing.adoc
index b771974..de2d2a7 100644
--- a/docs/user-manual/modules/ROOT/pages/pojo-producing.adoc
+++ b/docs/user-manual/modules/ROOT/pages/pojo-producing.adoc
@@ -6,18 +6,15 @@
 [[POJOProducing-EndpointInject]]
 == Via `@EndpointInject`
 
-To allow sending of messages from POJOs you can use the
-`org.apache.camel.EndpointInject`
-annotation. This will inject a
-`org.apache.camel.ProducerTemplate`
-so that the bean can participate in message exchanges.
+To allow sending of messages from POJOs you can use the `org.apache.camel.EndpointInject` annotation.
+This will inject a `org.apache.camel.ProducerTemplate` so that the bean can participate in message exchanges.
 
-Example: send a message to the *`foo.bar`* ActiveMQ queue:
+Example: Send a message to the *`foo.bar`* ActiveMQ queue:
 
-[source,syntaxhighlighter-pre]
+[source,java]
 ----
 public class Foo {
-  @EndpointInject(uri="activemq:foo.bar")
+  @EndpointInject("activemq:foo.bar")
   ProducerTemplate producer;
 
   public void doSomething() {
@@ -50,14 +47,14 @@
 property setter) using a *`ProducerTemplate`* *or* using some interface
 you use in your business logic. Example:
 
-[source,syntaxhighlighter-pre]
+[source,java]
 ----
 public interface MyListener {
     String sayHello(String name);
 }
 
 public class MyBean {
-    @Produce(uri = "activemq:foo")
+    @Produce("activemq:foo")
     protected MyListener producer;
 
     public void doSomething() {
@@ -75,6 +72,5 @@
 endpoint - in this case the xref:components::activemq-component.adoc[ActiveMQ] endpoint to
 queue *`foo`*; then the caller blocks for a response.
 
-If you want to make asynchronous message sends then use
-xref:using-exchange-pattern-annotations.adoc[an @InOnly annotation on
-the injection point].
+If you want to make asynchronous message sends then use an
+xref:using-exchange-pattern-annotations.adoc[@InOnly] annotation on the injection point.
diff --git a/docs/user-manual/modules/ROOT/pages/service-activator.adoc b/docs/user-manual/modules/ROOT/pages/service-activator.adoc
new file mode 100644
index 0000000..5ff5005
--- /dev/null
+++ b/docs/user-manual/modules/ROOT/pages/service-activator.adoc
@@ -0,0 +1,45 @@
+[[Service-Activator]]
+= Service Activator
+
+Camel supports the
+https://www.enterpriseintegrationpatterns.com/patterns/messaging/MessagingAdapter.html[Service Activator]
+from the xref:enterprise-integration-patterns.adoc[EIP patterns] book.
+
+How can an application design a service to be invoked both via various messaging technologies and via non-messaging techniques?
+
+image::eip/MessagingAdapterSolution.gif[image]
+
+Design a Service Activator that connects the messages on the channel to the service being accessed.
+
+Camel has several endpoint components that support the Service Activator from the EIP patterns.
+
+Components like  xref:components::bean-component.adoc[Bean] and xref:components::bean-component.adoc[CXF]
+provide a a way to bind the message exchange to a Java interface/service where the route defines the
+endpoints and wires it up to the bean.
+
+In addition you can use the xref:bean-integration.adoc[Bean Integration] to wire messages
+to a bean using annotation, or even xref:hiding-middleware.adoc[hide all the middleware]
+behind a plain Java interface.
+
+== Sample
+
+Here is a simple example of using a Direct endpoint to create a messaging interface
+to a POJO Bean service.
+
+Using Java DSL
+
+[source,java]
+----
+from("direct:invokeMyService")
+  .to("bean:myService");
+----
+
+Using the XML DSL
+
+[source,xml]
+----
+<route>
+  <from uri="direct:invokeMyService"/>
+  <to uri="bean:myService"/>
+</route>
+----