This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new b9960f5076f CAMEL-19478: Add synchronous option to relevant EIPs
b9960f5076f is described below
commit b9960f5076fa7cb8949c0ce418e61f1a8f2a6176
Author: Claus Ibsen <[email protected]>
AuthorDate: Wed Jun 21 10:48:53 2023 +0200
CAMEL-19478: Add synchronous option to relevant EIPs
---
.../org/apache/camel/catalog/models/multicast.json | 23 +++--
.../apache/camel/catalog/models/recipientList.json | 25 ++---
.../org/apache/camel/catalog/models/split.json | 23 +++--
.../apache/camel/catalog/schemas/camel-spring.xsd | 42 +++++++-
.../docs/modules/eips/pages/multicast-eip.adoc | 7 ++
.../docs/modules/eips/pages/recipientList-eip.adoc | 7 ++
.../main/docs/modules/eips/pages/split-eip.adoc | 115 ++++++++++++++++-----
.../org/apache/camel/model/multicast.json | 23 +++--
.../org/apache/camel/model/recipientList.json | 25 ++---
.../resources/org/apache/camel/model/split.json | 23 +++--
.../apache/camel/model/MulticastDefinition.java | 92 +++++++++++++++++
.../camel/model/RecipientListDefinition.java | 96 ++++++++++++++++-
.../org/apache/camel/model/SplitDefinition.java | 54 ++++++++++
.../apache/camel/processor/MulticastProcessor.java | 34 ++++++
.../org/apache/camel/processor/RecipientList.java | 10 ++
.../org/apache/camel/reifier/MulticastReifier.java | 5 +-
.../apache/camel/reifier/RecipientListReifier.java | 2 +
.../org/apache/camel/reifier/SplitReifier.java | 2 +
.../MulticastParallelSynchronousTest.java | 74 +++++++++++++
.../RecipientListParallelSynchronousTest.java | 77 ++++++++++++++
.../processor/SplitParallelSynchronousTest.java | 68 ++++++++++++
.../java/org/apache/camel/xml/in/ModelParser.java | 3 +
.../java/org/apache/camel/xml/out/ModelWriter.java | 3 +
.../org/apache/camel/yaml/out/ModelWriter.java | 3 +
.../dsl/yaml/deserializers/ModelDeserializers.java | 18 ++++
.../generated/resources/schema/camel-yaml-dsl.json | 9 ++
.../generated/resources/schema/camelYamlDsl.json | 9 ++
27 files changed, 773 insertions(+), 99 deletions(-)
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/multicast.json
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/multicast.json
index cc0dadf2258..5e4a32e3858 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/multicast.json
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/multicast.json
@@ -16,16 +16,17 @@
"aggregationStrategyMethodName": { "index": 1, "kind": "attribute",
"displayName": "Aggregation Strategy Method Name", "label": "advanced",
"required": false, "type": "string", "javaType": "java.lang.String",
"deprecated": false, "autowired": false, "secret": false, "description": "This
option can be used to explicit declare the method name to use, when using POJOs
as the AggregationStrategy." },
"aggregationStrategyMethodAllowNull": { "index": 2, "kind": "attribute",
"displayName": "Aggregation Strategy Method Allow Null", "label": "advanced",
"required": false, "type": "boolean", "javaType": "java.lang.Boolean",
"deprecated": false, "autowired": false, "secret": false, "defaultValue":
false, "description": "If this option is false then the aggregate method is not
used if there was no data to enrich. If this option is true then null values is
used as the oldExchange (when no [...]
"parallelAggregate": { "index": 3, "kind": "attribute", "displayName":
"Parallel Aggregate", "label": "advanced", "required": false, "type":
"boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "description": "If enabled then
the aggregate method on AggregationStrategy can be called concurrently. Notice
that this would require the implementation of AggregationStrategy to be
implemented as thread-safe. By default [...]
- "parallelProcessing": { "index": 4, "kind": "attribute", "displayName":
"Parallel Processing", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "If enabled then sending messages to the
multicasts occurs concurrently. Note the caller thread will still wait until
all messages has been fully processed, before it continues. Its only the
sending and processing the replies [...]
- "streaming": { "index": 5, "kind": "attribute", "displayName":
"Streaming", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "If enabled then Camel will process
replies out-of-order, eg in the order they come back. If disabled, Camel will
process replies in the same order as defined by the multicast." },
- "stopOnException": { "index": 6, "kind": "attribute", "displayName": "Stop
On Exception", "label": "advanced", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "Will now stop further
processing if an exception or failure occurred during processing of an
org.apache.camel.Exchange and the caused exception will be thrown. Will also
stop if processing the exchange failed [...]
- "timeout": { "index": 7, "kind": "attribute", "displayName": "Timeout",
"label": "advanced", "required": false, "type": "duration", "javaType":
"java.lang.String", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": "0", "description": "Sets a total timeout specified in millis,
when using parallel processing. If the Multicast hasn't been able to send and
process all replies within the given timeframe, then the timeout triggers and
the Multicast breaks out and co [...]
- "executorService": { "index": 8, "kind": "attribute", "displayName":
"Executor Service", "label": "advanced", "required": false, "type": "object",
"javaType": "java.util.concurrent.ExecutorService", "deprecated": false,
"autowired": false, "secret": false, "description": "Refers to a custom Thread
Pool to be used for parallel processing. Notice if you set this option, then
parallel processing is automatic implied, and you do not have to enable that
option as well." },
- "onPrepare": { "index": 9, "kind": "attribute", "displayName": "On
Prepare", "label": "advanced", "required": false, "type": "object", "javaType":
"org.apache.camel.Processor", "deprecated": false, "autowired": false,
"secret": false, "description": "Uses the Processor when preparing the
org.apache.camel.Exchange to be send. This can be used to deep-clone messages
that should be send, or any custom logic needed before the exchange is send." },
- "shareUnitOfWork": { "index": 10, "kind": "attribute", "displayName":
"Share Unit Of Work", "label": "advanced", "required": false, "type":
"boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "description": "Shares the
org.apache.camel.spi.UnitOfWork with the parent and each of the sub messages.
Multicast will by default not share unit of work between the parent exchange
and each multicasted exchange. This means [...]
- "outputs": { "index": 11, "kind": "element", "displayName": "Outputs",
"required": true, "type": "array", "javaType": "java.util.List", "oneOf": [
"aggregate", "bean", "choice", "circuitBreaker", "claimCheck", "convertBodyTo",
"delay", "doCatch", "doFinally", "doTry", "dynamicRouter", "enrich", "filter",
"idempotentConsumer", "intercept", "interceptFrom", "interceptSendToEndpoint",
"kamelet", "loadBalance", "log", "loop", "marshal", "multicast",
"onCompletion", "onException", "onFall [...]
- "disabled": { "index": 12, "kind": "attribute", "displayName": "Disabled",
"label": "advanced", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Whether to disable this EIP from the
route during build time. Once an EIP has been disabled then it cannot be
enabled later at runtime." },
- "id": { "index": 13, "kind": "attribute", "displayName": "Id", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Sets the id of this node"
},
- "description": { "index": 14, "kind": "element", "displayName":
"Description", "required": false, "type": "object", "javaType":
"org.apache.camel.model.DescriptionDefinition", "deprecated": false,
"autowired": false, "secret": false, "description": "Sets the description of
this node" }
+ "parallelProcessing": { "index": 4, "kind": "attribute", "displayName":
"Parallel Processing", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "If enabled then sending messages to the
multicasts occurs concurrently. Note the caller thread will still wait until
all messages has been fully processed, before it continues. Its only the
sending and processing the replies [...]
+ "synchronous": { "index": 5, "kind": "attribute", "displayName":
"Synchronous", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Sets whether synchronous processing
should be strictly used. When enabled then the same thread is used to continue
routing after the multicast is complete, even if parallel processing is
enabled." },
+ "streaming": { "index": 6, "kind": "attribute", "displayName":
"Streaming", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "If enabled then Camel will process
replies out-of-order, eg in the order they come back. If disabled, Camel will
process replies in the same order as defined by the multicast." },
+ "stopOnException": { "index": 7, "kind": "attribute", "displayName": "Stop
On Exception", "label": "advanced", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "Will now stop further
processing if an exception or failure occurred during processing of an
org.apache.camel.Exchange and the caused exception will be thrown. Will also
stop if processing the exchange failed [...]
+ "timeout": { "index": 8, "kind": "attribute", "displayName": "Timeout",
"label": "advanced", "required": false, "type": "duration", "javaType":
"java.lang.String", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": "0", "description": "Sets a total timeout specified in millis,
when using parallel processing. If the Multicast hasn't been able to send and
process all replies within the given timeframe, then the timeout triggers and
the Multicast breaks out and co [...]
+ "executorService": { "index": 9, "kind": "attribute", "displayName":
"Executor Service", "label": "advanced", "required": false, "type": "object",
"javaType": "java.util.concurrent.ExecutorService", "deprecated": false,
"autowired": false, "secret": false, "description": "Refers to a custom Thread
Pool to be used for parallel processing. Notice if you set this option, then
parallel processing is automatic implied, and you do not have to enable that
option as well." },
+ "onPrepare": { "index": 10, "kind": "attribute", "displayName": "On
Prepare", "label": "advanced", "required": false, "type": "object", "javaType":
"org.apache.camel.Processor", "deprecated": false, "autowired": false,
"secret": false, "description": "Uses the Processor when preparing the
org.apache.camel.Exchange to be send. This can be used to deep-clone messages
that should be send, or any custom logic needed before the exchange is send." },
+ "shareUnitOfWork": { "index": 11, "kind": "attribute", "displayName":
"Share Unit Of Work", "label": "advanced", "required": false, "type":
"boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "description": "Shares the
org.apache.camel.spi.UnitOfWork with the parent and each of the sub messages.
Multicast will by default not share unit of work between the parent exchange
and each multicasted exchange. This means [...]
+ "outputs": { "index": 12, "kind": "element", "displayName": "Outputs",
"required": true, "type": "array", "javaType": "java.util.List", "oneOf": [
"aggregate", "bean", "choice", "circuitBreaker", "claimCheck", "convertBodyTo",
"delay", "doCatch", "doFinally", "doTry", "dynamicRouter", "enrich", "filter",
"idempotentConsumer", "intercept", "interceptFrom", "interceptSendToEndpoint",
"kamelet", "loadBalance", "log", "loop", "marshal", "multicast",
"onCompletion", "onException", "onFall [...]
+ "disabled": { "index": 13, "kind": "attribute", "displayName": "Disabled",
"label": "advanced", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Whether to disable this EIP from the
route during build time. Once an EIP has been disabled then it cannot be
enabled later at runtime." },
+ "id": { "index": 14, "kind": "attribute", "displayName": "Id", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Sets the id of this node"
},
+ "description": { "index": 15, "kind": "element", "displayName":
"Description", "required": false, "type": "object", "javaType":
"org.apache.camel.model.DescriptionDefinition", "deprecated": false,
"autowired": false, "secret": false, "description": "Sets the description of
this node" }
}
}
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/recipientList.json
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/recipientList.json
index 219aca1dcb1..04dad8cfa13 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/recipientList.json
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/recipientList.json
@@ -18,17 +18,18 @@
"aggregationStrategyMethodName": { "index": 3, "kind": "attribute",
"displayName": "Aggregation Strategy Method Name", "label": "advanced",
"required": false, "type": "string", "javaType": "java.lang.String",
"deprecated": false, "autowired": false, "secret": false, "description": "This
option can be used to explicit declare the method name to use, when using POJOs
as the AggregationStrategy." },
"aggregationStrategyMethodAllowNull": { "index": 4, "kind": "attribute",
"displayName": "Aggregation Strategy Method Allow Null", "label": "advanced",
"required": false, "type": "boolean", "javaType": "java.lang.Boolean",
"deprecated": false, "autowired": false, "secret": false, "defaultValue":
false, "description": "If this option is false then the aggregate method is not
used if there was no data to enrich. If this option is true then null values is
used as the oldExchange (when no [...]
"parallelAggregate": { "index": 5, "kind": "attribute", "displayName":
"Parallel Aggregate", "label": "advanced", "required": false, "type":
"boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "description": "If enabled then
the aggregate method on AggregationStrategy can be called concurrently. Notice
that this would require the implementation of AggregationStrategy to be
implemented as thread-safe. By default [...]
- "parallelProcessing": { "index": 6, "kind": "attribute", "displayName":
"Parallel Processing", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "If enabled then sending messages to the
recipients occurs concurrently. Note the caller thread will still wait until
all messages has been fully processed, before it continues. Its only the
sending and processing the replies [...]
- "timeout": { "index": 7, "kind": "attribute", "displayName": "Timeout",
"required": false, "type": "duration", "javaType": "java.lang.String",
"deprecated": false, "autowired": false, "secret": false, "defaultValue": "0",
"description": "Sets a total timeout specified in millis, when using parallel
processing. If the Recipient List hasn't been able to send and process all
replies within the given timeframe, then the timeout triggers and the Recipient
List breaks out and continues. No [...]
- "executorService": { "index": 8, "kind": "attribute", "displayName":
"Executor Service", "label": "advanced", "required": false, "type": "object",
"javaType": "java.util.concurrent.ExecutorService", "deprecated": false,
"autowired": false, "secret": false, "description": "To use a custom Thread
Pool to be used for parallel processing. Notice if you set this option, then
parallel processing is automatic implied, and you do not have to enable that
option as well." },
- "stopOnException": { "index": 9, "kind": "attribute", "displayName": "Stop
On Exception", "label": "advanced", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "Will now stop further
processing if an exception or failure occurred during processing of an
org.apache.camel.Exchange and the caused exception will be thrown. Will also
stop if processing the exchange failed [...]
- "ignoreInvalidEndpoints": { "index": 10, "kind": "attribute",
"displayName": "Ignore Invalid Endpoints", "label": "advanced", "required":
false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": false, "description":
"Ignore the invalidate endpoint exception when try to create a producer with
that endpoint" },
- "streaming": { "index": 11, "kind": "attribute", "displayName":
"Streaming", "label": "advanced", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "If enabled then Camel
will process replies out-of-order, eg in the order they come back. If disabled,
Camel will process replies in the same order as defined by the recipient list."
},
- "onPrepare": { "index": 12, "kind": "attribute", "displayName": "On
Prepare", "label": "advanced", "required": false, "type": "object", "javaType":
"org.apache.camel.Processor", "deprecated": false, "autowired": false,
"secret": false, "description": "Uses the Processor when preparing the
org.apache.camel.Exchange to be used send. This can be used to deep-clone
messages that should be send, or any custom logic needed before the exchange is
send." },
- "cacheSize": { "index": 13, "kind": "attribute", "displayName": "Cache
Size", "label": "advanced", "required": false, "type": "integer", "javaType":
"java.lang.Integer", "deprecated": false, "autowired": false, "secret": false,
"description": "Sets the maximum size used by the
org.apache.camel.spi.ProducerCache which is used to cache and reuse producers
when using this recipient list, when uris are reused. Beware that when using
dynamic endpoints then it affects how well the cache ca [...]
- "shareUnitOfWork": { "index": 14, "kind": "attribute", "displayName":
"Share Unit Of Work", "label": "advanced", "required": false, "type":
"boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "description": "Shares the
org.apache.camel.spi.UnitOfWork with the parent and each of the sub messages.
Recipient List will by default not share unit of work between the parent
exchange and each recipient exchange. This me [...]
- "disabled": { "index": 15, "kind": "attribute", "displayName": "Disabled",
"label": "advanced", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Whether to disable this EIP from the
route during build time. Once an EIP has been disabled then it cannot be
enabled later at runtime." },
- "id": { "index": 16, "kind": "attribute", "displayName": "Id", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Sets the id of this node"
},
- "description": { "index": 17, "kind": "element", "displayName":
"Description", "required": false, "type": "object", "javaType":
"org.apache.camel.model.DescriptionDefinition", "deprecated": false,
"autowired": false, "secret": false, "description": "Sets the description of
this node" }
+ "parallelProcessing": { "index": 6, "kind": "attribute", "displayName":
"Parallel Processing", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "If enabled then sending messages to the
recipients occurs concurrently. Note the caller thread will still wait until
all messages has been fully processed, before it continues. Its only the
sending and processing the replies [...]
+ "synchronous": { "index": 7, "kind": "attribute", "displayName":
"Synchronous", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Sets whether synchronous processing
should be strictly used. When enabled then the same thread is used to continue
routing after the recipient list is complete, even if parallel processing is
enabled." },
+ "timeout": { "index": 8, "kind": "attribute", "displayName": "Timeout",
"required": false, "type": "duration", "javaType": "java.lang.String",
"deprecated": false, "autowired": false, "secret": false, "defaultValue": "0",
"description": "Sets a total timeout specified in millis, when using parallel
processing. If the Recipient List hasn't been able to send and process all
replies within the given timeframe, then the timeout triggers and the Recipient
List breaks out and continues. No [...]
+ "executorService": { "index": 9, "kind": "attribute", "displayName":
"Executor Service", "label": "advanced", "required": false, "type": "object",
"javaType": "java.util.concurrent.ExecutorService", "deprecated": false,
"autowired": false, "secret": false, "description": "To use a custom Thread
Pool to be used for parallel processing. Notice if you set this option, then
parallel processing is automatic implied, and you do not have to enable that
option as well." },
+ "stopOnException": { "index": 10, "kind": "attribute", "displayName":
"Stop On Exception", "label": "advanced", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "Will now stop further
processing if an exception or failure occurred during processing of an
org.apache.camel.Exchange and the caused exception will be thrown. Will also
stop if processing the exchange failed [...]
+ "ignoreInvalidEndpoints": { "index": 11, "kind": "attribute",
"displayName": "Ignore Invalid Endpoints", "label": "advanced", "required":
false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": false, "description":
"Ignore the invalidate endpoint exception when try to create a producer with
that endpoint" },
+ "streaming": { "index": 12, "kind": "attribute", "displayName":
"Streaming", "label": "advanced", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "If enabled then Camel
will process replies out-of-order, eg in the order they come back. If disabled,
Camel will process replies in the same order as defined by the recipient list."
},
+ "onPrepare": { "index": 13, "kind": "attribute", "displayName": "On
Prepare", "label": "advanced", "required": false, "type": "object", "javaType":
"org.apache.camel.Processor", "deprecated": false, "autowired": false,
"secret": false, "description": "Uses the Processor when preparing the
org.apache.camel.Exchange to be used send. This can be used to deep-clone
messages that should be send, or any custom logic needed before the exchange is
send." },
+ "cacheSize": { "index": 14, "kind": "attribute", "displayName": "Cache
Size", "label": "advanced", "required": false, "type": "integer", "javaType":
"java.lang.Integer", "deprecated": false, "autowired": false, "secret": false,
"description": "Sets the maximum size used by the
org.apache.camel.spi.ProducerCache which is used to cache and reuse producers
when using this recipient list, when uris are reused. Beware that when using
dynamic endpoints then it affects how well the cache ca [...]
+ "shareUnitOfWork": { "index": 15, "kind": "attribute", "displayName":
"Share Unit Of Work", "label": "advanced", "required": false, "type":
"boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "description": "Shares the
org.apache.camel.spi.UnitOfWork with the parent and each of the sub messages.
Recipient List will by default not share unit of work between the parent
exchange and each recipient exchange. This me [...]
+ "disabled": { "index": 16, "kind": "attribute", "displayName": "Disabled",
"label": "advanced", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Whether to disable this EIP from the
route during build time. Once an EIP has been disabled then it cannot be
enabled later at runtime." },
+ "id": { "index": 17, "kind": "attribute", "displayName": "Id", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Sets the id of this node"
},
+ "description": { "index": 18, "kind": "element", "displayName":
"Description", "required": false, "type": "object", "javaType":
"org.apache.camel.model.DescriptionDefinition", "deprecated": false,
"autowired": false, "secret": false, "description": "Sets the description of
this node" }
}
}
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/split.json
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/split.json
index f7a11b19030..a2badb93d05 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/split.json
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/split.json
@@ -18,16 +18,17 @@
"aggregationStrategyMethodName": { "index": 3, "kind": "attribute",
"displayName": "Aggregation Strategy Method Name", "label": "advanced",
"required": false, "type": "string", "javaType": "java.lang.String",
"deprecated": false, "autowired": false, "secret": false, "description": "This
option can be used to explicit declare the method name to use, when using POJOs
as the AggregationStrategy." },
"aggregationStrategyMethodAllowNull": { "index": 4, "kind": "attribute",
"displayName": "Aggregation Strategy Method Allow Null", "label": "advanced",
"required": false, "type": "boolean", "javaType": "java.lang.Boolean",
"deprecated": false, "autowired": false, "secret": false, "defaultValue":
false, "description": "If this option is false then the aggregate method is not
used if there was no data to enrich. If this option is true then null values is
used as the oldExchange (when no [...]
"parallelAggregate": { "index": 5, "kind": "attribute", "displayName":
"Parallel Aggregate", "label": "advanced", "required": false, "type":
"boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "description": "If enabled then
the aggregate method on AggregationStrategy can be called concurrently. Notice
that this would require the implementation of AggregationStrategy to be
implemented as thread-safe. By default [...]
- "parallelProcessing": { "index": 6, "kind": "attribute", "displayName":
"Parallel Processing", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "If enabled then processing each split
messages occurs concurrently. Note the caller thread will still wait until all
messages has been fully processed, before it continues. It's only processing
the sub messages from the split [...]
- "streaming": { "index": 7, "kind": "attribute", "displayName":
"Streaming", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "When in streaming mode, then the
splitter splits the original message on-demand, and each split message is
processed one by one. This reduces memory usage as the splitter do not split
all the messages first, but then we do not know the total si [...]
- "stopOnException": { "index": 8, "kind": "attribute", "displayName": "Stop
On Exception", "label": "advanced", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "Will now stop further
processing if an exception or failure occurred during processing of an
org.apache.camel.Exchange and the caused exception will be thrown. Will also
stop if processing the exchange failed [...]
- "timeout": { "index": 9, "kind": "attribute", "displayName": "Timeout",
"label": "advanced", "required": false, "type": "duration", "javaType":
"java.lang.String", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": "0", "description": "Sets a total timeout specified in millis,
when using parallel processing. If the Splitter hasn't been able to split and
process all the sub messages within the given timeframe, then the timeout
triggers and the Splitter breaks ou [...]
- "executorService": { "index": 10, "kind": "attribute", "displayName":
"Executor Service", "label": "advanced", "required": false, "type": "object",
"javaType": "java.util.concurrent.ExecutorService", "deprecated": false,
"autowired": false, "secret": false, "description": "To use a custom Thread
Pool to be used for parallel processing. Notice if you set this option, then
parallel processing is automatically implied, and you do not have to enable
that option as well." },
- "onPrepare": { "index": 11, "kind": "attribute", "displayName": "On
Prepare", "label": "advanced", "required": false, "type": "object", "javaType":
"org.apache.camel.Processor", "deprecated": false, "autowired": false,
"secret": false, "description": "Uses the Processor when preparing the
org.apache.camel.Exchange to be sent. This can be used to deep-clone messages
that should be sent, or any custom logic needed before the exchange is sent." },
- "shareUnitOfWork": { "index": 12, "kind": "attribute", "displayName":
"Share Unit Of Work", "label": "advanced", "required": false, "type":
"boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "description": "Shares the
org.apache.camel.spi.UnitOfWork with the parent and each of the sub messages.
Splitter will by default not share unit of work between the parent exchange and
each split exchange. This means each s [...]
- "outputs": { "index": 13, "kind": "element", "displayName": "Outputs",
"required": true, "type": "array", "javaType":
"java.util.List<org.apache.camel.model.ProcessorDefinition<java.lang.Object>>",
"oneOf": [ "aggregate", "bean", "choice", "circuitBreaker", "claimCheck",
"convertBodyTo", "delay", "doCatch", "doFinally", "doTry", "dynamicRouter",
"enrich", "filter", "idempotentConsumer", "intercept", "interceptFrom",
"interceptSendToEndpoint", "kamelet", "loadBalance", "log", "loop", [...]
- "disabled": { "index": 14, "kind": "attribute", "displayName": "Disabled",
"label": "advanced", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Whether to disable this EIP from the
route during build time. Once an EIP has been disabled then it cannot be
enabled later at runtime." },
- "id": { "index": 15, "kind": "attribute", "displayName": "Id", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Sets the id of this node"
},
- "description": { "index": 16, "kind": "element", "displayName":
"Description", "required": false, "type": "object", "javaType":
"org.apache.camel.model.DescriptionDefinition", "deprecated": false,
"autowired": false, "secret": false, "description": "Sets the description of
this node" }
+ "parallelProcessing": { "index": 6, "kind": "attribute", "displayName":
"Parallel Processing", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "If enabled then processing each split
messages occurs concurrently. Note the caller thread will still wait until all
messages has been fully processed, before it continues. It's only processing
the sub messages from the split [...]
+ "synchronous": { "index": 7, "kind": "attribute", "displayName":
"Synchronous", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Sets whether synchronous processing
should be strictly used. When enabled then the same thread is used to continue
routing after the split is complete, even if parallel processing is enabled." },
+ "streaming": { "index": 8, "kind": "attribute", "displayName":
"Streaming", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "When in streaming mode, then the
splitter splits the original message on-demand, and each split message is
processed one by one. This reduces memory usage as the splitter do not split
all the messages first, but then we do not know the total si [...]
+ "stopOnException": { "index": 9, "kind": "attribute", "displayName": "Stop
On Exception", "label": "advanced", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "Will now stop further
processing if an exception or failure occurred during processing of an
org.apache.camel.Exchange and the caused exception will be thrown. Will also
stop if processing the exchange failed [...]
+ "timeout": { "index": 10, "kind": "attribute", "displayName": "Timeout",
"label": "advanced", "required": false, "type": "duration", "javaType":
"java.lang.String", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": "0", "description": "Sets a total timeout specified in millis,
when using parallel processing. If the Splitter hasn't been able to split and
process all the sub messages within the given timeframe, then the timeout
triggers and the Splitter breaks o [...]
+ "executorService": { "index": 11, "kind": "attribute", "displayName":
"Executor Service", "label": "advanced", "required": false, "type": "object",
"javaType": "java.util.concurrent.ExecutorService", "deprecated": false,
"autowired": false, "secret": false, "description": "To use a custom Thread
Pool to be used for parallel processing. Notice if you set this option, then
parallel processing is automatically implied, and you do not have to enable
that option as well." },
+ "onPrepare": { "index": 12, "kind": "attribute", "displayName": "On
Prepare", "label": "advanced", "required": false, "type": "object", "javaType":
"org.apache.camel.Processor", "deprecated": false, "autowired": false,
"secret": false, "description": "Uses the Processor when preparing the
org.apache.camel.Exchange to be sent. This can be used to deep-clone messages
that should be sent, or any custom logic needed before the exchange is sent." },
+ "shareUnitOfWork": { "index": 13, "kind": "attribute", "displayName":
"Share Unit Of Work", "label": "advanced", "required": false, "type":
"boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "description": "Shares the
org.apache.camel.spi.UnitOfWork with the parent and each of the sub messages.
Splitter will by default not share unit of work between the parent exchange and
each split exchange. This means each s [...]
+ "outputs": { "index": 14, "kind": "element", "displayName": "Outputs",
"required": true, "type": "array", "javaType":
"java.util.List<org.apache.camel.model.ProcessorDefinition<java.lang.Object>>",
"oneOf": [ "aggregate", "bean", "choice", "circuitBreaker", "claimCheck",
"convertBodyTo", "delay", "doCatch", "doFinally", "doTry", "dynamicRouter",
"enrich", "filter", "idempotentConsumer", "intercept", "interceptFrom",
"interceptSendToEndpoint", "kamelet", "loadBalance", "log", "loop", [...]
+ "disabled": { "index": 15, "kind": "attribute", "displayName": "Disabled",
"label": "advanced", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Whether to disable this EIP from the
route during build time. Once an EIP has been disabled then it cannot be
enabled later at runtime." },
+ "id": { "index": 16, "kind": "attribute", "displayName": "Id", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Sets the id of this node"
},
+ "description": { "index": 17, "kind": "element", "displayName":
"Description", "required": false, "type": "object", "javaType":
"org.apache.camel.model.DescriptionDefinition", "deprecated": false,
"autowired": false, "secret": false, "description": "Sets the description of
this node" }
}
}
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd
index d4d47558890..4616bc9c742 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd
@@ -10052,7 +10052,19 @@ when the AggregationStrategy is implemented as
thread-safe. Default value: false
<![CDATA[
If enabled then sending messages to the multicasts occurs concurrently. Note
the caller thread will still wait until all
messages has been fully processed, before it continues. Its only the sending
and processing the replies from the
-multicasts which happens concurrently. Default value: false
+multicasts which happens concurrently. When parallel processing is enabled,
then the Camel routing engin will continue
+processing using last used thread from the parallel thread pool. However, if
you want to use the original thread that
+called the multicast, then make sure to enable the synchronous option as well.
Default value: false
+]]>
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="synchronous" type="xs:string">
+ <xs:annotation>
+ <xs:documentation xml:lang="en">
+<![CDATA[
+Sets whether synchronous processing should be strictly used. When enabled then
the same thread is used to continue
+routing after the multicast is complete, even if parallel processing is
enabled. Default value: false
]]>
</xs:documentation>
</xs:annotation>
@@ -10989,7 +11001,19 @@ when the AggregationStrategy is implemented as
thread-safe. Default value: false
<![CDATA[
If enabled then sending messages to the recipients occurs concurrently. Note
the caller thread will still wait until all
messages has been fully processed, before it continues. Its only the sending
and processing the replies from the
-recipients which happens concurrently. Default value: false
+recipients which happens concurrently. When parallel processing is enabled,
then the Camel routing engin will continue
+processing using last used thread from the parallel thread pool. However, if
you want to use the original thread that
+called the recipient list, then make sure to enable the synchronous option as
well. Default value: false
+]]>
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="synchronous" type="xs:string">
+ <xs:annotation>
+ <xs:documentation xml:lang="en">
+<![CDATA[
+Sets whether synchronous processing should be strictly used. When enabled then
the same thread is used to continue
+routing after the recipient list is complete, even if parallel processing is
enabled. Default value: false
]]>
</xs:documentation>
</xs:annotation>
@@ -12473,7 +12497,19 @@ when the AggregationStrategy is implemented as
thread-safe. Default value: false
<![CDATA[
If enabled then processing each split messages occurs concurrently. Note the
caller thread will still wait until all
messages has been fully processed, before it continues. It's only processing
the sub messages from the splitter which
-happens concurrently. Default value: false
+happens concurrently. When parallel processing is enabled, then the Camel
routing engin will continue processing using
+last used thread from the parallel thread pool. However, if you want to use
the original thread that called the
+splitter, then make sure to enable the synchronous option as well. Default
value: false
+]]>
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="synchronous" type="xs:string">
+ <xs:annotation>
+ <xs:documentation xml:lang="en">
+<![CDATA[
+Sets whether synchronous processing should be strictly used. When enabled then
the same thread is used to continue
+routing after the split is complete, even if parallel processing is enabled.
Default value: false
]]>
</xs:documentation>
</xs:annotation>
diff --git
a/core/camel-core-engine/src/main/docs/modules/eips/pages/multicast-eip.adoc
b/core/camel-core-engine/src/main/docs/modules/eips/pages/multicast-eip.adoc
index 81f8c639ecf..992cde66657 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/multicast-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/multicast-eip.adoc
@@ -105,6 +105,13 @@ XML::
----
====
+[IMPORTANT]
+====
+When parallel processing is enabled, then the Camel routing engin will
continue processing
+using last used thread from the parallel thread pool. However, if you want to
use the original
+thread that called the multicast, then make sure to enable the synchronous
option as well.
+====
+
=== Ending a Multicast block
You may want to continue routing the exchange after the Multicast EIP.
diff --git
a/core/camel-core-engine/src/main/docs/modules/eips/pages/recipientList-eip.adoc
b/core/camel-core-engine/src/main/docs/modules/eips/pages/recipientList-eip.adoc
index 04ebed37e68..74899da126f 100644
---
a/core/camel-core-engine/src/main/docs/modules/eips/pages/recipientList-eip.adoc
+++
b/core/camel-core-engine/src/main/docs/modules/eips/pages/recipientList-eip.adoc
@@ -178,6 +178,13 @@ XML::
----
====
+[IMPORTANT]
+====
+When parallel processing is enabled, then the Camel routing engin will
continue processing
+using last used thread from the parallel thread pool. However, if you want to
use the original
+thread that called the recipient list, then make sure to enable the
synchronous option as well.
+====
+
==== Using custom thread pool
A thread pool is only used for `parallelProcessing`. You supply your own
custom thread pool via the `ExecutorServiceStrategy` (see Camel's Threading
Model),
diff --git
a/core/camel-core-engine/src/main/docs/modules/eips/pages/split-eip.adoc
b/core/camel-core-engine/src/main/docs/modules/eips/pages/split-eip.adoc
index 081c2db3e18..2c02c1560c8 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/split-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/split-eip.adoc
@@ -91,6 +91,10 @@ so you could use any of the supported languages such as
xref:components:languages:simple-language.adoc[Simple],
xref:components:languages:xpath-language.adoc[XPath],
xref:components:languages:jsonpath-language.adoc[JSonPath],
xref:components:languages:groovy-language.adoc[Groovy] to perform the split.
+[tabs]
+====
+Java::
++
[source,java]
----
from("activemq:my.queue")
@@ -98,8 +102,8 @@ from("activemq:my.queue")
.to("file:some/directory")
----
-And in XML:
-
+XML::
++
[source,xml]
----
<route>
@@ -110,6 +114,7 @@ And in XML:
</split>
</route>
----
+====
=== Splitting the message body
@@ -131,6 +136,10 @@ the Split EIP will be split into a single message (the
same).
To use this with the splitter you should _just_ use body as the expression:
+[tabs]
+====
+Java::
++
[source,java]
----
from("direct:splitUsingBody")
@@ -138,6 +147,8 @@ from("direct:splitUsingBody")
.to("mock:result");
----
+XML::
++
In XML you use xref:components:languages:simple-language.adoc[Simple] to refer
to the message body:
[source,xml]
@@ -150,6 +161,7 @@ In XML you use
xref:components:languages:simple-language.adoc[Simple] to refer t
</split>
</route>
----
+====
=== Splitting with parallel processing
@@ -158,6 +170,10 @@ is processed by its own thread in parallel.
The example below enabled parallel mode:
+[tabs]
+====
+Java::
++
[source,java]
----
from("direct:a")
@@ -167,8 +183,8 @@ from("direct:a")
.to("direct:z");
----
-And in XML:
-
+XML::
++
[source,xml]
----
<route>
@@ -181,6 +197,14 @@ And in XML:
</split>
</route>
----
+====
+
+[IMPORTANT]
+====
+When parallel processing is enabled, then the Camel routing engin will
continue processing
+using last used thread from the parallel thread pool. However, if you want to
use the original
+thread that called the splitter, then make sure to enable the synchronous
option as well.
+====
=== Ending a Split block
@@ -191,6 +215,10 @@ In the example above then sending to mock:result happens
after the Spllit EIP ha
In other words the message should finish splitting the entire message before
the message
continues.
+[tabs]
+====
+Java::
++
[source,java]
----
from("direct:a")
@@ -202,6 +230,8 @@ from("direct:a")
.to("mock:result");
----
+XML::
++
And in XML its intuitive as `</split>` marks the end of the block:
[source,xml]
@@ -217,6 +247,7 @@ And in XML its intuitive as `</split>` marks the end of the
block:
<to uri="mock:result"/>
</route>
----
+====
=== What is returned from Split EIP when its complete
@@ -231,6 +262,10 @@ as a single response exchange, that becomes the outgoing
exchange after the Spli
The example now aggregates with the `MyAggregationStrategy` class:
+[tabs]
+====
+Java::
++
[source,java]
----
from("direct:start")
@@ -242,6 +277,8 @@ from("direct:start")
.to("mock:result");
----
+XML::
++
And in XML we can refer to the FQN class name with `#class:` syntax as shown
below:
[source,xml]
@@ -257,6 +294,7 @@ And in XML we can refer to the FQN class name with
`#class:` syntax as shown bel
<to uri="mock:result"/>
</route>
----
+====
[NOTE]
====
@@ -277,6 +315,10 @@ The Split EIP operates in two modes when splitting:
You can split in streaming mode as shown:
+[tabs]
+====
+Java::
++
[source,java]
----
from("direct:streaming")
@@ -284,8 +326,8 @@ from("direct:streaming")
.to("activemq:my.parts");
----
-And in XML:
-
+XML::
++
[source,xml]
----
<route>
@@ -296,10 +338,15 @@ And in XML:
</split>
</route>
----
+====
You can also supply a custom xref:components:languages:bean-language.adoc[Bean]
to perform the splitting in streaming mode like this:
+[tabs]
+====
+Java::
++
[source,java]
----
from("direct:streaming")
@@ -307,8 +354,8 @@ from("direct:streaming")
.to("activemq:my.parts")
----
-And in XML:
-
+XML::
++
[source,xml]
----
<route>
@@ -319,6 +366,7 @@ And in XML:
</split>
</route>
----
+====
Then the custom bean could for example be implemented as follows:
@@ -394,15 +442,18 @@ Now to split this big file using
xref:components:languages:xpath-language.adoc[X
would cause the entire content to be loaded into memory. So instead we can use
the
xref:components:languages:tokenize-language.adoc[Tokenize] language to do this
as follows:
+[tabs]
+====
+Java::
++
[source,java]
----
from("file:inbox")
.split().tokenizeXML("order").streaming()
.to("activemq:queue:order");
----
-
-In XML the route would be as follows:
-
+XML::
++
[source,xml]
----
<route>
@@ -413,6 +464,7 @@ In XML the route would be as follows:
</split>
</route>
----
+====
This will split the file using the tag name of the child nodes (more precisely
speaking, the local name of the element without its namespace prefix if any),
which mean it will grab the content between the `<order>` and `</order>` tags
(incl. the tags).
@@ -428,6 +480,19 @@ So for example a split message would be structured as
follows:
If you want to inherit namespaces from a root/parent tag, then you can do this
as well by providing the name of the root/parent tag:
+[tabs]
+====
+Java::
++
+[source,java]
+----
+from("file:inbox")
+ .split().tokenizeXML("order", "orders").streaming()
+ .to("activemq:queue:order");
+----
+
+XML::
++
[source,xml]
----
<route>
@@ -438,15 +503,7 @@ If you want to inherit namespaces from a root/parent tag,
then you can do this a
</split>
</route>
----
-
-And in Java DSL it is done like this:
-
-[source,java]
-----
-from("file:inbox")
- .split().tokenizeXML("order", "orders").streaming()
- .to("activemq:queue:order");
-----
+====
You can set `inheritNamsepaceTagName` property to `*` to include the preceding
context in each token (i.e., generating each token enclosed in its ancestor
elements). It is noted that each token must share the same ancestor elements in
this case.
The above tokenizer works well on simple structures but has some inherent
limitations in handling more complex XML structures.
@@ -550,6 +607,10 @@ can be used for grouping N parts together, for example to
split big files into c
Doing this is easy as the following example shows:
+[tabs]
+====
+Java::
++
[source,java]
----
from("file:inbox")
@@ -557,8 +618,8 @@ from("file:inbox")
.to("activemq:queue:order");
----
-And in XML DSL:
-
+XML::
++
[source,xml]
----
<route>
@@ -569,6 +630,7 @@ And in XML DSL:
</split>
</route>
----
+====
The `group` value must be a positive number dictating how many elements to
combine together in a group.
Each part will be combined using the token.
@@ -707,6 +769,10 @@ handle it. You can do this by specifying that it should
stop in case of an
exception occurred. This is done by the `stopOnException` option as
shown below:
+[tabs]
+====
+Java::
++
[source,java]
----
from("direct:start")
@@ -717,8 +783,8 @@ from("direct:start")
.to("direct:cheese");
----
-And using XML DSL you specify it as follows:
-
+XML::
++
[source,xml]
----
<route>
@@ -731,6 +797,7 @@ And using XML DSL you specify it as follows:
<to uri="direct:cheese"/>
</route>
----
+====
In the example above, then `MyProcessor` is causing a failure and throws an
exception.
This means the Split EIP will stop after this, and not split anymore.
diff --git
a/core/camel-core-model/src/generated/resources/org/apache/camel/model/multicast.json
b/core/camel-core-model/src/generated/resources/org/apache/camel/model/multicast.json
index cc0dadf2258..5e4a32e3858 100644
---
a/core/camel-core-model/src/generated/resources/org/apache/camel/model/multicast.json
+++
b/core/camel-core-model/src/generated/resources/org/apache/camel/model/multicast.json
@@ -16,16 +16,17 @@
"aggregationStrategyMethodName": { "index": 1, "kind": "attribute",
"displayName": "Aggregation Strategy Method Name", "label": "advanced",
"required": false, "type": "string", "javaType": "java.lang.String",
"deprecated": false, "autowired": false, "secret": false, "description": "This
option can be used to explicit declare the method name to use, when using POJOs
as the AggregationStrategy." },
"aggregationStrategyMethodAllowNull": { "index": 2, "kind": "attribute",
"displayName": "Aggregation Strategy Method Allow Null", "label": "advanced",
"required": false, "type": "boolean", "javaType": "java.lang.Boolean",
"deprecated": false, "autowired": false, "secret": false, "defaultValue":
false, "description": "If this option is false then the aggregate method is not
used if there was no data to enrich. If this option is true then null values is
used as the oldExchange (when no [...]
"parallelAggregate": { "index": 3, "kind": "attribute", "displayName":
"Parallel Aggregate", "label": "advanced", "required": false, "type":
"boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "description": "If enabled then
the aggregate method on AggregationStrategy can be called concurrently. Notice
that this would require the implementation of AggregationStrategy to be
implemented as thread-safe. By default [...]
- "parallelProcessing": { "index": 4, "kind": "attribute", "displayName":
"Parallel Processing", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "If enabled then sending messages to the
multicasts occurs concurrently. Note the caller thread will still wait until
all messages has been fully processed, before it continues. Its only the
sending and processing the replies [...]
- "streaming": { "index": 5, "kind": "attribute", "displayName":
"Streaming", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "If enabled then Camel will process
replies out-of-order, eg in the order they come back. If disabled, Camel will
process replies in the same order as defined by the multicast." },
- "stopOnException": { "index": 6, "kind": "attribute", "displayName": "Stop
On Exception", "label": "advanced", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "Will now stop further
processing if an exception or failure occurred during processing of an
org.apache.camel.Exchange and the caused exception will be thrown. Will also
stop if processing the exchange failed [...]
- "timeout": { "index": 7, "kind": "attribute", "displayName": "Timeout",
"label": "advanced", "required": false, "type": "duration", "javaType":
"java.lang.String", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": "0", "description": "Sets a total timeout specified in millis,
when using parallel processing. If the Multicast hasn't been able to send and
process all replies within the given timeframe, then the timeout triggers and
the Multicast breaks out and co [...]
- "executorService": { "index": 8, "kind": "attribute", "displayName":
"Executor Service", "label": "advanced", "required": false, "type": "object",
"javaType": "java.util.concurrent.ExecutorService", "deprecated": false,
"autowired": false, "secret": false, "description": "Refers to a custom Thread
Pool to be used for parallel processing. Notice if you set this option, then
parallel processing is automatic implied, and you do not have to enable that
option as well." },
- "onPrepare": { "index": 9, "kind": "attribute", "displayName": "On
Prepare", "label": "advanced", "required": false, "type": "object", "javaType":
"org.apache.camel.Processor", "deprecated": false, "autowired": false,
"secret": false, "description": "Uses the Processor when preparing the
org.apache.camel.Exchange to be send. This can be used to deep-clone messages
that should be send, or any custom logic needed before the exchange is send." },
- "shareUnitOfWork": { "index": 10, "kind": "attribute", "displayName":
"Share Unit Of Work", "label": "advanced", "required": false, "type":
"boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "description": "Shares the
org.apache.camel.spi.UnitOfWork with the parent and each of the sub messages.
Multicast will by default not share unit of work between the parent exchange
and each multicasted exchange. This means [...]
- "outputs": { "index": 11, "kind": "element", "displayName": "Outputs",
"required": true, "type": "array", "javaType": "java.util.List", "oneOf": [
"aggregate", "bean", "choice", "circuitBreaker", "claimCheck", "convertBodyTo",
"delay", "doCatch", "doFinally", "doTry", "dynamicRouter", "enrich", "filter",
"idempotentConsumer", "intercept", "interceptFrom", "interceptSendToEndpoint",
"kamelet", "loadBalance", "log", "loop", "marshal", "multicast",
"onCompletion", "onException", "onFall [...]
- "disabled": { "index": 12, "kind": "attribute", "displayName": "Disabled",
"label": "advanced", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Whether to disable this EIP from the
route during build time. Once an EIP has been disabled then it cannot be
enabled later at runtime." },
- "id": { "index": 13, "kind": "attribute", "displayName": "Id", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Sets the id of this node"
},
- "description": { "index": 14, "kind": "element", "displayName":
"Description", "required": false, "type": "object", "javaType":
"org.apache.camel.model.DescriptionDefinition", "deprecated": false,
"autowired": false, "secret": false, "description": "Sets the description of
this node" }
+ "parallelProcessing": { "index": 4, "kind": "attribute", "displayName":
"Parallel Processing", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "If enabled then sending messages to the
multicasts occurs concurrently. Note the caller thread will still wait until
all messages has been fully processed, before it continues. Its only the
sending and processing the replies [...]
+ "synchronous": { "index": 5, "kind": "attribute", "displayName":
"Synchronous", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Sets whether synchronous processing
should be strictly used. When enabled then the same thread is used to continue
routing after the multicast is complete, even if parallel processing is
enabled." },
+ "streaming": { "index": 6, "kind": "attribute", "displayName":
"Streaming", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "If enabled then Camel will process
replies out-of-order, eg in the order they come back. If disabled, Camel will
process replies in the same order as defined by the multicast." },
+ "stopOnException": { "index": 7, "kind": "attribute", "displayName": "Stop
On Exception", "label": "advanced", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "Will now stop further
processing if an exception or failure occurred during processing of an
org.apache.camel.Exchange and the caused exception will be thrown. Will also
stop if processing the exchange failed [...]
+ "timeout": { "index": 8, "kind": "attribute", "displayName": "Timeout",
"label": "advanced", "required": false, "type": "duration", "javaType":
"java.lang.String", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": "0", "description": "Sets a total timeout specified in millis,
when using parallel processing. If the Multicast hasn't been able to send and
process all replies within the given timeframe, then the timeout triggers and
the Multicast breaks out and co [...]
+ "executorService": { "index": 9, "kind": "attribute", "displayName":
"Executor Service", "label": "advanced", "required": false, "type": "object",
"javaType": "java.util.concurrent.ExecutorService", "deprecated": false,
"autowired": false, "secret": false, "description": "Refers to a custom Thread
Pool to be used for parallel processing. Notice if you set this option, then
parallel processing is automatic implied, and you do not have to enable that
option as well." },
+ "onPrepare": { "index": 10, "kind": "attribute", "displayName": "On
Prepare", "label": "advanced", "required": false, "type": "object", "javaType":
"org.apache.camel.Processor", "deprecated": false, "autowired": false,
"secret": false, "description": "Uses the Processor when preparing the
org.apache.camel.Exchange to be send. This can be used to deep-clone messages
that should be send, or any custom logic needed before the exchange is send." },
+ "shareUnitOfWork": { "index": 11, "kind": "attribute", "displayName":
"Share Unit Of Work", "label": "advanced", "required": false, "type":
"boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "description": "Shares the
org.apache.camel.spi.UnitOfWork with the parent and each of the sub messages.
Multicast will by default not share unit of work between the parent exchange
and each multicasted exchange. This means [...]
+ "outputs": { "index": 12, "kind": "element", "displayName": "Outputs",
"required": true, "type": "array", "javaType": "java.util.List", "oneOf": [
"aggregate", "bean", "choice", "circuitBreaker", "claimCheck", "convertBodyTo",
"delay", "doCatch", "doFinally", "doTry", "dynamicRouter", "enrich", "filter",
"idempotentConsumer", "intercept", "interceptFrom", "interceptSendToEndpoint",
"kamelet", "loadBalance", "log", "loop", "marshal", "multicast",
"onCompletion", "onException", "onFall [...]
+ "disabled": { "index": 13, "kind": "attribute", "displayName": "Disabled",
"label": "advanced", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Whether to disable this EIP from the
route during build time. Once an EIP has been disabled then it cannot be
enabled later at runtime." },
+ "id": { "index": 14, "kind": "attribute", "displayName": "Id", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Sets the id of this node"
},
+ "description": { "index": 15, "kind": "element", "displayName":
"Description", "required": false, "type": "object", "javaType":
"org.apache.camel.model.DescriptionDefinition", "deprecated": false,
"autowired": false, "secret": false, "description": "Sets the description of
this node" }
}
}
diff --git
a/core/camel-core-model/src/generated/resources/org/apache/camel/model/recipientList.json
b/core/camel-core-model/src/generated/resources/org/apache/camel/model/recipientList.json
index 219aca1dcb1..04dad8cfa13 100644
---
a/core/camel-core-model/src/generated/resources/org/apache/camel/model/recipientList.json
+++
b/core/camel-core-model/src/generated/resources/org/apache/camel/model/recipientList.json
@@ -18,17 +18,18 @@
"aggregationStrategyMethodName": { "index": 3, "kind": "attribute",
"displayName": "Aggregation Strategy Method Name", "label": "advanced",
"required": false, "type": "string", "javaType": "java.lang.String",
"deprecated": false, "autowired": false, "secret": false, "description": "This
option can be used to explicit declare the method name to use, when using POJOs
as the AggregationStrategy." },
"aggregationStrategyMethodAllowNull": { "index": 4, "kind": "attribute",
"displayName": "Aggregation Strategy Method Allow Null", "label": "advanced",
"required": false, "type": "boolean", "javaType": "java.lang.Boolean",
"deprecated": false, "autowired": false, "secret": false, "defaultValue":
false, "description": "If this option is false then the aggregate method is not
used if there was no data to enrich. If this option is true then null values is
used as the oldExchange (when no [...]
"parallelAggregate": { "index": 5, "kind": "attribute", "displayName":
"Parallel Aggregate", "label": "advanced", "required": false, "type":
"boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "description": "If enabled then
the aggregate method on AggregationStrategy can be called concurrently. Notice
that this would require the implementation of AggregationStrategy to be
implemented as thread-safe. By default [...]
- "parallelProcessing": { "index": 6, "kind": "attribute", "displayName":
"Parallel Processing", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "If enabled then sending messages to the
recipients occurs concurrently. Note the caller thread will still wait until
all messages has been fully processed, before it continues. Its only the
sending and processing the replies [...]
- "timeout": { "index": 7, "kind": "attribute", "displayName": "Timeout",
"required": false, "type": "duration", "javaType": "java.lang.String",
"deprecated": false, "autowired": false, "secret": false, "defaultValue": "0",
"description": "Sets a total timeout specified in millis, when using parallel
processing. If the Recipient List hasn't been able to send and process all
replies within the given timeframe, then the timeout triggers and the Recipient
List breaks out and continues. No [...]
- "executorService": { "index": 8, "kind": "attribute", "displayName":
"Executor Service", "label": "advanced", "required": false, "type": "object",
"javaType": "java.util.concurrent.ExecutorService", "deprecated": false,
"autowired": false, "secret": false, "description": "To use a custom Thread
Pool to be used for parallel processing. Notice if you set this option, then
parallel processing is automatic implied, and you do not have to enable that
option as well." },
- "stopOnException": { "index": 9, "kind": "attribute", "displayName": "Stop
On Exception", "label": "advanced", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "Will now stop further
processing if an exception or failure occurred during processing of an
org.apache.camel.Exchange and the caused exception will be thrown. Will also
stop if processing the exchange failed [...]
- "ignoreInvalidEndpoints": { "index": 10, "kind": "attribute",
"displayName": "Ignore Invalid Endpoints", "label": "advanced", "required":
false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": false, "description":
"Ignore the invalidate endpoint exception when try to create a producer with
that endpoint" },
- "streaming": { "index": 11, "kind": "attribute", "displayName":
"Streaming", "label": "advanced", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "If enabled then Camel
will process replies out-of-order, eg in the order they come back. If disabled,
Camel will process replies in the same order as defined by the recipient list."
},
- "onPrepare": { "index": 12, "kind": "attribute", "displayName": "On
Prepare", "label": "advanced", "required": false, "type": "object", "javaType":
"org.apache.camel.Processor", "deprecated": false, "autowired": false,
"secret": false, "description": "Uses the Processor when preparing the
org.apache.camel.Exchange to be used send. This can be used to deep-clone
messages that should be send, or any custom logic needed before the exchange is
send." },
- "cacheSize": { "index": 13, "kind": "attribute", "displayName": "Cache
Size", "label": "advanced", "required": false, "type": "integer", "javaType":
"java.lang.Integer", "deprecated": false, "autowired": false, "secret": false,
"description": "Sets the maximum size used by the
org.apache.camel.spi.ProducerCache which is used to cache and reuse producers
when using this recipient list, when uris are reused. Beware that when using
dynamic endpoints then it affects how well the cache ca [...]
- "shareUnitOfWork": { "index": 14, "kind": "attribute", "displayName":
"Share Unit Of Work", "label": "advanced", "required": false, "type":
"boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "description": "Shares the
org.apache.camel.spi.UnitOfWork with the parent and each of the sub messages.
Recipient List will by default not share unit of work between the parent
exchange and each recipient exchange. This me [...]
- "disabled": { "index": 15, "kind": "attribute", "displayName": "Disabled",
"label": "advanced", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Whether to disable this EIP from the
route during build time. Once an EIP has been disabled then it cannot be
enabled later at runtime." },
- "id": { "index": 16, "kind": "attribute", "displayName": "Id", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Sets the id of this node"
},
- "description": { "index": 17, "kind": "element", "displayName":
"Description", "required": false, "type": "object", "javaType":
"org.apache.camel.model.DescriptionDefinition", "deprecated": false,
"autowired": false, "secret": false, "description": "Sets the description of
this node" }
+ "parallelProcessing": { "index": 6, "kind": "attribute", "displayName":
"Parallel Processing", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "If enabled then sending messages to the
recipients occurs concurrently. Note the caller thread will still wait until
all messages has been fully processed, before it continues. Its only the
sending and processing the replies [...]
+ "synchronous": { "index": 7, "kind": "attribute", "displayName":
"Synchronous", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Sets whether synchronous processing
should be strictly used. When enabled then the same thread is used to continue
routing after the recipient list is complete, even if parallel processing is
enabled." },
+ "timeout": { "index": 8, "kind": "attribute", "displayName": "Timeout",
"required": false, "type": "duration", "javaType": "java.lang.String",
"deprecated": false, "autowired": false, "secret": false, "defaultValue": "0",
"description": "Sets a total timeout specified in millis, when using parallel
processing. If the Recipient List hasn't been able to send and process all
replies within the given timeframe, then the timeout triggers and the Recipient
List breaks out and continues. No [...]
+ "executorService": { "index": 9, "kind": "attribute", "displayName":
"Executor Service", "label": "advanced", "required": false, "type": "object",
"javaType": "java.util.concurrent.ExecutorService", "deprecated": false,
"autowired": false, "secret": false, "description": "To use a custom Thread
Pool to be used for parallel processing. Notice if you set this option, then
parallel processing is automatic implied, and you do not have to enable that
option as well." },
+ "stopOnException": { "index": 10, "kind": "attribute", "displayName":
"Stop On Exception", "label": "advanced", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "Will now stop further
processing if an exception or failure occurred during processing of an
org.apache.camel.Exchange and the caused exception will be thrown. Will also
stop if processing the exchange failed [...]
+ "ignoreInvalidEndpoints": { "index": 11, "kind": "attribute",
"displayName": "Ignore Invalid Endpoints", "label": "advanced", "required":
false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": false, "description":
"Ignore the invalidate endpoint exception when try to create a producer with
that endpoint" },
+ "streaming": { "index": 12, "kind": "attribute", "displayName":
"Streaming", "label": "advanced", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "If enabled then Camel
will process replies out-of-order, eg in the order they come back. If disabled,
Camel will process replies in the same order as defined by the recipient list."
},
+ "onPrepare": { "index": 13, "kind": "attribute", "displayName": "On
Prepare", "label": "advanced", "required": false, "type": "object", "javaType":
"org.apache.camel.Processor", "deprecated": false, "autowired": false,
"secret": false, "description": "Uses the Processor when preparing the
org.apache.camel.Exchange to be used send. This can be used to deep-clone
messages that should be send, or any custom logic needed before the exchange is
send." },
+ "cacheSize": { "index": 14, "kind": "attribute", "displayName": "Cache
Size", "label": "advanced", "required": false, "type": "integer", "javaType":
"java.lang.Integer", "deprecated": false, "autowired": false, "secret": false,
"description": "Sets the maximum size used by the
org.apache.camel.spi.ProducerCache which is used to cache and reuse producers
when using this recipient list, when uris are reused. Beware that when using
dynamic endpoints then it affects how well the cache ca [...]
+ "shareUnitOfWork": { "index": 15, "kind": "attribute", "displayName":
"Share Unit Of Work", "label": "advanced", "required": false, "type":
"boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "description": "Shares the
org.apache.camel.spi.UnitOfWork with the parent and each of the sub messages.
Recipient List will by default not share unit of work between the parent
exchange and each recipient exchange. This me [...]
+ "disabled": { "index": 16, "kind": "attribute", "displayName": "Disabled",
"label": "advanced", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Whether to disable this EIP from the
route during build time. Once an EIP has been disabled then it cannot be
enabled later at runtime." },
+ "id": { "index": 17, "kind": "attribute", "displayName": "Id", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Sets the id of this node"
},
+ "description": { "index": 18, "kind": "element", "displayName":
"Description", "required": false, "type": "object", "javaType":
"org.apache.camel.model.DescriptionDefinition", "deprecated": false,
"autowired": false, "secret": false, "description": "Sets the description of
this node" }
}
}
diff --git
a/core/camel-core-model/src/generated/resources/org/apache/camel/model/split.json
b/core/camel-core-model/src/generated/resources/org/apache/camel/model/split.json
index f7a11b19030..a2badb93d05 100644
---
a/core/camel-core-model/src/generated/resources/org/apache/camel/model/split.json
+++
b/core/camel-core-model/src/generated/resources/org/apache/camel/model/split.json
@@ -18,16 +18,17 @@
"aggregationStrategyMethodName": { "index": 3, "kind": "attribute",
"displayName": "Aggregation Strategy Method Name", "label": "advanced",
"required": false, "type": "string", "javaType": "java.lang.String",
"deprecated": false, "autowired": false, "secret": false, "description": "This
option can be used to explicit declare the method name to use, when using POJOs
as the AggregationStrategy." },
"aggregationStrategyMethodAllowNull": { "index": 4, "kind": "attribute",
"displayName": "Aggregation Strategy Method Allow Null", "label": "advanced",
"required": false, "type": "boolean", "javaType": "java.lang.Boolean",
"deprecated": false, "autowired": false, "secret": false, "defaultValue":
false, "description": "If this option is false then the aggregate method is not
used if there was no data to enrich. If this option is true then null values is
used as the oldExchange (when no [...]
"parallelAggregate": { "index": 5, "kind": "attribute", "displayName":
"Parallel Aggregate", "label": "advanced", "required": false, "type":
"boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "description": "If enabled then
the aggregate method on AggregationStrategy can be called concurrently. Notice
that this would require the implementation of AggregationStrategy to be
implemented as thread-safe. By default [...]
- "parallelProcessing": { "index": 6, "kind": "attribute", "displayName":
"Parallel Processing", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "If enabled then processing each split
messages occurs concurrently. Note the caller thread will still wait until all
messages has been fully processed, before it continues. It's only processing
the sub messages from the split [...]
- "streaming": { "index": 7, "kind": "attribute", "displayName":
"Streaming", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "When in streaming mode, then the
splitter splits the original message on-demand, and each split message is
processed one by one. This reduces memory usage as the splitter do not split
all the messages first, but then we do not know the total si [...]
- "stopOnException": { "index": 8, "kind": "attribute", "displayName": "Stop
On Exception", "label": "advanced", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "Will now stop further
processing if an exception or failure occurred during processing of an
org.apache.camel.Exchange and the caused exception will be thrown. Will also
stop if processing the exchange failed [...]
- "timeout": { "index": 9, "kind": "attribute", "displayName": "Timeout",
"label": "advanced", "required": false, "type": "duration", "javaType":
"java.lang.String", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": "0", "description": "Sets a total timeout specified in millis,
when using parallel processing. If the Splitter hasn't been able to split and
process all the sub messages within the given timeframe, then the timeout
triggers and the Splitter breaks ou [...]
- "executorService": { "index": 10, "kind": "attribute", "displayName":
"Executor Service", "label": "advanced", "required": false, "type": "object",
"javaType": "java.util.concurrent.ExecutorService", "deprecated": false,
"autowired": false, "secret": false, "description": "To use a custom Thread
Pool to be used for parallel processing. Notice if you set this option, then
parallel processing is automatically implied, and you do not have to enable
that option as well." },
- "onPrepare": { "index": 11, "kind": "attribute", "displayName": "On
Prepare", "label": "advanced", "required": false, "type": "object", "javaType":
"org.apache.camel.Processor", "deprecated": false, "autowired": false,
"secret": false, "description": "Uses the Processor when preparing the
org.apache.camel.Exchange to be sent. This can be used to deep-clone messages
that should be sent, or any custom logic needed before the exchange is sent." },
- "shareUnitOfWork": { "index": 12, "kind": "attribute", "displayName":
"Share Unit Of Work", "label": "advanced", "required": false, "type":
"boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "description": "Shares the
org.apache.camel.spi.UnitOfWork with the parent and each of the sub messages.
Splitter will by default not share unit of work between the parent exchange and
each split exchange. This means each s [...]
- "outputs": { "index": 13, "kind": "element", "displayName": "Outputs",
"required": true, "type": "array", "javaType":
"java.util.List<org.apache.camel.model.ProcessorDefinition<java.lang.Object>>",
"oneOf": [ "aggregate", "bean", "choice", "circuitBreaker", "claimCheck",
"convertBodyTo", "delay", "doCatch", "doFinally", "doTry", "dynamicRouter",
"enrich", "filter", "idempotentConsumer", "intercept", "interceptFrom",
"interceptSendToEndpoint", "kamelet", "loadBalance", "log", "loop", [...]
- "disabled": { "index": 14, "kind": "attribute", "displayName": "Disabled",
"label": "advanced", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Whether to disable this EIP from the
route during build time. Once an EIP has been disabled then it cannot be
enabled later at runtime." },
- "id": { "index": 15, "kind": "attribute", "displayName": "Id", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Sets the id of this node"
},
- "description": { "index": 16, "kind": "element", "displayName":
"Description", "required": false, "type": "object", "javaType":
"org.apache.camel.model.DescriptionDefinition", "deprecated": false,
"autowired": false, "secret": false, "description": "Sets the description of
this node" }
+ "parallelProcessing": { "index": 6, "kind": "attribute", "displayName":
"Parallel Processing", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "If enabled then processing each split
messages occurs concurrently. Note the caller thread will still wait until all
messages has been fully processed, before it continues. It's only processing
the sub messages from the split [...]
+ "synchronous": { "index": 7, "kind": "attribute", "displayName":
"Synchronous", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Sets whether synchronous processing
should be strictly used. When enabled then the same thread is used to continue
routing after the split is complete, even if parallel processing is enabled." },
+ "streaming": { "index": 8, "kind": "attribute", "displayName":
"Streaming", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "When in streaming mode, then the
splitter splits the original message on-demand, and each split message is
processed one by one. This reduces memory usage as the splitter do not split
all the messages first, but then we do not know the total si [...]
+ "stopOnException": { "index": 9, "kind": "attribute", "displayName": "Stop
On Exception", "label": "advanced", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "Will now stop further
processing if an exception or failure occurred during processing of an
org.apache.camel.Exchange and the caused exception will be thrown. Will also
stop if processing the exchange failed [...]
+ "timeout": { "index": 10, "kind": "attribute", "displayName": "Timeout",
"label": "advanced", "required": false, "type": "duration", "javaType":
"java.lang.String", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": "0", "description": "Sets a total timeout specified in millis,
when using parallel processing. If the Splitter hasn't been able to split and
process all the sub messages within the given timeframe, then the timeout
triggers and the Splitter breaks o [...]
+ "executorService": { "index": 11, "kind": "attribute", "displayName":
"Executor Service", "label": "advanced", "required": false, "type": "object",
"javaType": "java.util.concurrent.ExecutorService", "deprecated": false,
"autowired": false, "secret": false, "description": "To use a custom Thread
Pool to be used for parallel processing. Notice if you set this option, then
parallel processing is automatically implied, and you do not have to enable
that option as well." },
+ "onPrepare": { "index": 12, "kind": "attribute", "displayName": "On
Prepare", "label": "advanced", "required": false, "type": "object", "javaType":
"org.apache.camel.Processor", "deprecated": false, "autowired": false,
"secret": false, "description": "Uses the Processor when preparing the
org.apache.camel.Exchange to be sent. This can be used to deep-clone messages
that should be sent, or any custom logic needed before the exchange is sent." },
+ "shareUnitOfWork": { "index": 13, "kind": "attribute", "displayName":
"Share Unit Of Work", "label": "advanced", "required": false, "type":
"boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "description": "Shares the
org.apache.camel.spi.UnitOfWork with the parent and each of the sub messages.
Splitter will by default not share unit of work between the parent exchange and
each split exchange. This means each s [...]
+ "outputs": { "index": 14, "kind": "element", "displayName": "Outputs",
"required": true, "type": "array", "javaType":
"java.util.List<org.apache.camel.model.ProcessorDefinition<java.lang.Object>>",
"oneOf": [ "aggregate", "bean", "choice", "circuitBreaker", "claimCheck",
"convertBodyTo", "delay", "doCatch", "doFinally", "doTry", "dynamicRouter",
"enrich", "filter", "idempotentConsumer", "intercept", "interceptFrom",
"interceptSendToEndpoint", "kamelet", "loadBalance", "log", "loop", [...]
+ "disabled": { "index": 15, "kind": "attribute", "displayName": "Disabled",
"label": "advanced", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "Whether to disable this EIP from the
route during build time. Once an EIP has been disabled then it cannot be
enabled later at runtime." },
+ "id": { "index": 16, "kind": "attribute", "displayName": "Id", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Sets the id of this node"
},
+ "description": { "index": 17, "kind": "element", "displayName":
"Description", "required": false, "type": "object", "javaType":
"org.apache.camel.model.DescriptionDefinition", "deprecated": false,
"autowired": false, "secret": false, "description": "Sets the description of
this node" }
}
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/MulticastDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/MulticastDefinition.java
index 94c452608e6..e62541dc0f6 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/MulticastDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/MulticastDefinition.java
@@ -65,6 +65,9 @@ public class MulticastDefinition extends
OutputDefinition<MulticastDefinition>
private String parallelProcessing;
@XmlAttribute
@Metadata(javaType = "java.lang.Boolean")
+ private String synchronous;
+ @XmlAttribute
+ @Metadata(javaType = "java.lang.Boolean")
private String streaming;
@XmlAttribute
@Metadata(label = "advanced", javaType = "java.lang.Boolean")
@@ -176,6 +179,10 @@ public class MulticastDefinition extends
OutputDefinition<MulticastDefinition>
* until all messages has been fully processed, before it continues. Its
only the sending and processing the replies
* from the multicasts which happens concurrently.
*
+ * When parallel processing is enabled, then the Camel routing engin will
continue processing using last used thread
+ * from the parallel thread pool. However, if you want to use the original
thread that called the multicast, then
+ * make sure to enable the synchronous option as well.
+ *
* @return the builder
*/
public MulticastDefinition parallelProcessing() {
@@ -188,6 +195,26 @@ public class MulticastDefinition extends
OutputDefinition<MulticastDefinition>
* until all messages has been fully processed, before it continues. Its
only the sending and processing the replies
* from the multicasts which happens concurrently.
*
+ * When parallel processing is enabled, then the Camel routing engin will
continue processing using last used thread
+ * from the parallel thread pool. However, if you want to use the original
thread that called the multicast, then
+ * make sure to enable the synchronous option as well.
+ *
+ * @return the builder
+ */
+ public MulticastDefinition parallelProcessing(String parallelProcessing) {
+ setParallelProcessing(parallelProcessing);
+ return this;
+ }
+
+ /**
+ * If enabled then sending messages to the multicasts occurs concurrently.
Note the caller thread will still wait
+ * until all messages has been fully processed, before it continues. Its
only the sending and processing the replies
+ * from the multicasts which happens concurrently.
+ *
+ * When parallel processing is enabled, then the Camel routing engin will
continue processing using last used thread
+ * from the parallel thread pool. However, if you want to use the original
thread that called the multicast, then
+ * make sure to enable the synchronous option as well.
+ *
* @return the builder
*/
public MulticastDefinition parallelProcessing(boolean parallelProcessing) {
@@ -195,6 +222,37 @@ public class MulticastDefinition extends
OutputDefinition<MulticastDefinition>
return this;
}
+ /**
+ * Sets whether synchronous processing should be strictly used. When
enabled then the same thread is used to
+ * continue routing after the multicast is complete, even if parallel
processing is enabled.
+ *
+ * @return the builder
+ */
+ public MulticastDefinition synchronous() {
+ return synchronous(true);
+ }
+
+ /**
+ * Sets whether synchronous processing should be strictly used. When
enabled then the same thread is used to
+ * continue routing after the multicast is complete, even if parallel
processing is enabled.
+ *
+ * @return the builder
+ */
+ public MulticastDefinition synchronous(boolean synchronous) {
+ return synchronous(Boolean.toString(synchronous));
+ }
+
+ /**
+ * Sets whether synchronous processing should be strictly used. When
enabled then the same thread is used to
+ * continue routing after the multicast is complete, even if parallel
processing is enabled.
+ *
+ * @return the builder
+ */
+ public MulticastDefinition synchronous(String synchronous) {
+ setSynchronous(synchronous);
+ return this;
+ }
+
/**
* If enabled then the aggregate method on AggregationStrategy can be
called concurrently. Notice that this would
* require the implementation of AggregationStrategy to be implemented as
thread-safe. By default this is false
@@ -208,6 +266,32 @@ public class MulticastDefinition extends
OutputDefinition<MulticastDefinition>
return this;
}
+ /**
+ * If enabled then the aggregate method on AggregationStrategy can be
called concurrently. Notice that this would
+ * require the implementation of AggregationStrategy to be implemented as
thread-safe. By default this is false
+ * meaning that Camel synchronizes the call to the aggregate method.
Though in some use-cases this can be used to
+ * archive higher performance when the AggregationStrategy is implemented
as thread-safe.
+ *
+ * @return the builder
+ */
+ public MulticastDefinition parallelAggregate(boolean parallelAggregate) {
+ setParallelAggregate(Boolean.toString(parallelAggregate));
+ return this;
+ }
+
+ /**
+ * If enabled then the aggregate method on AggregationStrategy can be
called concurrently. Notice that this would
+ * require the implementation of AggregationStrategy to be implemented as
thread-safe. By default this is false
+ * meaning that Camel synchronizes the call to the aggregate method.
Though in some use-cases this can be used to
+ * archive higher performance when the AggregationStrategy is implemented
as thread-safe.
+ *
+ * @return the builder
+ */
+ public MulticastDefinition parallelAggregate(String parallelAggregate) {
+ setParallelAggregate(parallelAggregate);
+ return this;
+ }
+
/**
* If enabled then Camel will process replies out-of-order, eg in the
order they come back. If disabled, Camel will
* process replies in the same order as defined by the multicast.
@@ -373,6 +457,14 @@ public class MulticastDefinition extends
OutputDefinition<MulticastDefinition>
this.parallelProcessing = parallelProcessing;
}
+ public String getSynchronous() {
+ return synchronous;
+ }
+
+ public void setSynchronous(String synchronous) {
+ this.synchronous = synchronous;
+ }
+
public String getStreaming() {
return streaming;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/RecipientListDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/RecipientListDefinition.java
index d9c58f2378f..59544cfddd4 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/RecipientListDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/RecipientListDefinition.java
@@ -66,6 +66,9 @@ public class RecipientListDefinition<Type extends
ProcessorDefinition<Type>> ext
@Metadata(javaType = "java.lang.Boolean")
private String parallelProcessing;
@XmlAttribute
+ @Metadata(javaType = "java.lang.Boolean")
+ private String synchronous;
+ @XmlAttribute
@Metadata(javaType = "java.time.Duration", defaultValue = "0")
private String timeout;
@XmlAttribute
@@ -197,6 +200,10 @@ public class RecipientListDefinition<Type extends
ProcessorDefinition<Type>> ext
* until all messages has been fully processed, before it continues. Its
only the sending and processing the replies
* from the recipients which happens concurrently.
*
+ * When parallel processing is enabled, then the Camel routing engin will
continue processing using last used thread
+ * from the parallel thread pool. However, if you want to use the original
thread that called the recipient list,
+ * then make sure to enable the synchronous option as well.
+ *
* @return the builder
*/
public RecipientListDefinition<Type> parallelProcessing() {
@@ -209,13 +216,32 @@ public class RecipientListDefinition<Type extends
ProcessorDefinition<Type>> ext
* until all messages has been fully processed, before it continues. Its
only the sending and processing the replies
* from the recipients which happens concurrently.
*
+ * When parallel processing is enabled, then the Camel routing engin will
continue processing using last used thread
+ * from the parallel thread pool. However, if you want to use the original
thread that called the recipient list,
+ * then make sure to enable the synchronous option as well.
+ *
* @return the builder
*/
- public RecipientListDefinition<Type> parallelProcessing(boolean
parallelProcessing) {
- setParallelProcessing(Boolean.toString(parallelProcessing));
+ public RecipientListDefinition<Type> parallelProcessing(String
parallelProcessing) {
+ setParallelProcessing(parallelProcessing);
return this;
}
+ /**
+ * If enabled then sending messages to the recipients occurs concurrently.
Note the caller thread will still wait
+ * until all messages has been fully processed, before it continues. Its
only the sending and processing the replies
+ * from the recipients which happens concurrently.
+ *
+ * When parallel processing is enabled, then the Camel routing engin will
continue processing using last used thread
+ * from the parallel thread pool. However, if you want to use the original
thread that called the recipient list,
+ * then make sure to enable the synchronous option as well.
+ *
+ * @return the builder
+ */
+ public RecipientListDefinition<Type> parallelProcessing(boolean
parallelProcessing) {
+ return parallelProcessing(Boolean.toString(parallelProcessing));
+ }
+
/**
* If enabled then the aggregate method on AggregationStrategy can be
called concurrently. Notice that this would
* require the implementation of AggregationStrategy to be implemented as
thread-safe. By default this is false
@@ -225,7 +251,63 @@ public class RecipientListDefinition<Type extends
ProcessorDefinition<Type>> ext
* @return the builder
*/
public RecipientListDefinition<Type> parallelAggregate() {
- setParallelAggregate(Boolean.toString(true));
+ return parallelAggregate(Boolean.toString(true));
+ }
+
+ /**
+ * If enabled then the aggregate method on AggregationStrategy can be
called concurrently. Notice that this would
+ * require the implementation of AggregationStrategy to be implemented as
thread-safe. By default this is false
+ * meaning that Camel synchronizes the call to the aggregate method.
Though in some use-cases this can be used to
+ * archive higher performance when the AggregationStrategy is implemented
as thread-safe.
+ *
+ * @return the builder
+ */
+ public RecipientListDefinition<Type> parallelAggregate(boolean
parallelAggregate) {
+ setParallelAggregate(Boolean.toString(parallelAggregate));
+ return this;
+ }
+
+ /**
+ * If enabled then the aggregate method on AggregationStrategy can be
called concurrently. Notice that this would
+ * require the implementation of AggregationStrategy to be implemented as
thread-safe. By default this is false
+ * meaning that Camel synchronizes the call to the aggregate method.
Though in some use-cases this can be used to
+ * archive higher performance when the AggregationStrategy is implemented
as thread-safe.
+ *
+ * @return the builder
+ */
+ public RecipientListDefinition<Type> parallelAggregate(String
parallelAggregate) {
+ setParallelAggregate(parallelAggregate);
+ return this;
+ }
+
+ /**
+ * Sets whether synchronous processing should be strictly used. When
enabled then the same thread is used to
+ * continue routing after the recipient list is complete, even if parallel
processing is enabled.
+ *
+ * @return the builder
+ */
+ public RecipientListDefinition<Type> synchronous() {
+ return synchronous(true);
+ }
+
+ /**
+ * Sets whether synchronous processing should be strictly used. When
enabled then the same thread is used to
+ * continue routing after the recipient list is complete, even if parallel
processing is enabled.
+ *
+ * @return the builder
+ */
+ public RecipientListDefinition<Type> synchronous(boolean synchronous) {
+ return synchronous(Boolean.toString(synchronous));
+ }
+
+ /**
+ * Sets whether synchronous processing should be strictly used. When
enabled then the same thread is used to
+ * continue routing after the recipient list is complete, even if parallel
processing is enabled.
+ *
+ * @return the builder
+ */
+ public RecipientListDefinition<Type> synchronous(String synchronous) {
+ setSynchronous(synchronous);
return this;
}
@@ -430,6 +512,14 @@ public class RecipientListDefinition<Type extends
ProcessorDefinition<Type>> ext
this.parallelProcessing = parallelProcessing;
}
+ public String getSynchronous() {
+ return synchronous;
+ }
+
+ public void setSynchronous(String synchronous) {
+ this.synchronous = synchronous;
+ }
+
public String getIgnoreInvalidEndpoints() {
return ignoreInvalidEndpoints;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/SplitDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/SplitDefinition.java
index f23e3576c48..59b6b9d141d 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/SplitDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/SplitDefinition.java
@@ -65,6 +65,9 @@ public class SplitDefinition extends OutputExpressionNode
implements ExecutorSer
private String parallelProcessing;
@XmlAttribute
@Metadata(javaType = "java.lang.Boolean")
+ private String synchronous;
+ @XmlAttribute
+ @Metadata(javaType = "java.lang.Boolean")
private String streaming;
@XmlAttribute
@Metadata(label = "advanced", javaType = "java.lang.Boolean")
@@ -194,6 +197,10 @@ public class SplitDefinition extends OutputExpressionNode
implements ExecutorSer
* all messages has been fully processed, before it continues. It's only
processing the sub messages from the
* splitter which happens concurrently.
*
+ * When parallel processing is enabled, then the Camel routing engin will
continue processing using last used thread
+ * from the parallel thread pool. However, if you want to use the original
thread that called the splitter, then
+ * make sure to enable the synchronous option as well.
+ *
* @return the builder
*/
public SplitDefinition parallelProcessing() {
@@ -205,6 +212,10 @@ public class SplitDefinition extends OutputExpressionNode
implements ExecutorSer
* all messages has been fully processed, before it continues. It's only
processing the sub messages from the
* splitter which happens concurrently.
*
+ * When parallel processing is enabled, then the Camel routing engin will
continue processing using last used thread
+ * from the parallel thread pool. However, if you want to use the original
thread that called the splitter, then
+ * make sure to enable the synchronous option as well.
+ *
* @return the builder
*/
public SplitDefinition parallelProcessing(boolean parallelProcessing) {
@@ -216,6 +227,10 @@ public class SplitDefinition extends OutputExpressionNode
implements ExecutorSer
* all messages has been fully processed, before it continues. It's only
processing the sub messages from the
* splitter which happens concurrently.
*
+ * When parallel processing is enabled, then the Camel routing engin will
continue processing using last used thread
+ * from the parallel thread pool. However, if you want to use the original
thread that called the splitter, then
+ * make sure to enable the synchronous option as well.
+ *
* @return the builder
*/
public SplitDefinition parallelProcessing(String parallelProcessing) {
@@ -260,6 +275,37 @@ public class SplitDefinition extends OutputExpressionNode
implements ExecutorSer
return this;
}
+ /**
+ * Sets whether synchronous processing should be strictly used. When
enabled then the same thread is used to
+ * continue routing after the split is complete, even if parallel
processing is enabled.
+ *
+ * @return the builder
+ */
+ public SplitDefinition synchronous() {
+ return synchronous(true);
+ }
+
+ /**
+ * Sets whether synchronous processing should be strictly used. When
enabled then the same thread is used to
+ * continue routing after the split is complete, even if parallel
processing is enabled.
+ *
+ * @return the builder
+ */
+ public SplitDefinition synchronous(boolean synchronous) {
+ return synchronous(Boolean.toString(synchronous));
+ }
+
+ /**
+ * Sets whether synchronous processing should be strictly used. When
enabled then the same thread is used to
+ * continue routing after the split is complete, even if parallel
processing is enabled.
+ *
+ * @return the builder
+ */
+ public SplitDefinition synchronous(String synchronous) {
+ setSynchronous(synchronous);
+ return this;
+ }
+
/**
* When in streaming mode, then the splitter splits the original message
on-demand, and each split message is
* processed one by one. This reduces memory usage as the splitter do not
split all the messages first, but then we
@@ -522,6 +568,14 @@ public class SplitDefinition extends OutputExpressionNode
implements ExecutorSer
this.parallelProcessing = parallelProcessing;
}
+ public String getSynchronous() {
+ return synchronous;
+ }
+
+ public void setSynchronous(String synchronous) {
+ this.synchronous = synchronous;
+ }
+
public String getStreaming() {
return streaming;
}
diff --git
a/core/camel-core-processor/src/main/java/org/apache/camel/processor/MulticastProcessor.java
b/core/camel-core-processor/src/main/java/org/apache/camel/processor/MulticastProcessor.java
index 68af442f070..954511a28e8 100644
---
a/core/camel-core-processor/src/main/java/org/apache/camel/processor/MulticastProcessor.java
+++
b/core/camel-core-processor/src/main/java/org/apache/camel/processor/MulticastProcessor.java
@@ -53,6 +53,7 @@ import org.apache.camel.Traceable;
import org.apache.camel.processor.aggregate.ShareUnitOfWorkAggregationStrategy;
import org.apache.camel.processor.aggregate.UseOriginalAggregationStrategy;
import org.apache.camel.processor.errorhandler.ErrorHandlerSupport;
+import org.apache.camel.spi.AsyncProcessorAwaitManager;
import org.apache.camel.spi.ErrorHandlerAware;
import org.apache.camel.spi.IdAware;
import org.apache.camel.spi.InternalProcessorFactory;
@@ -148,6 +149,7 @@ public class MulticastProcessor extends
AsyncProcessorSupport
protected final Processor onPrepare;
protected final ProcessorExchangeFactory processorExchangeFactory;
+ private final AsyncProcessorAwaitManager awaitManager;
private final CamelContext camelContext;
private final InternalProcessorFactory internalProcessorFactory;
private final Route route;
@@ -158,6 +160,7 @@ public class MulticastProcessor extends
AsyncProcessorSupport
private Collection<Processor> processors;
private final AggregationStrategy aggregationStrategy;
private final boolean parallelProcessing;
+ private boolean synchronous;
private final boolean streaming;
private final boolean parallelAggregate;
private final boolean stopOnException;
@@ -188,6 +191,7 @@ public class MulticastProcessor extends
AsyncProcessorSupport
notNull(camelContext, "camelContext");
this.camelContext = camelContext;
this.internalProcessorFactory =
PluginHelper.getInternalProcessorFactory(camelContext);
+ this.awaitManager =
PluginHelper.getAsyncProcessorAwaitManager(camelContext);
this.route = route;
this.reactiveExecutor =
camelContext.getCamelContextExtension().getReactiveExecutor();
this.processors = processors;
@@ -250,6 +254,14 @@ public class MulticastProcessor extends
AsyncProcessorSupport
return camelContext;
}
+ public boolean isSynchronous() {
+ return synchronous;
+ }
+
+ public void setSynchronous(boolean synchronous) {
+ this.synchronous = synchronous;
+ }
+
@Override
protected void doBuild() throws Exception {
if (processorExchangeFactory != null) {
@@ -288,6 +300,28 @@ public class MulticastProcessor extends
AsyncProcessorSupport
@Override
public boolean process(Exchange exchange, AsyncCallback callback) {
+ if (synchronous) {
+ try {
+ // force synchronous processing using await manager
+ awaitManager.process(new AsyncProcessorSupport() {
+ @Override
+ public boolean process(Exchange exchange, AsyncCallback
callback) {
+ // must invoke doProcess directly here to avoid
calling recursive
+ return doProcess(exchange, callback);
+ }
+ }, exchange);
+ } catch (Throwable e) {
+ exchange.setException(e);
+ } finally {
+ callback.done(true);
+ }
+ return true;
+ } else {
+ return doProcess(exchange, callback);
+ }
+ }
+
+ protected boolean doProcess(Exchange exchange, AsyncCallback callback) {
Iterable<ProcessorExchangePair> pairs;
int size = 0;
try {
diff --git
a/core/camel-core-processor/src/main/java/org/apache/camel/processor/RecipientList.java
b/core/camel-core-processor/src/main/java/org/apache/camel/processor/RecipientList.java
index bed81851648..dbccb6cacf7 100644
---
a/core/camel-core-processor/src/main/java/org/apache/camel/processor/RecipientList.java
+++
b/core/camel-core-processor/src/main/java/org/apache/camel/processor/RecipientList.java
@@ -58,6 +58,7 @@ public class RecipientList extends AsyncProcessorSupport
implements IdAware, Rou
private final Expression expression;
private final String delimiter;
private boolean parallelProcessing;
+ private boolean synchronous;
private boolean parallelAggregate;
private boolean stopOnException;
private boolean ignoreInvalidEndpoints;
@@ -205,6 +206,7 @@ public class RecipientList extends AsyncProcessorSupport
implements IdAware, Rou
camelContext, null, expression, delimiter, producerCache,
getAggregationStrategy(),
isParallelProcessing(), getExecutorService(),
isShutdownExecutorService(),
isStreaming(), isStopOnException(), getTimeout(),
getOnPrepare(), isShareUnitOfWork(), isParallelAggregate());
+ recipientListProcessor.setSynchronous(synchronous);
recipientListProcessor.setErrorHandler(errorHandler);
recipientListProcessor.setAggregateExecutorService(aggregateExecutorService);
recipientListProcessor.setIgnoreInvalidEndpoints(isIgnoreInvalidEndpoints());
@@ -264,6 +266,14 @@ public class RecipientList extends AsyncProcessorSupport
implements IdAware, Rou
this.parallelProcessing = parallelProcessing;
}
+ public boolean isSynchronous() {
+ return synchronous;
+ }
+
+ public void setSynchronous(boolean synchronous) {
+ this.synchronous = synchronous;
+ }
+
public boolean isParallelAggregate() {
return parallelAggregate;
}
diff --git
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/MulticastReifier.java
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/MulticastReifier.java
index 103eb79cc14..86d2de72f2a 100644
---
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/MulticastReifier.java
+++
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/MulticastReifier.java
@@ -58,6 +58,7 @@ public class MulticastReifier extends
ProcessorReifier<MulticastDefinition> {
final AggregationStrategy strategy = createAggregationStrategy();
boolean isParallelProcessing =
parseBoolean(definition.getParallelProcessing(), false);
+ boolean isSynchronous = parseBoolean(definition.getSynchronous(),
false);
boolean isShareUnitOfWork =
parseBoolean(definition.getShareUnitOfWork(), false);
boolean isStreaming = parseBoolean(definition.getStreaming(), false);
boolean isStopOnException =
parseBoolean(definition.getStopOnException(), false);
@@ -75,9 +76,11 @@ public class MulticastReifier extends
ProcessorReifier<MulticastDefinition> {
prepare = mandatoryLookup(definition.getOnPrepare(),
Processor.class);
}
- return new MulticastProcessor(
+ MulticastProcessor answer = new MulticastProcessor(
camelContext, route, list, strategy, isParallelProcessing,
threadPool, shutdownThreadPool, isStreaming,
isStopOnException, timeout, prepare, isShareUnitOfWork,
isParallelAggregate);
+ answer.setSynchronous(isSynchronous);
+ return answer;
}
private AggregationStrategy createAggregationStrategy() {
diff --git
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/RecipientListReifier.java
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/RecipientListReifier.java
index bfc3ad6f61f..5ced2c43173 100644
---
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/RecipientListReifier.java
+++
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/RecipientListReifier.java
@@ -46,6 +46,7 @@ public class RecipientListReifier extends
ProcessorReifier<RecipientListDefiniti
final Expression expression =
createExpression(definition.getExpression());
boolean isParallelProcessing =
parseBoolean(definition.getParallelProcessing(), false);
+ boolean isSynchronous = parseBoolean(definition.getSynchronous(),
false);
boolean isStreaming = parseBoolean(definition.getStreaming(), false);
boolean isParallelAggregate =
parseBoolean(definition.getParallelAggregate(), false);
boolean isShareUnitOfWork =
parseBoolean(definition.getShareUnitOfWork(), false);
@@ -62,6 +63,7 @@ public class RecipientListReifier extends
ProcessorReifier<RecipientListDefiniti
answer.setAggregationStrategy(createAggregationStrategy());
answer.setParallelProcessing(isParallelProcessing);
answer.setParallelAggregate(isParallelAggregate);
+ answer.setSynchronous(isSynchronous);
answer.setStreaming(isStreaming);
answer.setShareUnitOfWork(isShareUnitOfWork);
answer.setStopOnException(isStopOnException);
diff --git
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/SplitReifier.java
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/SplitReifier.java
index 471beee3b01..55fc66c1e4b 100644
---
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/SplitReifier.java
+++
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/SplitReifier.java
@@ -44,6 +44,7 @@ public class SplitReifier extends
ExpressionReifier<SplitDefinition> {
final AggregationStrategy strategy = createAggregationStrategy();
boolean isParallelProcessing =
parseBoolean(definition.getParallelProcessing(), false);
+ boolean isSynchronous = parseBoolean(definition.getSynchronous(),
false);
boolean isStreaming = parseBoolean(definition.getStreaming(), false);
boolean isShareUnitOfWork =
parseBoolean(definition.getShareUnitOfWork(), false);
boolean isParallelAggregate =
parseBoolean(definition.getParallelAggregate(), false);
@@ -75,6 +76,7 @@ public class SplitReifier extends
ExpressionReifier<SplitDefinition> {
threadPool, shutdownThreadPool, isStreaming,
isStopOnException, timeout, prepare,
isShareUnitOfWork, isParallelAggregate);
}
+ answer.setSynchronous(isSynchronous);
return answer;
}
diff --git
a/core/camel-core/src/test/java/org/apache/camel/processor/MulticastParallelSynchronousTest.java
b/core/camel-core/src/test/java/org/apache/camel/processor/MulticastParallelSynchronousTest.java
new file mode 100644
index 00000000000..0b90f83f8e1
--- /dev/null
+++
b/core/camel-core/src/test/java/org/apache/camel/processor/MulticastParallelSynchronousTest.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.processor;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+public class MulticastParallelSynchronousTest extends ContextTestSupport {
+
+ private String before;
+ private String middle;
+ private String middle2;
+ private String after;
+
+ @Test
+ public void testSynchronous() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:end");
+ mock.expectedMessageCount(1);
+
+ template.sendBody("direct:a", "A");
+
+ assertMockEndpointsSatisfied();
+
+ Assertions.assertNotEquals(before, middle);
+ Assertions.assertNotEquals(before, middle2);
+ Assertions.assertNotEquals(after, middle);
+ Assertions.assertNotEquals(after, middle2);
+ Assertions.assertEquals(before, after);
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:a")
+ .process(e -> {
+ before = Thread.currentThread().getName();
+ })
+ .multicast().parallelProcessing().synchronous()
+ .process(e -> {
+ middle = Thread.currentThread().getName();
+ })
+ .process(e -> {
+ middle2 = Thread.currentThread().getName();
+ })
+ .end()
+ .process(e -> {
+ after = Thread.currentThread().getName();
+ })
+ .to("mock:end");
+
+ }
+ };
+ }
+
+}
diff --git
a/core/camel-core/src/test/java/org/apache/camel/processor/RecipientListParallelSynchronousTest.java
b/core/camel-core/src/test/java/org/apache/camel/processor/RecipientListParallelSynchronousTest.java
new file mode 100644
index 00000000000..7ab24dbbced
--- /dev/null
+++
b/core/camel-core/src/test/java/org/apache/camel/processor/RecipientListParallelSynchronousTest.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.processor;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+public class RecipientListParallelSynchronousTest extends ContextTestSupport {
+
+ private String before;
+ private String middle;
+ private String middle2;
+ private String after;
+
+ @Test
+ public void testSynchronous() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:end");
+ mock.expectedMessageCount(1);
+
+ template.sendBodyAndHeader("direct:a", "A", "whereTo",
"direct:b,direct:c");
+
+ assertMockEndpointsSatisfied();
+
+ Assertions.assertNotEquals(before, middle);
+ Assertions.assertNotEquals(before, middle2);
+ Assertions.assertNotEquals(after, middle);
+ Assertions.assertNotEquals(after, middle2);
+ Assertions.assertEquals(before, after);
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:a")
+ .process(e -> {
+ before = Thread.currentThread().getName();
+ })
+
.recipientList(header("whereTo")).parallelProcessing().synchronous()
+ .process(e -> {
+ after = Thread.currentThread().getName();
+ })
+ .to("mock:end");
+
+ from("direct:b")
+ .process(e -> {
+ middle = Thread.currentThread().getName();
+ });
+
+ from("direct:c")
+ .process(e -> {
+ middle2 = Thread.currentThread().getName();
+ });
+
+ }
+ };
+ }
+
+}
diff --git
a/core/camel-core/src/test/java/org/apache/camel/processor/SplitParallelSynchronousTest.java
b/core/camel-core/src/test/java/org/apache/camel/processor/SplitParallelSynchronousTest.java
new file mode 100644
index 00000000000..4bd5a300ea3
--- /dev/null
+++
b/core/camel-core/src/test/java/org/apache/camel/processor/SplitParallelSynchronousTest.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.processor;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+public class SplitParallelSynchronousTest extends ContextTestSupport {
+
+ private String before;
+ private String middle;
+ private String after;
+
+ @Test
+ public void testSynchronous() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:end");
+ mock.expectedMessageCount(1);
+
+ template.sendBody("direct:a", "A,B,C,D,E");
+
+ assertMockEndpointsSatisfied();
+
+ Assertions.assertNotEquals(before, middle);
+ Assertions.assertNotEquals(after, middle);
+ Assertions.assertEquals(before, after);
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:a")
+ .process(e -> {
+ before = Thread.currentThread().getName();
+ })
+
.split(body().tokenize(",")).parallelProcessing().synchronous()
+ .process(e -> {
+ middle = Thread.currentThread().getName();
+ })
+ .end()
+ .process(e -> {
+ after = Thread.currentThread().getName();
+ })
+ .to("mock:end");
+
+ }
+ };
+ }
+
+}
diff --git
a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java
b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java
index e4f5932df7f..3f1bca0a6cd 100644
---
a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java
+++
b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java
@@ -599,6 +599,7 @@ public class ModelParser extends BaseParser {
case "shareUnitOfWork": def.setShareUnitOfWork(val); break;
case "stopOnException": def.setStopOnException(val); break;
case "streaming": def.setStreaming(val); break;
+ case "synchronous": def.setSynchronous(val); break;
case "timeout": def.setTimeout(val); break;
default: return
processorDefinitionAttributeHandler().accept(def, key, val);
}
@@ -802,6 +803,7 @@ public class ModelParser extends BaseParser {
case "shareUnitOfWork": def.setShareUnitOfWork(val); break;
case "stopOnException": def.setStopOnException(val); break;
case "streaming": def.setStreaming(val); break;
+ case "synchronous": def.setSynchronous(val); break;
case "timeout": def.setTimeout(val); break;
default: return
processorDefinitionAttributeHandler().accept(def, key, val);
}
@@ -1325,6 +1327,7 @@ public class ModelParser extends BaseParser {
case "shareUnitOfWork": def.setShareUnitOfWork(val); break;
case "stopOnException": def.setStopOnException(val); break;
case "streaming": def.setStreaming(val); break;
+ case "synchronous": def.setSynchronous(val); break;
case "timeout": def.setTimeout(val); break;
default: return
processorDefinitionAttributeHandler().accept(def, key, val);
}
diff --git
a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java
b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java
index 530682f71e0..5adeebfbe01 100644
---
a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java
+++
b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java
@@ -1540,6 +1540,7 @@ public class ModelWriter extends BaseWriter {
doWriteAttribute("aggregationStrategy", def.getAggregationStrategy());
doWriteAttribute("onPrepare", def.getOnPrepare());
doWriteAttribute("executorService", def.getExecutorService());
+ doWriteAttribute("synchronous", def.getSynchronous());
doWriteAttribute("aggregationStrategyMethodName",
def.getAggregationStrategyMethodName());
doWriteAttribute("timeout", def.getTimeout());
doWriteAttribute("streaming", def.getStreaming());
@@ -1778,6 +1779,7 @@ public class ModelWriter extends BaseWriter {
doWriteAttribute("aggregationStrategy", def.getAggregationStrategy());
doWriteAttribute("onPrepare", def.getOnPrepare());
doWriteAttribute("executorService", def.getExecutorService());
+ doWriteAttribute("synchronous", def.getSynchronous());
doWriteAttribute("aggregationStrategyMethodName",
def.getAggregationStrategyMethodName());
doWriteAttribute("timeout", def.getTimeout());
doWriteAttribute("ignoreInvalidEndpoints",
def.getIgnoreInvalidEndpoints());
@@ -2209,6 +2211,7 @@ public class ModelWriter extends BaseWriter {
doWriteAttribute("aggregationStrategy", def.getAggregationStrategy());
doWriteAttribute("onPrepare", def.getOnPrepare());
doWriteAttribute("executorService", def.getExecutorService());
+ doWriteAttribute("synchronous", def.getSynchronous());
doWriteAttribute("aggregationStrategyMethodName",
def.getAggregationStrategyMethodName());
doWriteAttribute("timeout", def.getTimeout());
doWriteAttribute("streaming", def.getStreaming());
diff --git
a/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java
b/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java
index 5ce1bd53bdc..1c93ab15420 100644
---
a/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java
+++
b/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java
@@ -1540,6 +1540,7 @@ public class ModelWriter extends BaseWriter {
doWriteAttribute("aggregationStrategy", def.getAggregationStrategy());
doWriteAttribute("onPrepare", def.getOnPrepare());
doWriteAttribute("executorService", def.getExecutorService());
+ doWriteAttribute("synchronous", def.getSynchronous());
doWriteAttribute("aggregationStrategyMethodName",
def.getAggregationStrategyMethodName());
doWriteAttribute("timeout", def.getTimeout());
doWriteAttribute("streaming", def.getStreaming());
@@ -1778,6 +1779,7 @@ public class ModelWriter extends BaseWriter {
doWriteAttribute("aggregationStrategy", def.getAggregationStrategy());
doWriteAttribute("onPrepare", def.getOnPrepare());
doWriteAttribute("executorService", def.getExecutorService());
+ doWriteAttribute("synchronous", def.getSynchronous());
doWriteAttribute("aggregationStrategyMethodName",
def.getAggregationStrategyMethodName());
doWriteAttribute("timeout", def.getTimeout());
doWriteAttribute("ignoreInvalidEndpoints",
def.getIgnoreInvalidEndpoints());
@@ -2209,6 +2211,7 @@ public class ModelWriter extends BaseWriter {
doWriteAttribute("aggregationStrategy", def.getAggregationStrategy());
doWriteAttribute("onPrepare", def.getOnPrepare());
doWriteAttribute("executorService", def.getExecutorService());
+ doWriteAttribute("synchronous", def.getSynchronous());
doWriteAttribute("aggregationStrategyMethodName",
def.getAggregationStrategyMethodName());
doWriteAttribute("timeout", def.getTimeout());
doWriteAttribute("streaming", def.getStreaming());
diff --git
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
index 28aaf1dff1b..0d1b82fa624 100644
---
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
+++
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
@@ -8825,6 +8825,7 @@ public final class ModelDeserializers extends
YamlDeserializerSupport {
@YamlProperty(name = "steps", type =
"array:org.apache.camel.model.ProcessorDefinition"),
@YamlProperty(name = "stop-on-exception", type =
"boolean"),
@YamlProperty(name = "streaming", type = "boolean"),
+ @YamlProperty(name = "synchronous", type = "boolean"),
@YamlProperty(name = "timeout", type = "string")
}
)
@@ -8902,6 +8903,11 @@ public final class ModelDeserializers extends
YamlDeserializerSupport {
target.setStreaming(val);
break;
}
+ case "synchronous": {
+ String val = asText(node);
+ target.setSynchronous(val);
+ break;
+ }
case "timeout": {
String val = asText(node);
target.setTimeout(val);
@@ -11361,6 +11367,7 @@ public final class ModelDeserializers extends
YamlDeserializerSupport {
@YamlProperty(name = "share-unit-of-work", type =
"boolean"),
@YamlProperty(name = "stop-on-exception", type =
"boolean"),
@YamlProperty(name = "streaming", type = "boolean"),
+ @YamlProperty(name = "synchronous", type = "boolean"),
@YamlProperty(name = "timeout", type = "string")
}
)
@@ -11458,6 +11465,11 @@ public final class ModelDeserializers extends
YamlDeserializerSupport {
target.setStreaming(val);
break;
}
+ case "synchronous": {
+ String val = asText(node);
+ target.setSynchronous(val);
+ break;
+ }
case "timeout": {
String val = asText(node);
target.setTimeout(val);
@@ -15376,6 +15388,7 @@ public final class ModelDeserializers extends
YamlDeserializerSupport {
@YamlProperty(name = "steps", type =
"array:org.apache.camel.model.ProcessorDefinition"),
@YamlProperty(name = "stop-on-exception", type =
"boolean"),
@YamlProperty(name = "streaming", type = "boolean"),
+ @YamlProperty(name = "synchronous", type = "boolean"),
@YamlProperty(name = "timeout", type = "string")
}
)
@@ -15463,6 +15476,11 @@ public final class ModelDeserializers extends
YamlDeserializerSupport {
target.setStreaming(val);
break;
}
+ case "synchronous": {
+ String val = asText(node);
+ target.setSynchronous(val);
+ break;
+ }
case "timeout": {
String val = asText(node);
target.setTimeout(val);
diff --git
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camel-yaml-dsl.json
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camel-yaml-dsl.json
index 3d3b6d14411..29d73d24ff4 100644
---
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camel-yaml-dsl.json
+++
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camel-yaml-dsl.json
@@ -1549,6 +1549,9 @@
"streaming" : {
"type" : "boolean"
},
+ "synchronous" : {
+ "type" : "boolean"
+ },
"timeout" : {
"type" : "string"
}
@@ -2014,6 +2017,9 @@
"streaming" : {
"type" : "boolean"
},
+ "synchronous" : {
+ "type" : "boolean"
+ },
"timeout" : {
"type" : "string"
}
@@ -2942,6 +2948,9 @@
"streaming" : {
"type" : "boolean"
},
+ "synchronous" : {
+ "type" : "boolean"
+ },
"timeout" : {
"type" : "string"
}
diff --git
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
index 5a94fa93312..1c4725fae54 100644
---
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
+++
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
@@ -1459,6 +1459,9 @@
"streaming" : {
"type" : "boolean"
},
+ "synchronous" : {
+ "type" : "boolean"
+ },
"timeout" : {
"type" : "string"
}
@@ -1924,6 +1927,9 @@
"streaming" : {
"type" : "boolean"
},
+ "synchronous" : {
+ "type" : "boolean"
+ },
"timeout" : {
"type" : "string"
}
@@ -2852,6 +2858,9 @@
"streaming" : {
"type" : "boolean"
},
+ "synchronous" : {
+ "type" : "boolean"
+ },
"timeout" : {
"type" : "string"
}