@UriEndpoint(firstVersion="1.0.0",
scheme="mock",
title="Mock",
syntax="mock:name",
producerOnly=true,
label="core,testing",
lenientProperties=true)
public class MockEndpoint
extends org.apache.camel.support.DefaultEndpoint
implements org.apache.camel.spi.BrowsableEndpoint, org.apache.camel.spi.NotifyBuilderMatcher
setExpectedMessageCount(int)
with 0, then take extra care,
as 0 matches when the tests starts, so you need to set a assert period time
to let the test run for a while to make sure there are still no messages arrived; for
that use setAssertPeriod(long)
.
An alternative is to use NotifyBuilder, and use the notifier
to know when Camel is done routing some messages, before you call the assertIsSatisfied()
method on the mocks.
This allows you to not use a fixed assert period, to speedup testing times.
Important: If using expectedMessageCount(int)
and also expectedBodiesReceived(java.util.List)
or
expectedHeaderReceived(String, Object)
then the latter overrides the number of expected message based on the
number of values provided in the bodies/headers.Modifier and Type | Field and Description |
---|---|
protected org.apache.camel.Processor |
reporter |
Constructor and Description |
---|
MockEndpoint() |
MockEndpoint(String endpointUri,
org.apache.camel.Component component) |
Modifier and Type | Method and Description |
---|---|
protected void |
addReceivedExchange(org.apache.camel.Exchange copy)
Adds the received exchange.
|
AssertionClause |
allMessages()
Adds an assertion to all the received messages
|
protected void |
assertEquals(String message,
Object expectedValue,
Object actualValue) |
org.apache.camel.Exchange |
assertExchangeReceived(int index)
Asserts that the given index of message is received (starting at zero)
|
void |
assertIsNotSatisfied()
Validates that the assertions fail on this endpoint
|
void |
assertIsNotSatisfied(long timeoutForEmptyEndpoints)
Validates that the assertions fail on this endpoint
|
void |
assertIsSatisfied()
Validates that all the available expectations on this endpoint are
satisfied; or throw an exception
|
static void |
assertIsSatisfied(org.apache.camel.CamelContext context)
Asserts that all the expectations on any
MockEndpoint instances registered
in the given context are valid |
static void |
assertIsSatisfied(org.apache.camel.CamelContext context,
long timeout,
TimeUnit unit)
Asserts that all the expectations on any
MockEndpoint instances registered
in the given context are valid |
void |
assertIsSatisfied(long timeoutForEmptyEndpoints)
Validates that all the available expectations on this endpoint are
satisfied; or throw an exception
|
static void |
assertIsSatisfied(long timeout,
TimeUnit unit,
MockEndpoint... endpoints) |
static void |
assertIsSatisfied(MockEndpoint... endpoints) |
void |
assertMessagesAscending(org.apache.camel.Expression expression)
Asserts that the messages have ascending values of the given expression
|
void |
assertMessagesDescending(org.apache.camel.Expression expression)
Asserts that the messages have descending values of the given expression
|
protected void |
assertMessagesSorted(org.apache.camel.Expression expression,
boolean ascending) |
protected void |
assertMessagesSorted(org.apache.camel.Expression expression,
boolean ascending,
int index) |
void |
assertNoDuplicates(org.apache.camel.Expression expression)
Asserts among all the current received exchanges that there are no duplicate message
|
protected void |
assertTrue(String message,
boolean predicate) |
static void |
assertWait(long timeout,
TimeUnit unit,
MockEndpoint... endpoints) |
void |
await() |
boolean |
await(long timeout,
TimeUnit unit) |
org.apache.camel.Consumer |
createConsumer(org.apache.camel.Processor processor) |
org.apache.camel.Producer |
createProducer() |
protected void |
doAssertIsSatisfied(long timeoutForEmptyEndpoints) |
protected void |
doInit() |
void |
expectedBodiesReceived(List<?> bodies)
Adds an expectation that the given body values are received by this
endpoint in the specified order
Important: The number of values must match the expected number of messages, so if you expect 3 messages, then
there must be 3 values.
|
void |
expectedBodiesReceived(Object... bodies)
Sets an expectation that the given body values are received by this endpoint
Important: The number of bodies must match the expected number of messages, so if you expect 3 messages, then
there must be 3 bodies.
|
void |
expectedBodiesReceivedInAnyOrder(List<?> bodies)
Adds an expectation that the given body values are received by this
endpoint in any order
Important: The number of bodies must match the expected number of messages, so if you expect 3 messages, then
there must be 3 bodies.
|
void |
expectedBodiesReceivedInAnyOrder(Object... bodies)
Adds an expectation that the given body values are received by this
endpoint in any order
Important: The number of bodies must match the expected number of messages, so if you expect 3 messages, then
there must be 3 bodies.
|
AssertionClause |
expectedBodyReceived()
Adds an expectation that the given body value are received by this endpoint
|
void |
expectedExchangePattern(org.apache.camel.ExchangePattern exchangePattern)
Adds an expectation that messages received should have the given exchange pattern
|
void |
expectedFileExists(String name)
Adds an expectation that a file exists with the given name
|
void |
expectedFileExists(String name,
String content)
Adds an expectation that a file exists with the given name
Will wait at most 5 seconds while checking for the existence of the file.
|
void |
expectedHeaderReceived(String name,
Object value)
Sets an expectation that the given header name & value are received by this endpoint
You can set multiple expectations for different header names.
|
void |
expectedHeaderValuesReceivedInAnyOrder(String name,
List<?> values)
Adds an expectation that the given header values are received by this
endpoint in any order.
|
void |
expectedHeaderValuesReceivedInAnyOrder(String name,
Object... values)
Adds an expectation that the given header values are received by this
endpoint in any order
Important: The number of values must match the expected number of messages, so if you expect 3 messages, then
there must be 3 values.
|
void |
expectedMessageCount(int expectedCount)
Specifies the expected number of message exchanges that should be
received by this endpoint
If you want to assert that exactly n messages arrives to this mock
endpoint, then see also the
setAssertPeriod(long) method for further details. |
void |
expectedMessagesMatches(org.apache.camel.Predicate... predicates)
Sets an expectation that the given predicates matches the received messages by this endpoint
|
void |
expectedMinimumMessageCount(int expectedCount)
Specifies the minimum number of expected message exchanges that should be
received by this endpoint
|
void |
expectedPropertyReceived(String name,
Object value)
Sets an expectation that the given property name & value are received by this endpoint
You can set multiple expectations for different property names.
|
void |
expectedPropertyValuesReceivedInAnyOrder(String name,
List<?> values)
Adds an expectation that the given property values are received by this
endpoint in any order.
|
void |
expectedPropertyValuesReceivedInAnyOrder(String name,
Object... values)
Adds an expectation that the given property values are received by this
endpoint in any order
Important: The number of values must match the expected number of messages, so if you expect 3 messages, then
there must be 3 values.
|
void |
expects(Runnable runnable)
Adds the expectation which will be invoked when enough messages are received
|
AssertionClause |
expectsAscending()
Adds an expectation that messages received should have ascending values
of the given expression such as a user generated counter value
|
void |
expectsAscending(org.apache.camel.Expression expression)
Adds an expectation that messages received should have ascending values
of the given expression such as a user generated counter value
|
AssertionClause |
expectsDescending()
Adds an expectation that messages received should have descending values
of the given expression such as a user generated counter value
|
void |
expectsDescending(org.apache.camel.Expression expression)
Adds an expectation that messages received should have descending values
of the given expression such as a user generated counter value
|
static void |
expectsMessageCount(int count,
MockEndpoint... endpoints) |
AssertionClause |
expectsNoDuplicates()
Adds an expectation that no duplicate messages should be received using
the expression to determine the message ID
|
void |
expectsNoDuplicates(org.apache.camel.Expression expression)
Adds an expectation that no duplicate messages should be received using
the expression to determine the message ID
|
protected void |
fail(Object message) |
long |
getAssertPeriod() |
List<org.apache.camel.Exchange> |
getExchanges() |
int |
getExpectedCount() |
int |
getExpectedMinimumCount() |
List<Throwable> |
getFailures() |
String |
getName() |
int |
getReceivedCounter() |
List<org.apache.camel.Exchange> |
getReceivedExchanges() |
org.apache.camel.Processor |
getReporter() |
int |
getReportGroup() |
long |
getResultMinimumWaitTime() |
long |
getResultWaitTime() |
int |
getRetainFirst() |
int |
getRetainLast() |
long |
getSleepForEmptyTest() |
void |
handle(org.apache.camel.Exchange exchange)
Handles the incoming exchange.
|
boolean |
isCopyOnExchange() |
boolean |
isFailFast() |
boolean |
isLenientProperties() |
AssertionClause |
message(int messageIndex)
Adds an assertion to the given message index
|
boolean |
notifyBuilderMatches() |
void |
notifyBuilderOnExchange(org.apache.camel.Exchange exchange) |
void |
notifyBuilderReset() |
protected void |
onExchange(org.apache.camel.Exchange exchange) |
protected void |
performAssertions(org.apache.camel.Exchange exchange,
org.apache.camel.Exchange copy)
Performs the assertions on the incoming exchange.
|
void |
reset() |
static void |
resetMocks(org.apache.camel.CamelContext context)
Reset all mock endpoints
|
static MockEndpoint |
resolve(org.apache.camel.CamelContext context,
String uri)
A helper method to resolve the mock endpoint of the given URI on the given context
|
void |
returnReplyBody(org.apache.camel.Expression expression)
Set the expression which value will be set to the message body
|
void |
returnReplyHeader(String headerName,
org.apache.camel.Expression expression)
Set the expression which value will be set to the message header
|
static void |
setAssertPeriod(org.apache.camel.CamelContext context,
long period)
Sets the assert period on all the expectations on any
MockEndpoint instances registered
in the given context. |
void |
setAssertPeriod(long period)
Sets a grace period after which the mock endpoint will re-assert
to ensure the preliminary assertion is still valid.
|
void |
setCopyOnExchange(boolean copyOnExchange)
Sets whether to make a deep copy of the incoming
Exchange when received at this mock endpoint. |
void |
setExpectedCount(int expectedCount)
Specifies the expected number of message exchanges that should be
received by this endpoint.
|
void |
setExpectedMessageCount(int expectedCount) |
void |
setFailFast(boolean failFast)
Sets whether
assertIsSatisfied() should fail fast
at the first detected failed expectation while it may otherwise wait for all expected
messages to arrive before performing expectations verifications. |
void |
setMinimumExpectedMessageCount(int expectedCount)
Specifies the minimum number of expected message exchanges that should be
received by this endpoint
|
void |
setName(String name) |
void |
setReporter(org.apache.camel.Processor reporter)
Allows a processor to added to the endpoint to report on progress of the test
|
void |
setReportGroup(int reportGroup)
A number that is used to turn on throughput logging based on groups of the size.
|
void |
setResultMinimumWaitTime(long resultMinimumWaitTime)
Sets the minimum expected amount of time (in millis) the
assertIsSatisfied() will
wait on a latch until it is satisfied |
void |
setResultWaitTime(long resultWaitTime)
Sets the maximum amount of time (in millis) the
assertIsSatisfied() will
wait on a latch until it is satisfied |
void |
setRetainFirst(int retainFirst)
Specifies to only retain the first n'th number of received
Exchange s. |
void |
setRetainLast(int retainLast)
Specifies to only retain the last n'th number of received
Exchange s. |
void |
setSleepForEmptyTest(long sleepForEmptyTest)
Allows a sleep to be specified to wait to check that this endpoint really
is empty when
expectedMessageCount(int) is called with zero |
protected void |
waitForCompleteLatch() |
protected void |
waitForCompleteLatch(long timeout) |
void |
whenAnyExchangeReceived(org.apache.camel.Processor processor)
Set the processor that will be invoked when the some message
is received.
|
void |
whenExchangeReceived(int index,
org.apache.camel.Processor processor)
Set the processor that will be invoked when the index
message is received.
|
configureConsumer, configurePollingConsumer, configureProperties, createAsyncProducer, createEndpointUri, createExchange, createExchange, createPollingConsumer, doStart, doStop, equals, getCamelContext, getComponent, getEndpointKey, getEndpointUri, getExceptionHandler, getExchangePattern, getId, getPollingConsumerBlockTimeout, getPollingConsumerQueueSize, hashCode, isBasicPropertyBinding, isBridgeErrorHandler, isLazyStartProducer, isPollingConsumerBlockWhenFull, isSingleton, isSynchronous, setBasicPropertyBinding, setBridgeErrorHandler, setCamelContext, setComponent, setEndpointUri, setEndpointUriIfNotSpecified, setExceptionHandler, setExchangePattern, setLazyStartProducer, setPollingConsumerBlockTimeout, setPollingConsumerBlockWhenFull, setPollingConsumerQueueSize, setProperties, setSynchronous, toString
build, doBuild, doFail, doLifecycleChange, doResume, doShutdown, doSuspend, fail, getStatus, init, isBuild, isInit, isNew, isRunAllowed, isShutdown, isStarted, isStarting, isStartingOrStarted, isStopped, isStopping, isStoppingOrStopped, isSuspended, isSuspending, isSuspendingOrSuspended, resume, shutdown, start, stop, suspend
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
configureProperties, createAsyncProducer, createExchange, createExchange, createPollingConsumer, getCamelContext, getEndpointBaseUri, getEndpointKey, getEndpointUri, isSingletonProducer, setCamelContext
public MockEndpoint()
public MockEndpoint(String endpointUri, org.apache.camel.Component component)
public static MockEndpoint resolve(org.apache.camel.CamelContext context, String uri)
context
- the camel context to try resolve the mock endpoint fromuri
- the uri of the endpoint to resolvepublic static void assertWait(long timeout, TimeUnit unit, MockEndpoint... endpoints) throws InterruptedException
InterruptedException
public static void assertIsSatisfied(long timeout, TimeUnit unit, MockEndpoint... endpoints) throws InterruptedException
InterruptedException
public static void assertIsSatisfied(MockEndpoint... endpoints) throws InterruptedException
InterruptedException
public static void assertIsSatisfied(org.apache.camel.CamelContext context) throws InterruptedException
MockEndpoint
instances registered
in the given context are validcontext
- the camel context used to find all the available endpoints to be assertedInterruptedException
public static void assertIsSatisfied(org.apache.camel.CamelContext context, long timeout, TimeUnit unit) throws InterruptedException
MockEndpoint
instances registered
in the given context are validcontext
- the camel context used to find all the available endpoints to be assertedtimeout
- timeoutunit
- time unitInterruptedException
public static void setAssertPeriod(org.apache.camel.CamelContext context, long period)
MockEndpoint
instances registered
in the given context.context
- the camel context used to find all the available endpointsperiod
- the period in millispublic static void resetMocks(org.apache.camel.CamelContext context)
context
- the camel context used to find all the available endpoints to resetpublic static void expectsMessageCount(int count, MockEndpoint... endpoints) throws InterruptedException
InterruptedException
public List<org.apache.camel.Exchange> getExchanges()
getExchanges
in interface org.apache.camel.spi.BrowsableEndpoint
public org.apache.camel.Consumer createConsumer(org.apache.camel.Processor processor) throws Exception
createConsumer
in interface org.apache.camel.Endpoint
Exception
public org.apache.camel.Producer createProducer() throws Exception
createProducer
in interface org.apache.camel.Endpoint
Exception
public void reset()
@Handler public void handle(org.apache.camel.Exchange exchange) throws Exception
exchange
- the exchangeException
- can be thrownpublic void whenExchangeReceived(int index, org.apache.camel.Processor processor)
public void whenAnyExchangeReceived(org.apache.camel.Processor processor)
whenExchangeReceived(int, Processor)
method.public void returnReplyBody(org.apache.camel.Expression expression)
expression
- which is use to set the message bodypublic void returnReplyHeader(String headerName, org.apache.camel.Expression expression)
headerName
- that will be set valueexpression
- which is use to set the message headerpublic void assertIsSatisfied() throws InterruptedException
InterruptedException
public void assertIsSatisfied(long timeoutForEmptyEndpoints) throws InterruptedException
timeoutForEmptyEndpoints
- the timeout in milliseconds that we
should wait for the test to be trueInterruptedException
protected void doAssertIsSatisfied(long timeoutForEmptyEndpoints) throws InterruptedException
InterruptedException
public void assertIsNotSatisfied() throws InterruptedException
InterruptedException
public void assertIsNotSatisfied(long timeoutForEmptyEndpoints) throws InterruptedException
timeoutForEmptyEndpoints
- the timeout in milliseconds that we
should wait for the test to be trueInterruptedException
public void expectedMessageCount(int expectedCount)
setAssertPeriod(long)
method for further details.expectedCount
- the number of message exchanges that should be
expected by this endpointsetAssertPeriod(long)
public long getAssertPeriod()
public void setAssertPeriod(long period)
expectedMessageCount(int)
was set to 5, then
the assertion is satisfied when 5 or more message arrives. To ensure that
exactly 5 messages arrives, then you would need to wait a little period
to ensure no further message arrives. This is what you can use this
method for.
By default this period is disabled.period
- grace period in millispublic void expectedMinimumMessageCount(int expectedCount)
expectedCount
- the number of message exchanges that should be
expected by this endpointpublic void expectedHeaderReceived(String name, Object value)
public void expectedHeaderValuesReceivedInAnyOrder(String name, List<?> values)
expectedMessageCount(int)
public void expectedHeaderValuesReceivedInAnyOrder(String name, Object... values)
expectedMessageCount(int)
public void expectedPropertyReceived(String name, Object value)
public void expectedPropertyValuesReceivedInAnyOrder(String name, List<?> values)
expectedMessageCount(int)
public void expectedPropertyValuesReceivedInAnyOrder(String name, Object... values)
expectedMessageCount(int)
public void expectedBodiesReceived(List<?> bodies)
expectedMessageCount(int)
public void expectedMessagesMatches(org.apache.camel.Predicate... predicates)
public void expectedBodiesReceived(Object... bodies)
expectedMessageCount(int)
public AssertionClause expectedBodyReceived()
public void expectedBodiesReceivedInAnyOrder(List<?> bodies)
expectedMessageCount(int)
public void expectedBodiesReceivedInAnyOrder(Object... bodies)
expectedMessageCount(int)
public void expectedFileExists(String name)
name
- name of file, will cater for / and \ on different OS platformspublic void expectedFileExists(String name, String content)
name
- name of file, will cater for / and \ on different OS platformscontent
- content of file to compare, can be null to not compare contentpublic void expectedExchangePattern(org.apache.camel.ExchangePattern exchangePattern)
public void expectsAscending(org.apache.camel.Expression expression)
public AssertionClause expectsAscending()
public void expectsDescending(org.apache.camel.Expression expression)
public AssertionClause expectsDescending()
public void expectsNoDuplicates(org.apache.camel.Expression expression)
expression
- the expression used to create a unique message ID for
message comparison (which could just be the message
payload if the payload can be tested for uniqueness using
Object.equals(Object)
and
Object.hashCode()
public AssertionClause expectsNoDuplicates()
public void assertMessagesAscending(org.apache.camel.Expression expression)
public void assertMessagesDescending(org.apache.camel.Expression expression)
protected void assertMessagesSorted(org.apache.camel.Expression expression, boolean ascending)
protected void assertMessagesSorted(org.apache.camel.Expression expression, boolean ascending, int index)
public void assertNoDuplicates(org.apache.camel.Expression expression)
expression
- the expression to use for duplication checkpublic void expects(Runnable runnable)
public AssertionClause message(int messageIndex)
messageIndex
- the number of the messagepublic AssertionClause allMessages()
public org.apache.camel.Exchange assertExchangeReceived(int index)
public void notifyBuilderOnExchange(org.apache.camel.Exchange exchange)
notifyBuilderOnExchange
in interface org.apache.camel.spi.NotifyBuilderMatcher
public void notifyBuilderReset()
notifyBuilderReset
in interface org.apache.camel.spi.NotifyBuilderMatcher
public boolean notifyBuilderMatches()
notifyBuilderMatches
in interface org.apache.camel.spi.NotifyBuilderMatcher
public String getName()
public void setName(String name)
public int getReceivedCounter()
public List<org.apache.camel.Exchange> getReceivedExchanges()
public int getExpectedCount()
public long getSleepForEmptyTest()
public void setSleepForEmptyTest(long sleepForEmptyTest)
expectedMessageCount(int)
is called with zerosleepForEmptyTest
- the milliseconds to sleep for to determine that
this endpoint really is emptypublic long getResultWaitTime()
public void setResultWaitTime(long resultWaitTime)
assertIsSatisfied()
will
wait on a latch until it is satisfiedpublic long getResultMinimumWaitTime()
public void setResultMinimumWaitTime(long resultMinimumWaitTime)
assertIsSatisfied()
will
wait on a latch until it is satisfiedpublic void setExpectedCount(int expectedCount)
setAssertPeriod(long)
.
An alternative is to use NotifyBuilder, and use the notifier
to know when Camel is done routing some messages, before you call the assertIsSatisfied()
method on the mocks.
This allows you to not use a fixed assert period, to speedup testing times.
If you want to assert that exactly n'th message arrives to this mock
endpoint, then see also the setAssertPeriod(long)
method for further details.expectedCount
- the number of message exchanges that should be
expected by this endpointsetAssertPeriod(long)
public void setExpectedMessageCount(int expectedCount)
setExpectedCount(int)
public void setMinimumExpectedMessageCount(int expectedCount)
expectedCount
- the number of message exchanges that should be
expected by this endpointpublic org.apache.camel.Processor getReporter()
public void setReporter(org.apache.camel.Processor reporter)
public int getRetainFirst()
public void setRetainFirst(int retainFirst)
Exchange
s.
This is used when testing with big data, to reduce memory consumption by not storing
copies of every Exchange
this mock endpoint receives.
Important: When using this limitation, then the getReceivedCounter()
will still return the actual number of received Exchange
s. For example
if we have received 5000 Exchange
s, and have configured to only retain the first
10 Exchange
s, then the getReceivedCounter()
will still return 5000
but there is only the first 10 Exchange
s in the getExchanges()
and
getReceivedExchanges()
methods.
When using this method, then some of the other expectation methods is not supported,
for example the expectedBodiesReceived(Object...)
sets a expectation on the first
number of bodies received.
You can configure both setRetainFirst(int)
and setRetainLast(int)
methods,
to limit both the first and last received.retainFirst
- to limit and only keep the first n'th received Exchange
s, use
0 to not retain any messages, or -1 to retain all.setRetainLast(int)
public int getRetainLast()
public void setRetainLast(int retainLast)
Exchange
s.
This is used when testing with big data, to reduce memory consumption by not storing
copies of every Exchange
this mock endpoint receives.
Important: When using this limitation, then the getReceivedCounter()
will still return the actual number of received Exchange
s. For example
if we have received 5000 Exchange
s, and have configured to only retain the last
20 Exchange
s, then the getReceivedCounter()
will still return 5000
but there is only the last 20 Exchange
s in the getExchanges()
and
getReceivedExchanges()
methods.
When using this method, then some of the other expectation methods is not supported,
for example the expectedBodiesReceived(Object...)
sets a expectation on the first
number of bodies received.
You can configure both setRetainFirst(int)
and setRetainLast(int)
methods,
to limit both the first and last received.retainLast
- to limit and only keep the last n'th received Exchange
s, use
0 to not retain any messages, or -1 to retain all.setRetainFirst(int)
public int getReportGroup()
public void setReportGroup(int reportGroup)
public boolean isCopyOnExchange()
public void setCopyOnExchange(boolean copyOnExchange)
Exchange
when received at this mock endpoint.
Is by default true.public boolean isFailFast()
public void setFailFast(boolean failFast)
assertIsSatisfied()
should fail fast
at the first detected failed expectation while it may otherwise wait for all expected
messages to arrive before performing expectations verifications.
Is by default true. Set to false to use behavior as in Camel 2.x.protected void doInit()
doInit
in class org.apache.camel.support.DefaultEndpoint
protected void onExchange(org.apache.camel.Exchange exchange)
protected void performAssertions(org.apache.camel.Exchange exchange, org.apache.camel.Exchange copy) throws Exception
exchange
- the actual exchangecopy
- a copy of the exchange (only store this)Exception
- can be thrown if something went wrongprotected void addReceivedExchange(org.apache.camel.Exchange copy)
copy
- a copy of the received exchangeprotected void waitForCompleteLatch() throws InterruptedException
InterruptedException
protected void waitForCompleteLatch(long timeout) throws InterruptedException
InterruptedException
protected void assertTrue(String message, boolean predicate)
protected void fail(Object message)
public int getExpectedMinimumCount()
public void await() throws InterruptedException
InterruptedException
public boolean await(long timeout, TimeUnit unit) throws InterruptedException
InterruptedException
public boolean isLenientProperties()
isLenientProperties
in interface org.apache.camel.Endpoint
isLenientProperties
in class org.apache.camel.support.DefaultEndpoint
Apache Camel