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
commit a969c9a2065e11ef2444441bbbadb0aad76606ad Author: Claus Ibsen <[email protected]> AuthorDate: Sat Oct 24 19:57:03 2026 +0200 CAMEL-24961: Catalog body types for the seven ignite components, ehcache, jcache and state-store (#28397) Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]> Signed-off-by: Claus Ibsen <[email protected]> --- .../apache/camel/catalog/components/ehcache.json | 5 +++ .../camel/catalog/components/ignite-cache.json | 5 +++ .../camel/catalog/components/ignite-compute.json | 4 ++ .../camel/catalog/components/ignite-events.json | 3 ++ .../camel/catalog/components/ignite-idgen.json | 4 ++ .../camel/catalog/components/ignite-messaging.json | 5 +++ .../camel/catalog/components/ignite-queue.json | 4 ++ .../camel/catalog/components/ignite-set.json | 4 ++ .../apache/camel/catalog/components/jcache.json | 5 +++ .../camel/catalog/components/state-store.json | 4 ++ .../camel/catalog/docs/ignite-cache-component.adoc | 3 +- .../apache/camel/component/ehcache/ehcache.json | 5 +++ .../camel/component/ehcache/EhcacheEndpoint.java | 32 +++++++++++++++ .../camel/component/ignite/cache/ignite-cache.json | 5 +++ .../component/ignite/compute/ignite-compute.json | 4 ++ .../component/ignite/events/ignite-events.json | 3 ++ .../camel/component/ignite/idgen/ignite-idgen.json | 4 ++ .../ignite/messaging/ignite-messaging.json | 5 +++ .../camel/component/ignite/queue/ignite-queue.json | 4 ++ .../camel/component/ignite/set/ignite-set.json | 4 ++ .../src/main/docs/ignite-cache-component.adoc | 3 +- .../ignite/cache/IgniteCacheEndpoint.java | 45 ++++++++++++++++++++++ .../ignite/compute/IgniteComputeEndpoint.java | 22 +++++++++++ .../ignite/events/IgniteEventsEndpoint.java | 7 ++++ .../ignite/idgen/IgniteIdGenEndpoint.java | 15 ++++++++ .../ignite/messaging/IgniteMessagingEndpoint.java | 16 ++++++++ .../ignite/queue/IgniteQueueEndpoint.java | 38 ++++++++++++++++++ .../component/ignite/set/IgniteSetEndpoint.java | 31 +++++++++++++++ .../org/apache/camel/component/jcache/jcache.json | 5 +++ .../camel/component/jcache/JCacheEndpoint.java | 36 +++++++++++++++++ .../camel/component/statestore/state-store.json | 4 ++ .../component/statestore/StateStoreEndpoint.java | 22 +++++++++++ 32 files changed, 354 insertions(+), 2 deletions(-) diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ehcache.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ehcache.json index 57128105f2aa..64de7a9d7660 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ehcache.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ehcache.json @@ -51,6 +51,11 @@ "CamelEhcacheOldValue": { "index": 6, "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Object", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The old value associated to a key for actions like PUT_IF_ABSENT or the Object used for comparison for actions like REPLACE", "constantName": "org.apache.camel.component.ehcache.EhcacheConstants#OLD_VALUE" }, "CamelEhcacheEventType": { "index": 7, "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "EventType", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The type of event received", "constantName": "org.apache.camel.component.ehcache.EhcacheConstants#EVENT_TYPE" } }, + "bodyTypes": { + "consumerOut": { "carriers": [ "unknown" ], "description": "The new value of the entry, as it was put, with the key in the CamelEhcacheKey header, the event in CamelEhcacheEventType and the previous value in CamelEhcacheOldValue. A REMOVED, EXPIRED or EVICTED event has no body" }, + "producerIn": { "carriers": [ "any" ], "description": "The value to store for PUT, PUT_IF_ABSENT and REPLACE, converted to the valueType when set, and a Map of the entries for PUT_ALL, unless the CamelEhcacheValue header gives it. The value is stored as it is: a stream is read once, so convert it to text or bytes first. The other actions do not use the body" }, + "producerOut": { "carriers": [ "unknown" ], "byOption": [ { "option": "action", "value": "GET_ALL", "carriers": [ "map" ], "javaType": "java.util.Map" }, { "option": "action", "value": "PUT", "carriers": [ "unchanged" ] }, { "option": "action", "value": "PUT_ALL", "carriers": [ "unchanged" ] }, { "option": "action", "value": "PUT_IF_ABSENT", "carriers": [ "unchanged" ] }, { "option": "action", "value": "REPLACE", "carriers": [ "unchanged" ] }, { "option": "action", "value": "REMOVE", [...] + }, "properties": { "cacheName": { "index": 0, "kind": "path", "displayName": "Cache Name", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "the cache name" }, "cacheManager": { "index": 1, "kind": "parameter", "displayName": "Cache Manager", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.ehcache.CacheManager", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ehcache.EhcacheConfiguration", "configurationField": "configuration", "description": "The cache manager" }, diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ignite-cache.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ignite-cache.json index 6185c4786199..348cb48c6c01 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ignite-cache.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ignite-cache.json @@ -40,6 +40,11 @@ "CamelIgniteCacheName": { "index": 5, "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "This header carries the cache name for which a continuous query event was received (consumer). It does not allow you to dynamically change the cache against which a producer operation is performed. Use EIPs for that (e.g. recipient l [...] "CamelIgniteCacheOldValue": { "index": 6, "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Object", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(producer) The old cache value to be replaced when invoking the REPLACE operation. (consumer) This header carries the old cache value when passed in the incoming cache event.", "constantName": "org.apache.camel.component.ignite.IgniteConst [...] }, + "bodyTypes": { + "consumerOut": { "carriers": [ "unknown" ], "byOption": [ { "option": "oneExchangePerUpdate", "value": "false", "carriers": [ "list" ] }, { "option": "fireExistingQueryResults", "value": "true", "carriers": [ "unknown" ] } ], "description": "The new value of the cache entry that changed, with its key in the CamelIgniteCacheKey header, the old value in CamelIgniteCacheOldValue and the event type in CamelIgniteCacheEventType. With oneExchangePerUpdate=false a List of the CacheEntryEven [...] + "producerIn": { "carriers": [ "any" ], "description": "PUT and REPLACE store the body as the value of the key in the CamelIgniteCacheKey header, and a PUT of a Map puts all its entries; no body fails. GET and REMOVE take the key from that header, or else from the body, where a Set is several keys. QUERY needs an Ignite Query in the body or the CamelIgniteCacheQuery header. SIZE, CLEAR and REBALANCE do not use the body. The operation is the operation option or the CamelIgniteCacheOper [...] + "producerOut": { "carriers": [ "unknown" ], "dependsOn": [ "propagateIncomingBodyIfNoReturnValue" ], "byOption": [ { "option": "operation", "value": "PUT", "carriers": [ "unchanged", "null" ] }, { "option": "operation", "value": "REPLACE", "carriers": [ "unchanged" ] }, { "option": "operation", "value": "REMOVE", "carriers": [ "unchanged" ] }, { "option": "operation", "value": "CLEAR", "carriers": [ "unchanged" ] }, { "option": "operation", "value": "REBALANCE", "carriers": [ "unchan [...] + }, "properties": { "cacheName": { "index": 0, "kind": "path", "displayName": "Cache Name", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The cache name." }, "propagateIncomingBodyIfNoReturnValue": { "index": 1, "kind": "parameter", "displayName": "Propagate Incoming Body If No Return Value", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Sets whether to propagate the incoming body if the return type of the underlying Ignite operation is void." }, diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ignite-compute.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ignite-compute.json index eccaa68ab3f7..6e2bedb40a51 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ignite-compute.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ignite-compute.json @@ -37,6 +37,10 @@ "CamelIgniteComputeAffinityCacheName": { "index": 3, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Affinity cache name for the AFFINITY_CALL and AFFINITY_RUN operations.", "constantName": "org.apache.camel.component.ignite.IgniteConstants#IGNITE_COMPUTE_AFFINITY_CACHE_NAME" }, "CamelIgniteComputeAffinityKey": { "index": 4, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Object", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Affinity key for the AFFINITY_CALL and AFFINITY_RUN operations.", "constantName": "org.apache.camel.component.ignite.IgniteConstants#IGNITE_COMPUTE_AFFINITY_KEY" } }, + "bodyTypes": { + "producerIn": { "carriers": [ "pojo", "list" ], "dependsOn": [ "taskName" ], "description": "The job to run on the cluster, by executionType: an IgniteCallable for CALL and AFFINITY_CALL, an IgniteRunnable for RUN and AFFINITY_RUN, a Collection of them for CALL and RUN, an IgniteCallable, IgniteRunnable or IgniteClosure for BROADCAST, an IgniteClosure for APPLY, and a ComputeTask or its Class for EXECUTE. Its parameters are in the CamelIgniteComputeParameters header. With taskName, E [...] + "producerOut": { "carriers": [ "unknown" ], "byOption": [ { "option": "executionType", "value": "RUN", "carriers": [ "null" ] }, { "option": "executionType", "value": "AFFINITY_RUN", "carriers": [ "null" ] }, { "option": "executionType", "value": "BROADCAST", "carriers": [ "list", "null" ] } ], "description": "The result of the job. A Collection of callables, a broadcast and an APPLY of a Collection of parameters give a Collection of the results, unless an IgniteReducer in the CamelI [...] + }, "properties": { "endpointId": { "index": 0, "kind": "path", "displayName": "Endpoint Id", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The endpoint ID (not used)." }, "clusterGroupExpression": { "index": 1, "kind": "parameter", "displayName": "Cluster Group Expression", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.component.ignite.ClusterGroupExpression", "deprecated": false, "autowired": false, "secret": false, "description": "An expression that returns the Cluster Group for the IgniteCompute instance." }, diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ignite-events.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ignite-events.json index 74021fe55ba3..65d11dd6b9fd 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ignite-events.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ignite-events.json @@ -30,6 +30,9 @@ "igniteConfiguration": { "index": 3, "kind": "property", "displayName": "Ignite Configuration", "group": "consumer", "label": "", "required": false, "type": "object", "javaType": "org.apache.ignite.configuration.IgniteConfiguration", "deprecated": false, "autowired": false, "secret": false, "description": "Allows the user to set a programmatic ignite configuration." }, "autowiredEnabled": { "index": 4, "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching t [...] }, + "bodyTypes": { + "consumerOut": { "carriers": [ "pojo" ], "javaType": "org.apache.ignite.events.Event", "description": "The Ignite Event, such as a CacheEvent or a JobEvent, with its type in type(); no headers are set. Ignite fires only the event types its configuration includes (includeEventTypes)" } + }, "properties": { "endpointId": { "index": 0, "kind": "path", "displayName": "Endpoint Id", "group": "consumer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The endpoint ID (not used)." }, "clusterGroupExpression": { "index": 1, "kind": "parameter", "displayName": "Cluster Group Expression", "group": "consumer", "label": "consumer", "required": false, "type": "object", "javaType": "org.apache.camel.component.ignite.ClusterGroupExpression", "deprecated": false, "autowired": false, "secret": false, "description": "The cluster group expression." }, diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ignite-idgen.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ignite-idgen.json index e3d3388e1a43..432245af793d 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ignite-idgen.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ignite-idgen.json @@ -33,6 +33,10 @@ "headers": { "CamelIgniteIdGenOperation": { "index": 0, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "org.apache.camel.component.ignite.idgen.IgniteIdGenOperation", "enum": [ "ADD_AND_GET", "GET", "GET_AND_ADD", "GET_AND_INCREMENT", "INCREMENT_AND_GET" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Allows you to dynamically change the ID Generator operation.", "constantName": "org [...] }, + "bodyTypes": { + "producerIn": { "carriers": [ "any" ], "byOption": [ { "option": "operation", "value": "ADD_AND_GET", "carriers": [ "value", "text" ] }, { "option": "operation", "value": "GET_AND_ADD", "carriers": [ "value", "text" ] } ], "description": "ADD_AND_GET and GET_AND_ADD add the body to the sequence: a number, or text of one; no body fails. The other operations do not use the body, but text that is not a number still fails. The operation is the operation option or the CamelIgniteIdGenOper [...] + "producerOut": { "carriers": [ "value" ], "javaType": "java.lang.Long", "description": "The value of the sequence, as a Long" } + }, "properties": { "name": { "index": 0, "kind": "path", "displayName": "Name", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sequence name." }, "batchSize": { "index": 1, "kind": "parameter", "displayName": "Batch Size", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "description": "The batch size." }, diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ignite-messaging.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ignite-messaging.json index 641f44c6cff4..4be8d1517c78 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ignite-messaging.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ignite-messaging.json @@ -35,6 +35,11 @@ "CamelIgniteMessagingTopic": { "index": 0, "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(producer) Allows you to dynamically change the topic to send messages to. (consumer) It also carries the topic on which a message was received.", "constantName": "org.apache.camel.component.ignite.IgniteConstants#IGNITE_MESSAGING_TOPIC" }, "CamelIgniteMessagingUUID": { "index": 1, "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "java.util.UUID", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "This header is filled in with the UUID of the subscription when a message arrives.", "constantName": "org.apache.camel.component.ignite.IgniteConstants#IGNITE_MESSAGING_UUID" } }, + "bodyTypes": { + "consumerOut": { "carriers": [ "unknown" ], "description": "The message as it was sent to the topic, with the topic in the CamelIgniteMessagingTopic header and the id of the subscription in CamelIgniteMessagingUUID" }, + "producerIn": { "carriers": [ "text", "bytes", "value", "map", "list", "pojo" ], "description": "The message to send, as the object: it must be serializable for the other nodes, so a stream is not read. In UNORDERED mode a Collection is one message per element, unless treatCollectionsAsCacheObjects=true. No body fails. The topic is the CamelIgniteMessagingTopic header, or else the endpoint topic" }, + "producerOut": { "carriers": [ "unchanged" ], "byOption": [ { "option": "propagateIncomingBodyIfNoReturnValue", "value": "false", "carriers": [ "null" ] } ] } + }, "properties": { "topic": { "index": 0, "kind": "path", "displayName": "Topic", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The topic name." }, "propagateIncomingBodyIfNoReturnValue": { "index": 1, "kind": "parameter", "displayName": "Propagate Incoming Body If No Return Value", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Sets whether to propagate the incoming body if the return type of the underlying Ignite operation is void." }, diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ignite-queue.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ignite-queue.json index ba213e671e0f..cad10bfde3ea 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ignite-queue.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ignite-queue.json @@ -36,6 +36,10 @@ "CamelIgniteQueueTransferredCount": { "index": 2, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The amount of items transferred as the result of the DRAIN operation.", "constantName": "org.apache.camel.component.ignite.IgniteConstants#IGNITE_QUEUE_TRANSFERRED_COUNT" }, "CamelIgniteQueueTimeoutMillis": { "index": 3, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Dynamically sets the timeout in milliseconds to use when invoking the OFFER or POLL operations.", "constantName": "org.apache.camel.component.ignite.IgniteConstants#IGNITE_QUEUE_TIMEOUT_MILLIS" } }, + "bodyTypes": { + "producerIn": { "carriers": [ "any" ], "description": "ADD, OFFER, PUT, CONTAINS, REMOVE and RETAIN_ALL use the body as the element, and a Collection as several elements unless treatCollectionsAsCacheObjects=true; no body fails ADD, CONTAINS, REMOVE and RETAIN_ALL. DRAIN drains into a Collection body, or a new List. The other operations do not use the body. The operation is the operation option or the CamelIgniteQueueOperation header; with neither the producer fails" }, + "producerOut": { "carriers": [ "unknown" ], "dependsOn": [ "propagateIncomingBodyIfNoReturnValue" ], "byOption": [ { "option": "operation", "value": "ADD", "carriers": [ "value" ], "javaType": "java.lang.Boolean" }, { "option": "operation", "value": "OFFER", "carriers": [ "value" ], "javaType": "java.lang.Boolean" }, { "option": "operation", "value": "CONTAINS", "carriers": [ "value" ], "javaType": "java.lang.Boolean" }, { "option": "operation", "value": "REMOVE", "carriers": [ "valu [...] + }, "properties": { "name": { "index": 0, "kind": "path", "displayName": "Name", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The queue name." }, "capacity": { "index": 1, "kind": "parameter", "displayName": "Capacity", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "The queue capacity. Default: non-bounded." }, diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ignite-set.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ignite-set.json index 61ab5f886eec..d1b61c964302 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ignite-set.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ignite-set.json @@ -33,6 +33,10 @@ "headers": { "CamelIgniteSetsOperation": { "index": 0, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "org.apache.camel.component.ignite.set.IgniteSetOperation", "enum": [ "CONTAINS", "ADD", "SIZE", "REMOVE", "ITERATOR", "CLEAR", "RETAIN_ALL", "ARRAY" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Allows you to dynamically change the set operation.", "constantName": "org.apache.came [...] }, + "bodyTypes": { + "producerIn": { "carriers": [ "any" ], "description": "ADD, CONTAINS, REMOVE and RETAIN_ALL use the body as the element, and a Collection as several elements unless treatCollectionsAsCacheObjects=true; no body fails them. SIZE, ITERATOR, ARRAY and CLEAR do not use the body. The operation is the operation option or the CamelIgniteSetsOperation header; with neither the producer fails" }, + "producerOut": { "carriers": [ "value", "iterator", "list", "unchanged" ], "dependsOn": [ "propagateIncomingBodyIfNoReturnValue" ], "byOption": [ { "option": "operation", "value": "ADD", "carriers": [ "value" ], "javaType": "java.lang.Boolean" }, { "option": "operation", "value": "CONTAINS", "carriers": [ "value" ], "javaType": "java.lang.Boolean" }, { "option": "operation", "value": "REMOVE", "carriers": [ "value" ], "javaType": "java.lang.Boolean" }, { "option": "operation", "value [...] + }, "properties": { "name": { "index": 0, "kind": "path", "displayName": "Name", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The set name." }, "configuration": { "index": 1, "kind": "parameter", "displayName": "Configuration", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.ignite.configuration.CollectionConfiguration", "deprecated": false, "autowired": false, "secret": false, "description": "The collection configuration. Default: empty configuration. You can also conveniently set inner properties by using configuration.xyz=123 options." }, diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/jcache.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/jcache.json index a45226ae5024..45984af75d51 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/jcache.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/jcache.json @@ -43,6 +43,11 @@ "CamelJCacheEntryProcessor": { "index": 6, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "EntryProcessor<Object, Object, Object>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The EntryProcessor to invoke", "constantName": "org.apache.camel.component.jcache.JCacheConstants#ENTRY_PROCESSOR" }, "CamelJCacheEntryArgs": { "index": 7, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Collection<Object>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The additional arguments to pass to the EntryProcessor", "constantName": "org.apache.camel.component.jcache.JCacheConstants#ARGUMENTS" } }, + "bodyTypes": { + "consumerOut": { "carriers": [ "unknown" ], "description": "The value of the entry, as it was put, with the key in the CamelJCacheKey header and the event (CREATED, UPDATED, REMOVED or EXPIRED) in CamelJCacheEventType; with oldValueRequired the previous value is in the CamelJCacheOldValue header. A REMOVED or EXPIRED event has the old value as body when the provider gives it (Hazelcast does with oldValueRequired), else no body" }, + "producerIn": { "carriers": [ "any" ], "description": "The value to store for PUT, PUTIFABSENT, REPLACE, GETANDPUT and GETANDREPLACE, as it is, and a Map of the entries for PUTALL; no body, or a body that is not a Map for PUTALL, fails. A provider that stores by value serializes it: a stream fails, so convert it to text or bytes first. The other actions do not use the body" }, + "producerOut": { "carriers": [ "unknown" ], "byOption": [ { "option": "action", "value": "GETALL", "carriers": [ "map" ], "javaType": "java.util.Map" }, { "option": "action", "value": "PUT", "carriers": [ "unchanged" ] }, { "option": "action", "value": "PUTALL", "carriers": [ "unchanged" ] }, { "option": "action", "value": "PUTIFABSENT", "carriers": [ "unchanged" ] }, { "option": "action", "value": "REPLACE", "carriers": [ "unchanged" ] }, { "option": "action", "value": "REMOVE", "ca [...] + }, "properties": { "cacheName": { "index": 0, "kind": "path", "displayName": "Cache Name", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The name of the cache" }, "cacheConfigurationProperties": { "index": 1, "kind": "parameter", "displayName": "Cache Configuration Properties", "group": "common", "label": "", "required": false, "type": "object", "javaType": "java.util.Properties", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.jcache.JCacheConfiguration", "configurationField": "configuration", "description": "The Properties for the javax.cache.spi.CachingProvider to create the CacheM [...] diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/state-store.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/state-store.json index 47d003a36392..807a43c79cb4 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/state-store.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/state-store.json @@ -33,6 +33,10 @@ "CamelStateStoreKey": { "index": 1, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The key to use for the operation", "constantName": "org.apache.camel.component.statestore.StateStoreConstants#KEY" }, "CamelStateStoreTtl": { "index": 2, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Per-message TTL override in milliseconds. Takes precedence over the endpoint ttl option.", "constantName": "org.apache.camel.component.statestore.StateStoreConstants#TTL" } }, + "bodyTypes": { + "producerIn": { "carriers": [ "any" ], "description": "The value to store for put and putIfAbsent, as it is: a stream is stored as the stream and shared by the later gets, so convert it to text or bytes first. The other operations do not use the body" }, + "producerOut": { "carriers": [ "unknown" ], "byOption": [ { "option": "operation", "value": "contains", "carriers": [ "value" ], "javaType": "java.lang.Boolean" }, { "option": "operation", "value": "keys", "carriers": [ "list" ], "javaType": "java.util.Set<java.lang.String>" }, { "option": "operation", "value": "size", "carriers": [ "value" ], "javaType": "java.lang.Integer" }, { "option": "operation", "value": "clear", "carriers": [ "null" ] } ], "description": "By the operation, wh [...] + }, "properties": { "storeName": { "index": 0, "kind": "path", "displayName": "Store Name", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The name of the state store" }, "operation": { "index": 1, "kind": "parameter", "displayName": "Operation", "group": "producer", "label": "", "required": false, "type": "enum", "javaType": "org.apache.camel.component.statestore.StateStoreOperations", "enum": [ "put", "putIfAbsent", "get", "delete", "contains", "keys", "size", "clear" ], "deprecated": false, "autowired": false, "secret": false, "description": "The default operation to perform" }, diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/ignite-cache-component.adoc b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/ignite-cache-component.adoc index e0b507c40378..f25f4943ac2a 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/ignite-cache-component.adoc +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/ignite-cache-component.adoc @@ -17,7 +17,8 @@ The Ignite Cache endpoint is one of camel-ignite endpoints that allow you to interact with an https://apacheignite.readme.io/docs/data-grid[Ignite Cache]. This offers both a Producer (to invoke cache operations on an Ignite cache) and a Consumer (to consume changes from a continuous query). -The cache value is always the body of the message, whereas the cache key is always stored in the `CamelIgniteCacheKey` message header. +The cache value is the body of the message, and the cache key is in the `CamelIgniteCacheKey` message header. +GET and REMOVE take the key from the body when that header is not set, and a PUT of a `Map` body puts all its entries. Even if you configure a fixed operation in the endpoint URI, you can vary it per-exchange by setting the `CamelIgniteCacheOperation` message header. diff --git a/components/camel-ehcache/src/generated/resources/META-INF/org/apache/camel/component/ehcache/ehcache.json b/components/camel-ehcache/src/generated/resources/META-INF/org/apache/camel/component/ehcache/ehcache.json index 57128105f2aa..64de7a9d7660 100644 --- a/components/camel-ehcache/src/generated/resources/META-INF/org/apache/camel/component/ehcache/ehcache.json +++ b/components/camel-ehcache/src/generated/resources/META-INF/org/apache/camel/component/ehcache/ehcache.json @@ -51,6 +51,11 @@ "CamelEhcacheOldValue": { "index": 6, "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Object", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The old value associated to a key for actions like PUT_IF_ABSENT or the Object used for comparison for actions like REPLACE", "constantName": "org.apache.camel.component.ehcache.EhcacheConstants#OLD_VALUE" }, "CamelEhcacheEventType": { "index": 7, "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "EventType", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The type of event received", "constantName": "org.apache.camel.component.ehcache.EhcacheConstants#EVENT_TYPE" } }, + "bodyTypes": { + "consumerOut": { "carriers": [ "unknown" ], "description": "The new value of the entry, as it was put, with the key in the CamelEhcacheKey header, the event in CamelEhcacheEventType and the previous value in CamelEhcacheOldValue. A REMOVED, EXPIRED or EVICTED event has no body" }, + "producerIn": { "carriers": [ "any" ], "description": "The value to store for PUT, PUT_IF_ABSENT and REPLACE, converted to the valueType when set, and a Map of the entries for PUT_ALL, unless the CamelEhcacheValue header gives it. The value is stored as it is: a stream is read once, so convert it to text or bytes first. The other actions do not use the body" }, + "producerOut": { "carriers": [ "unknown" ], "byOption": [ { "option": "action", "value": "GET_ALL", "carriers": [ "map" ], "javaType": "java.util.Map" }, { "option": "action", "value": "PUT", "carriers": [ "unchanged" ] }, { "option": "action", "value": "PUT_ALL", "carriers": [ "unchanged" ] }, { "option": "action", "value": "PUT_IF_ABSENT", "carriers": [ "unchanged" ] }, { "option": "action", "value": "REPLACE", "carriers": [ "unchanged" ] }, { "option": "action", "value": "REMOVE", [...] + }, "properties": { "cacheName": { "index": 0, "kind": "path", "displayName": "Cache Name", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "the cache name" }, "cacheManager": { "index": 1, "kind": "parameter", "displayName": "Cache Manager", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.ehcache.CacheManager", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ehcache.EhcacheConfiguration", "configurationField": "configuration", "description": "The cache manager" }, diff --git a/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheEndpoint.java b/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheEndpoint.java index 20cf480f13fe..31e215004b6d 100644 --- a/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheEndpoint.java +++ b/components/camel-ehcache/src/main/java/org/apache/camel/component/ehcache/EhcacheEndpoint.java @@ -20,6 +20,9 @@ import org.apache.camel.Category; import org.apache.camel.Consumer; import org.apache.camel.Processor; import org.apache.camel.Producer; +import org.apache.camel.spi.BodyType; +import org.apache.camel.spi.BodyType.Carrier; +import org.apache.camel.spi.BodyTypes; import org.apache.camel.spi.Metadata; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; @@ -32,6 +35,35 @@ import org.apache.camel.support.service.ServiceHelper; */ @UriEndpoint(firstVersion = "2.18.0", scheme = "ehcache", title = "Ehcache", syntax = "ehcache:cacheName", category = { Category.CACHE, Category.CLUSTERING }, headersClass = EhcacheConstants.class) +@BodyTypes(consumerOut = @BodyType(value = Carrier.UNKNOWN, + description = "The new value of the entry, as it was put, with the key in the CamelEhcacheKey" + + " header, the event in CamelEhcacheEventType and the previous value in" + + " CamelEhcacheOldValue. A REMOVED, EXPIRED or EVICTED event has no body"), + producerIn = @BodyType(value = Carrier.ANY, + description = "The value to store for PUT, PUT_IF_ABSENT and REPLACE, converted to the" + + " valueType when set, and a Map of the entries for PUT_ALL, unless the" + + " CamelEhcacheValue header gives it. The value is stored as it is: a stream" + + " is read once, so convert it to text or bytes first. The other actions do" + + " not use the body"), + producerOut = @BodyType(value = Carrier.UNKNOWN, + byOption = { + @BodyType.When(option = "action", value = "GET_ALL", carriers = Carrier.MAP, + javaType = "java.util.Map"), + @BodyType.When(option = "action", value = "PUT", carriers = Carrier.UNCHANGED), + @BodyType.When(option = "action", value = "PUT_ALL", carriers = Carrier.UNCHANGED), + @BodyType.When(option = "action", value = "PUT_IF_ABSENT", + carriers = Carrier.UNCHANGED), + @BodyType.When(option = "action", value = "REPLACE", carriers = Carrier.UNCHANGED), + @BodyType.When(option = "action", value = "REMOVE", carriers = Carrier.UNCHANGED), + @BodyType.When(option = "action", value = "REMOVE_ALL", + carriers = Carrier.UNCHANGED), + @BodyType.When(option = "action", value = "CLEAR", carriers = Carrier.UNCHANGED) }, + description = "By the action, which the CamelEhcacheAction header can set: the value of the" + + " key for GET, or the body as it was when the key is not in the cache, and" + + " for GET_ALL a Map of the keys in the CamelEhcacheKeys header to their" + + " values, null for a key not found. The other actions keep the body;" + + " PUT_IF_ABSENT and REPLACE put the previous value in the" + + " CamelEhcacheOldValue header")) public class EhcacheEndpoint extends DefaultEndpoint { @UriPath(description = "the cache name") @Metadata(required = true) diff --git a/components/camel-ignite/src/generated/resources/META-INF/org/apache/camel/component/ignite/cache/ignite-cache.json b/components/camel-ignite/src/generated/resources/META-INF/org/apache/camel/component/ignite/cache/ignite-cache.json index 6185c4786199..348cb48c6c01 100644 --- a/components/camel-ignite/src/generated/resources/META-INF/org/apache/camel/component/ignite/cache/ignite-cache.json +++ b/components/camel-ignite/src/generated/resources/META-INF/org/apache/camel/component/ignite/cache/ignite-cache.json @@ -40,6 +40,11 @@ "CamelIgniteCacheName": { "index": 5, "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "This header carries the cache name for which a continuous query event was received (consumer). It does not allow you to dynamically change the cache against which a producer operation is performed. Use EIPs for that (e.g. recipient l [...] "CamelIgniteCacheOldValue": { "index": 6, "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Object", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(producer) The old cache value to be replaced when invoking the REPLACE operation. (consumer) This header carries the old cache value when passed in the incoming cache event.", "constantName": "org.apache.camel.component.ignite.IgniteConst [...] }, + "bodyTypes": { + "consumerOut": { "carriers": [ "unknown" ], "byOption": [ { "option": "oneExchangePerUpdate", "value": "false", "carriers": [ "list" ] }, { "option": "fireExistingQueryResults", "value": "true", "carriers": [ "unknown" ] } ], "description": "The new value of the cache entry that changed, with its key in the CamelIgniteCacheKey header, the old value in CamelIgniteCacheOldValue and the event type in CamelIgniteCacheEventType. With oneExchangePerUpdate=false a List of the CacheEntryEven [...] + "producerIn": { "carriers": [ "any" ], "description": "PUT and REPLACE store the body as the value of the key in the CamelIgniteCacheKey header, and a PUT of a Map puts all its entries; no body fails. GET and REMOVE take the key from that header, or else from the body, where a Set is several keys. QUERY needs an Ignite Query in the body or the CamelIgniteCacheQuery header. SIZE, CLEAR and REBALANCE do not use the body. The operation is the operation option or the CamelIgniteCacheOper [...] + "producerOut": { "carriers": [ "unknown" ], "dependsOn": [ "propagateIncomingBodyIfNoReturnValue" ], "byOption": [ { "option": "operation", "value": "PUT", "carriers": [ "unchanged", "null" ] }, { "option": "operation", "value": "REPLACE", "carriers": [ "unchanged" ] }, { "option": "operation", "value": "REMOVE", "carriers": [ "unchanged" ] }, { "option": "operation", "value": "CLEAR", "carriers": [ "unchanged" ] }, { "option": "operation", "value": "REBALANCE", "carriers": [ "unchan [...] + }, "properties": { "cacheName": { "index": 0, "kind": "path", "displayName": "Cache Name", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The cache name." }, "propagateIncomingBodyIfNoReturnValue": { "index": 1, "kind": "parameter", "displayName": "Propagate Incoming Body If No Return Value", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Sets whether to propagate the incoming body if the return type of the underlying Ignite operation is void." }, diff --git a/components/camel-ignite/src/generated/resources/META-INF/org/apache/camel/component/ignite/compute/ignite-compute.json b/components/camel-ignite/src/generated/resources/META-INF/org/apache/camel/component/ignite/compute/ignite-compute.json index eccaa68ab3f7..6e2bedb40a51 100644 --- a/components/camel-ignite/src/generated/resources/META-INF/org/apache/camel/component/ignite/compute/ignite-compute.json +++ b/components/camel-ignite/src/generated/resources/META-INF/org/apache/camel/component/ignite/compute/ignite-compute.json @@ -37,6 +37,10 @@ "CamelIgniteComputeAffinityCacheName": { "index": 3, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Affinity cache name for the AFFINITY_CALL and AFFINITY_RUN operations.", "constantName": "org.apache.camel.component.ignite.IgniteConstants#IGNITE_COMPUTE_AFFINITY_CACHE_NAME" }, "CamelIgniteComputeAffinityKey": { "index": 4, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Object", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Affinity key for the AFFINITY_CALL and AFFINITY_RUN operations.", "constantName": "org.apache.camel.component.ignite.IgniteConstants#IGNITE_COMPUTE_AFFINITY_KEY" } }, + "bodyTypes": { + "producerIn": { "carriers": [ "pojo", "list" ], "dependsOn": [ "taskName" ], "description": "The job to run on the cluster, by executionType: an IgniteCallable for CALL and AFFINITY_CALL, an IgniteRunnable for RUN and AFFINITY_RUN, a Collection of them for CALL and RUN, an IgniteCallable, IgniteRunnable or IgniteClosure for BROADCAST, an IgniteClosure for APPLY, and a ComputeTask or its Class for EXECUTE. Its parameters are in the CamelIgniteComputeParameters header. With taskName, E [...] + "producerOut": { "carriers": [ "unknown" ], "byOption": [ { "option": "executionType", "value": "RUN", "carriers": [ "null" ] }, { "option": "executionType", "value": "AFFINITY_RUN", "carriers": [ "null" ] }, { "option": "executionType", "value": "BROADCAST", "carriers": [ "list", "null" ] } ], "description": "The result of the job. A Collection of callables, a broadcast and an APPLY of a Collection of parameters give a Collection of the results, unless an IgniteReducer in the CamelI [...] + }, "properties": { "endpointId": { "index": 0, "kind": "path", "displayName": "Endpoint Id", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The endpoint ID (not used)." }, "clusterGroupExpression": { "index": 1, "kind": "parameter", "displayName": "Cluster Group Expression", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.component.ignite.ClusterGroupExpression", "deprecated": false, "autowired": false, "secret": false, "description": "An expression that returns the Cluster Group for the IgniteCompute instance." }, diff --git a/components/camel-ignite/src/generated/resources/META-INF/org/apache/camel/component/ignite/events/ignite-events.json b/components/camel-ignite/src/generated/resources/META-INF/org/apache/camel/component/ignite/events/ignite-events.json index 74021fe55ba3..65d11dd6b9fd 100644 --- a/components/camel-ignite/src/generated/resources/META-INF/org/apache/camel/component/ignite/events/ignite-events.json +++ b/components/camel-ignite/src/generated/resources/META-INF/org/apache/camel/component/ignite/events/ignite-events.json @@ -30,6 +30,9 @@ "igniteConfiguration": { "index": 3, "kind": "property", "displayName": "Ignite Configuration", "group": "consumer", "label": "", "required": false, "type": "object", "javaType": "org.apache.ignite.configuration.IgniteConfiguration", "deprecated": false, "autowired": false, "secret": false, "description": "Allows the user to set a programmatic ignite configuration." }, "autowiredEnabled": { "index": 4, "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching t [...] }, + "bodyTypes": { + "consumerOut": { "carriers": [ "pojo" ], "javaType": "org.apache.ignite.events.Event", "description": "The Ignite Event, such as a CacheEvent or a JobEvent, with its type in type(); no headers are set. Ignite fires only the event types its configuration includes (includeEventTypes)" } + }, "properties": { "endpointId": { "index": 0, "kind": "path", "displayName": "Endpoint Id", "group": "consumer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The endpoint ID (not used)." }, "clusterGroupExpression": { "index": 1, "kind": "parameter", "displayName": "Cluster Group Expression", "group": "consumer", "label": "consumer", "required": false, "type": "object", "javaType": "org.apache.camel.component.ignite.ClusterGroupExpression", "deprecated": false, "autowired": false, "secret": false, "description": "The cluster group expression." }, diff --git a/components/camel-ignite/src/generated/resources/META-INF/org/apache/camel/component/ignite/idgen/ignite-idgen.json b/components/camel-ignite/src/generated/resources/META-INF/org/apache/camel/component/ignite/idgen/ignite-idgen.json index e3d3388e1a43..432245af793d 100644 --- a/components/camel-ignite/src/generated/resources/META-INF/org/apache/camel/component/ignite/idgen/ignite-idgen.json +++ b/components/camel-ignite/src/generated/resources/META-INF/org/apache/camel/component/ignite/idgen/ignite-idgen.json @@ -33,6 +33,10 @@ "headers": { "CamelIgniteIdGenOperation": { "index": 0, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "org.apache.camel.component.ignite.idgen.IgniteIdGenOperation", "enum": [ "ADD_AND_GET", "GET", "GET_AND_ADD", "GET_AND_INCREMENT", "INCREMENT_AND_GET" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Allows you to dynamically change the ID Generator operation.", "constantName": "org [...] }, + "bodyTypes": { + "producerIn": { "carriers": [ "any" ], "byOption": [ { "option": "operation", "value": "ADD_AND_GET", "carriers": [ "value", "text" ] }, { "option": "operation", "value": "GET_AND_ADD", "carriers": [ "value", "text" ] } ], "description": "ADD_AND_GET and GET_AND_ADD add the body to the sequence: a number, or text of one; no body fails. The other operations do not use the body, but text that is not a number still fails. The operation is the operation option or the CamelIgniteIdGenOper [...] + "producerOut": { "carriers": [ "value" ], "javaType": "java.lang.Long", "description": "The value of the sequence, as a Long" } + }, "properties": { "name": { "index": 0, "kind": "path", "displayName": "Name", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sequence name." }, "batchSize": { "index": 1, "kind": "parameter", "displayName": "Batch Size", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "description": "The batch size." }, diff --git a/components/camel-ignite/src/generated/resources/META-INF/org/apache/camel/component/ignite/messaging/ignite-messaging.json b/components/camel-ignite/src/generated/resources/META-INF/org/apache/camel/component/ignite/messaging/ignite-messaging.json index 641f44c6cff4..4be8d1517c78 100644 --- a/components/camel-ignite/src/generated/resources/META-INF/org/apache/camel/component/ignite/messaging/ignite-messaging.json +++ b/components/camel-ignite/src/generated/resources/META-INF/org/apache/camel/component/ignite/messaging/ignite-messaging.json @@ -35,6 +35,11 @@ "CamelIgniteMessagingTopic": { "index": 0, "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(producer) Allows you to dynamically change the topic to send messages to. (consumer) It also carries the topic on which a message was received.", "constantName": "org.apache.camel.component.ignite.IgniteConstants#IGNITE_MESSAGING_TOPIC" }, "CamelIgniteMessagingUUID": { "index": 1, "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "java.util.UUID", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "This header is filled in with the UUID of the subscription when a message arrives.", "constantName": "org.apache.camel.component.ignite.IgniteConstants#IGNITE_MESSAGING_UUID" } }, + "bodyTypes": { + "consumerOut": { "carriers": [ "unknown" ], "description": "The message as it was sent to the topic, with the topic in the CamelIgniteMessagingTopic header and the id of the subscription in CamelIgniteMessagingUUID" }, + "producerIn": { "carriers": [ "text", "bytes", "value", "map", "list", "pojo" ], "description": "The message to send, as the object: it must be serializable for the other nodes, so a stream is not read. In UNORDERED mode a Collection is one message per element, unless treatCollectionsAsCacheObjects=true. No body fails. The topic is the CamelIgniteMessagingTopic header, or else the endpoint topic" }, + "producerOut": { "carriers": [ "unchanged" ], "byOption": [ { "option": "propagateIncomingBodyIfNoReturnValue", "value": "false", "carriers": [ "null" ] } ] } + }, "properties": { "topic": { "index": 0, "kind": "path", "displayName": "Topic", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The topic name." }, "propagateIncomingBodyIfNoReturnValue": { "index": 1, "kind": "parameter", "displayName": "Propagate Incoming Body If No Return Value", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Sets whether to propagate the incoming body if the return type of the underlying Ignite operation is void." }, diff --git a/components/camel-ignite/src/generated/resources/META-INF/org/apache/camel/component/ignite/queue/ignite-queue.json b/components/camel-ignite/src/generated/resources/META-INF/org/apache/camel/component/ignite/queue/ignite-queue.json index ba213e671e0f..cad10bfde3ea 100644 --- a/components/camel-ignite/src/generated/resources/META-INF/org/apache/camel/component/ignite/queue/ignite-queue.json +++ b/components/camel-ignite/src/generated/resources/META-INF/org/apache/camel/component/ignite/queue/ignite-queue.json @@ -36,6 +36,10 @@ "CamelIgniteQueueTransferredCount": { "index": 2, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The amount of items transferred as the result of the DRAIN operation.", "constantName": "org.apache.camel.component.ignite.IgniteConstants#IGNITE_QUEUE_TRANSFERRED_COUNT" }, "CamelIgniteQueueTimeoutMillis": { "index": 3, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Dynamically sets the timeout in milliseconds to use when invoking the OFFER or POLL operations.", "constantName": "org.apache.camel.component.ignite.IgniteConstants#IGNITE_QUEUE_TIMEOUT_MILLIS" } }, + "bodyTypes": { + "producerIn": { "carriers": [ "any" ], "description": "ADD, OFFER, PUT, CONTAINS, REMOVE and RETAIN_ALL use the body as the element, and a Collection as several elements unless treatCollectionsAsCacheObjects=true; no body fails ADD, CONTAINS, REMOVE and RETAIN_ALL. DRAIN drains into a Collection body, or a new List. The other operations do not use the body. The operation is the operation option or the CamelIgniteQueueOperation header; with neither the producer fails" }, + "producerOut": { "carriers": [ "unknown" ], "dependsOn": [ "propagateIncomingBodyIfNoReturnValue" ], "byOption": [ { "option": "operation", "value": "ADD", "carriers": [ "value" ], "javaType": "java.lang.Boolean" }, { "option": "operation", "value": "OFFER", "carriers": [ "value" ], "javaType": "java.lang.Boolean" }, { "option": "operation", "value": "CONTAINS", "carriers": [ "value" ], "javaType": "java.lang.Boolean" }, { "option": "operation", "value": "REMOVE", "carriers": [ "valu [...] + }, "properties": { "name": { "index": 0, "kind": "path", "displayName": "Name", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The queue name." }, "capacity": { "index": 1, "kind": "parameter", "displayName": "Capacity", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "The queue capacity. Default: non-bounded." }, diff --git a/components/camel-ignite/src/generated/resources/META-INF/org/apache/camel/component/ignite/set/ignite-set.json b/components/camel-ignite/src/generated/resources/META-INF/org/apache/camel/component/ignite/set/ignite-set.json index 61ab5f886eec..d1b61c964302 100644 --- a/components/camel-ignite/src/generated/resources/META-INF/org/apache/camel/component/ignite/set/ignite-set.json +++ b/components/camel-ignite/src/generated/resources/META-INF/org/apache/camel/component/ignite/set/ignite-set.json @@ -33,6 +33,10 @@ "headers": { "CamelIgniteSetsOperation": { "index": 0, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "org.apache.camel.component.ignite.set.IgniteSetOperation", "enum": [ "CONTAINS", "ADD", "SIZE", "REMOVE", "ITERATOR", "CLEAR", "RETAIN_ALL", "ARRAY" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Allows you to dynamically change the set operation.", "constantName": "org.apache.came [...] }, + "bodyTypes": { + "producerIn": { "carriers": [ "any" ], "description": "ADD, CONTAINS, REMOVE and RETAIN_ALL use the body as the element, and a Collection as several elements unless treatCollectionsAsCacheObjects=true; no body fails them. SIZE, ITERATOR, ARRAY and CLEAR do not use the body. The operation is the operation option or the CamelIgniteSetsOperation header; with neither the producer fails" }, + "producerOut": { "carriers": [ "value", "iterator", "list", "unchanged" ], "dependsOn": [ "propagateIncomingBodyIfNoReturnValue" ], "byOption": [ { "option": "operation", "value": "ADD", "carriers": [ "value" ], "javaType": "java.lang.Boolean" }, { "option": "operation", "value": "CONTAINS", "carriers": [ "value" ], "javaType": "java.lang.Boolean" }, { "option": "operation", "value": "REMOVE", "carriers": [ "value" ], "javaType": "java.lang.Boolean" }, { "option": "operation", "value [...] + }, "properties": { "name": { "index": 0, "kind": "path", "displayName": "Name", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The set name." }, "configuration": { "index": 1, "kind": "parameter", "displayName": "Configuration", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.ignite.configuration.CollectionConfiguration", "deprecated": false, "autowired": false, "secret": false, "description": "The collection configuration. Default: empty configuration. You can also conveniently set inner properties by using configuration.xyz=123 options." }, diff --git a/components/camel-ignite/src/main/docs/ignite-cache-component.adoc b/components/camel-ignite/src/main/docs/ignite-cache-component.adoc index e0b507c40378..f25f4943ac2a 100644 --- a/components/camel-ignite/src/main/docs/ignite-cache-component.adoc +++ b/components/camel-ignite/src/main/docs/ignite-cache-component.adoc @@ -17,7 +17,8 @@ The Ignite Cache endpoint is one of camel-ignite endpoints that allow you to interact with an https://apacheignite.readme.io/docs/data-grid[Ignite Cache]. This offers both a Producer (to invoke cache operations on an Ignite cache) and a Consumer (to consume changes from a continuous query). -The cache value is always the body of the message, whereas the cache key is always stored in the `CamelIgniteCacheKey` message header. +The cache value is the body of the message, and the cache key is in the `CamelIgniteCacheKey` message header. +GET and REMOVE take the key from the body when that header is not set, and a PUT of a `Map` body puts all its entries. Even if you configure a fixed operation in the endpoint URI, you can vary it per-exchange by setting the `CamelIgniteCacheOperation` message header. diff --git a/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/cache/IgniteCacheEndpoint.java b/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/cache/IgniteCacheEndpoint.java index cabfc895dd81..2bff9c98b559 100644 --- a/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/cache/IgniteCacheEndpoint.java +++ b/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/cache/IgniteCacheEndpoint.java @@ -27,6 +27,9 @@ import org.apache.camel.Processor; import org.apache.camel.Producer; import org.apache.camel.component.ignite.AbstractIgniteEndpoint; import org.apache.camel.component.ignite.IgniteConstants; +import org.apache.camel.spi.BodyType; +import org.apache.camel.spi.BodyType.Carrier; +import org.apache.camel.spi.BodyTypes; import org.apache.camel.spi.Metadata; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; @@ -44,6 +47,48 @@ import static org.apache.camel.component.ignite.IgniteConstants.SCHEME_CACHE; */ @UriEndpoint(firstVersion = "2.17.0", scheme = SCHEME_CACHE, title = "Ignite Cache", syntax = "ignite-cache:cacheName", category = { Category.CACHE, Category.CLUSTERING }, headersClass = IgniteConstants.class) +@BodyTypes(consumerOut = @BodyType(value = Carrier.UNKNOWN, + byOption = { + @BodyType.When(option = "oneExchangePerUpdate", value = "false", + carriers = Carrier.LIST), + @BodyType.When(option = "fireExistingQueryResults", value = "true", + carriers = Carrier.UNKNOWN) }, + description = "The new value of the cache entry that changed, with its key in the" + + " CamelIgniteCacheKey header, the old value in CamelIgniteCacheOldValue and" + + " the event type in CamelIgniteCacheEventType. With oneExchangePerUpdate=false" + + " a List of the CacheEntryEvents of Ignite per batch; with" + + " fireExistingQueryResults=true the entries the initial query finds come" + + " first, each as a JCache Cache.Entry"), + producerIn = @BodyType(value = Carrier.ANY, + description = "PUT and REPLACE store the body as the value of the key in the" + + " CamelIgniteCacheKey header, and a PUT of a Map puts all its entries; no" + + " body fails. GET and REMOVE take the key from that header, or else from the" + + " body, where a Set is several keys. QUERY needs an Ignite Query in the body" + + " or the CamelIgniteCacheQuery header. SIZE, CLEAR and REBALANCE do not use" + + " the body. The operation is the operation option or the" + + " CamelIgniteCacheOperation header; with neither the producer fails"), + producerOut = @BodyType(value = Carrier.UNKNOWN, + dependsOn = "propagateIncomingBodyIfNoReturnValue", + byOption = { + @BodyType.When(option = "operation", value = "PUT", + carriers = { Carrier.UNCHANGED, Carrier.NULL }), + @BodyType.When(option = "operation", value = "REPLACE", + carriers = Carrier.UNCHANGED), + @BodyType.When(option = "operation", value = "REMOVE", + carriers = Carrier.UNCHANGED), + @BodyType.When(option = "operation", value = "CLEAR", + carriers = Carrier.UNCHANGED), + @BodyType.When(option = "operation", value = "REBALANCE", + carriers = Carrier.UNCHANGED), + @BodyType.When(option = "operation", value = "SIZE", carriers = Carrier.VALUE, + javaType = "java.lang.Integer"), + @BodyType.When(option = "operation", value = "QUERY", + carriers = Carrier.ITERATOR) }, + description = "GET gives the cached value, or null when the key is not cached, and a Map" + + " of the keys and their values for a Set of keys. QUERY gives an Iterator of" + + " the entries found, closed when the exchange completes. SIZE gives the" + + " number of entries. The others leave the body, but a PUT of a Map leaves no" + + " body")) public class IgniteCacheEndpoint extends AbstractIgniteEndpoint { @UriPath diff --git a/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/compute/IgniteComputeEndpoint.java b/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/compute/IgniteComputeEndpoint.java index e59f60a867e6..136adea0c895 100644 --- a/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/compute/IgniteComputeEndpoint.java +++ b/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/compute/IgniteComputeEndpoint.java @@ -25,6 +25,9 @@ import org.apache.camel.Producer; import org.apache.camel.component.ignite.AbstractIgniteEndpoint; import org.apache.camel.component.ignite.ClusterGroupExpression; import org.apache.camel.component.ignite.IgniteConstants; +import org.apache.camel.spi.BodyType; +import org.apache.camel.spi.BodyType.Carrier; +import org.apache.camel.spi.BodyTypes; import org.apache.camel.spi.Metadata; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; @@ -42,6 +45,25 @@ import static org.apache.camel.component.ignite.IgniteConstants.SCHEME_COMPUTE; */ @UriEndpoint(firstVersion = "2.17.0", scheme = SCHEME_COMPUTE, title = "Ignite Compute", syntax = "ignite-compute:endpointId", category = { Category.CACHE, Category.CLUSTERING }, producerOnly = true, headersClass = IgniteConstants.class) +@BodyTypes(producerIn = @BodyType(value = { Carrier.POJO, Carrier.LIST }, dependsOn = "taskName", + description = "The job to run on the cluster, by executionType: an IgniteCallable for CALL" + + " and AFFINITY_CALL, an IgniteRunnable for RUN and AFFINITY_RUN, a Collection" + + " of them for CALL and RUN, an IgniteCallable, IgniteRunnable or" + + " IgniteClosure for BROADCAST, an IgniteClosure for APPLY, and a ComputeTask or" + + " its Class for EXECUTE. Its parameters are in the CamelIgniteComputeParameters" + + " header. With taskName, EXECUTE runs that task with the body as its" + + " argument. Text or no body fails"), + producerOut = @BodyType(value = Carrier.UNKNOWN, + byOption = { + @BodyType.When(option = "executionType", value = "RUN", carriers = Carrier.NULL), + @BodyType.When(option = "executionType", value = "AFFINITY_RUN", + carriers = Carrier.NULL), + @BodyType.When(option = "executionType", value = "BROADCAST", + carriers = { Carrier.LIST, Carrier.NULL }) }, + description = "The result of the job. A Collection of callables, a broadcast and an APPLY" + + " of a Collection of parameters give a Collection of the results, unless an" + + " IgniteReducer in the CamelIgniteComputeReducer header reduces them. RUN," + + " AFFINITY_RUN and a broadcast IgniteRunnable leave no body")) public class IgniteComputeEndpoint extends AbstractIgniteEndpoint { @UriPath diff --git a/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/events/IgniteEventsEndpoint.java b/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/events/IgniteEventsEndpoint.java index 25a36223289e..5ec0a2eeb8d2 100644 --- a/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/events/IgniteEventsEndpoint.java +++ b/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/events/IgniteEventsEndpoint.java @@ -30,6 +30,9 @@ import org.apache.camel.Processor; import org.apache.camel.Producer; import org.apache.camel.component.ignite.AbstractIgniteEndpoint; import org.apache.camel.component.ignite.ClusterGroupExpression; +import org.apache.camel.spi.BodyType; +import org.apache.camel.spi.BodyType.Carrier; +import org.apache.camel.spi.BodyTypes; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; import org.apache.camel.spi.UriPath; @@ -52,6 +55,10 @@ import static org.apache.camel.component.ignite.IgniteConstants.SCHEME_EVENTS; @UriEndpoint(firstVersion = "2.17.0", scheme = SCHEME_EVENTS, title = "Ignite Events", syntax = "ignite-events:endpointId", category = { Category.MESSAGING, Category.CACHE, Category.CLUSTERING }, consumerOnly = true) +@BodyTypes(consumerOut = @BodyType(value = Carrier.POJO, javaType = "org.apache.ignite.events.Event", + description = "The Ignite Event, such as a CacheEvent or a JobEvent, with its type in" + + " type(); no headers are set. Ignite fires only the event types its" + + " configuration includes (includeEventTypes)")) public class IgniteEventsEndpoint extends AbstractIgniteEndpoint { private static final Logger LOG = LoggerFactory.getLogger(IgniteEventsEndpoint.class); diff --git a/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/idgen/IgniteIdGenEndpoint.java b/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/idgen/IgniteIdGenEndpoint.java index db6f9ff5fd23..0e739c296af6 100644 --- a/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/idgen/IgniteIdGenEndpoint.java +++ b/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/idgen/IgniteIdGenEndpoint.java @@ -24,6 +24,9 @@ import org.apache.camel.Processor; import org.apache.camel.Producer; import org.apache.camel.component.ignite.AbstractIgniteEndpoint; import org.apache.camel.component.ignite.IgniteConstants; +import org.apache.camel.spi.BodyType; +import org.apache.camel.spi.BodyType.Carrier; +import org.apache.camel.spi.BodyTypes; import org.apache.camel.spi.Metadata; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; @@ -43,6 +46,18 @@ import static org.apache.camel.component.ignite.IgniteConstants.SCHEME_IDGEN; */ @UriEndpoint(firstVersion = "2.17.0", scheme = SCHEME_IDGEN, title = "Ignite ID Generator", syntax = "ignite-idgen:name", category = { Category.CACHE, Category.CLUSTERING }, producerOnly = true, headersClass = IgniteConstants.class) +@BodyTypes(producerIn = @BodyType(value = Carrier.ANY, + byOption = { + @BodyType.When(option = "operation", value = "ADD_AND_GET", + carriers = { Carrier.VALUE, Carrier.TEXT }), + @BodyType.When(option = "operation", value = "GET_AND_ADD", + carriers = { Carrier.VALUE, Carrier.TEXT }) }, + description = "ADD_AND_GET and GET_AND_ADD add the body to the sequence: a number, or text" + + " of one; no body fails. The other operations do not use the body, but text" + + " that is not a number still fails. The operation is the operation option or" + + " the CamelIgniteIdGenOperation header"), + producerOut = @BodyType(value = Carrier.VALUE, javaType = "java.lang.Long", + description = "The value of the sequence, as a Long")) public class IgniteIdGenEndpoint extends AbstractIgniteEndpoint { private static final Logger LOG = LoggerFactory.getLogger(IgniteIdGenEndpoint.class); diff --git a/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/messaging/IgniteMessagingEndpoint.java b/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/messaging/IgniteMessagingEndpoint.java index 8104b9257574..6424f82bda45 100644 --- a/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/messaging/IgniteMessagingEndpoint.java +++ b/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/messaging/IgniteMessagingEndpoint.java @@ -25,6 +25,9 @@ import org.apache.camel.Producer; import org.apache.camel.component.ignite.AbstractIgniteEndpoint; import org.apache.camel.component.ignite.ClusterGroupExpression; import org.apache.camel.component.ignite.IgniteConstants; +import org.apache.camel.spi.BodyType; +import org.apache.camel.spi.BodyType.Carrier; +import org.apache.camel.spi.BodyTypes; import org.apache.camel.spi.Metadata; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; @@ -41,6 +44,19 @@ import static org.apache.camel.component.ignite.IgniteConstants.SCHEME_MESSAGING */ @UriEndpoint(firstVersion = "2.17.0", scheme = SCHEME_MESSAGING, title = "Ignite Messaging", syntax = "ignite-messaging:topic", category = { Category.MESSAGING }, headersClass = IgniteConstants.class) +@BodyTypes(consumerOut = @BodyType(value = Carrier.UNKNOWN, + description = "The message as it was sent to the topic, with the topic in the" + + " CamelIgniteMessagingTopic header and the id of the subscription in" + + " CamelIgniteMessagingUUID"), + producerIn = @BodyType(value = { + Carrier.TEXT, Carrier.BYTES, Carrier.VALUE, Carrier.MAP, Carrier.LIST, Carrier.POJO }, + description = "The message to send, as the object: it must be serializable for the other" + + " nodes, so a stream is not read. In UNORDERED mode a Collection is one message" + + " per element, unless treatCollectionsAsCacheObjects=true. No body fails. The" + + " topic is the CamelIgniteMessagingTopic header, or else the endpoint topic"), + producerOut = @BodyType(value = Carrier.UNCHANGED, + byOption = @BodyType.When(option = "propagateIncomingBodyIfNoReturnValue", value = "false", + carriers = Carrier.NULL))) public class IgniteMessagingEndpoint extends AbstractIgniteEndpoint { @UriPath diff --git a/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/queue/IgniteQueueEndpoint.java b/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/queue/IgniteQueueEndpoint.java index b708a47f881e..3a896246cba9 100644 --- a/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/queue/IgniteQueueEndpoint.java +++ b/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/queue/IgniteQueueEndpoint.java @@ -24,6 +24,9 @@ import org.apache.camel.Processor; import org.apache.camel.Producer; import org.apache.camel.component.ignite.AbstractIgniteEndpoint; import org.apache.camel.component.ignite.IgniteConstants; +import org.apache.camel.spi.BodyType; +import org.apache.camel.spi.BodyType.Carrier; +import org.apache.camel.spi.BodyTypes; import org.apache.camel.spi.Metadata; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; @@ -44,6 +47,41 @@ import static org.apache.camel.component.ignite.IgniteConstants.SCHEME_QUEUE; @UriEndpoint(firstVersion = "2.17.0", scheme = SCHEME_QUEUE, title = "Ignite Queues", syntax = "ignite-queue:name", category = { Category.CACHE, Category.CLUSTERING, Category.MESSAGING }, producerOnly = true, headersClass = IgniteConstants.class) +@BodyTypes(producerIn = @BodyType(value = Carrier.ANY, + description = "ADD, OFFER, PUT, CONTAINS, REMOVE and RETAIN_ALL use the body as the" + + " element, and a Collection as several elements unless" + + " treatCollectionsAsCacheObjects=true; no body fails ADD, CONTAINS, REMOVE" + + " and RETAIN_ALL. DRAIN drains into a Collection body, or a new List. The" + + " other operations do not use the body. The operation is the operation option" + + " or the CamelIgniteQueueOperation header; with neither the producer fails"), + producerOut = @BodyType(value = Carrier.UNKNOWN, + dependsOn = "propagateIncomingBodyIfNoReturnValue", + byOption = { + @BodyType.When(option = "operation", value = "ADD", carriers = Carrier.VALUE, + javaType = "java.lang.Boolean"), + @BodyType.When(option = "operation", value = "OFFER", carriers = Carrier.VALUE, + javaType = "java.lang.Boolean"), + @BodyType.When(option = "operation", value = "CONTAINS", carriers = Carrier.VALUE, + javaType = "java.lang.Boolean"), + @BodyType.When(option = "operation", value = "REMOVE", carriers = Carrier.VALUE, + javaType = "java.lang.Boolean"), + @BodyType.When(option = "operation", value = "RETAIN_ALL", + carriers = Carrier.VALUE, javaType = "java.lang.Boolean"), + @BodyType.When(option = "operation", value = "SIZE", carriers = Carrier.VALUE, + javaType = "java.lang.Integer"), + @BodyType.When(option = "operation", value = "ITERATOR", + carriers = Carrier.ITERATOR), + @BodyType.When(option = "operation", value = "ARRAY", carriers = Carrier.LIST), + @BodyType.When(option = "operation", value = "DRAIN", carriers = Carrier.LIST), + @BodyType.When(option = "operation", value = "CLEAR", + carriers = Carrier.UNCHANGED), + @BodyType.When(option = "operation", value = "PUT", carriers = Carrier.UNCHANGED) }, + description = "true or false for ADD, OFFER, CONTAINS, REMOVE and RETAIN_ALL, the number of" + + " elements for SIZE, an Iterator for ITERATOR, an Object array for ARRAY, and" + + " the Collection of the drained elements for DRAIN, with their count in the" + + " CamelIgniteQueueTransferredCount header. ELEMENT, TAKE, PEEK and POLL give" + + " the head element; PEEK and POLL give null for an empty queue. CLEAR and PUT" + + " leave the body")) public class IgniteQueueEndpoint extends AbstractIgniteEndpoint { @UriPath diff --git a/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/set/IgniteSetEndpoint.java b/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/set/IgniteSetEndpoint.java index f45e630bacbb..00302a6873e9 100644 --- a/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/set/IgniteSetEndpoint.java +++ b/components/camel-ignite/src/main/java/org/apache/camel/component/ignite/set/IgniteSetEndpoint.java @@ -24,6 +24,9 @@ import org.apache.camel.Processor; import org.apache.camel.Producer; import org.apache.camel.component.ignite.AbstractIgniteEndpoint; import org.apache.camel.component.ignite.IgniteConstants; +import org.apache.camel.spi.BodyType; +import org.apache.camel.spi.BodyType.Carrier; +import org.apache.camel.spi.BodyTypes; import org.apache.camel.spi.Metadata; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; @@ -41,6 +44,34 @@ import static org.apache.camel.component.ignite.IgniteConstants.SCHEME_SET; */ @UriEndpoint(firstVersion = "2.17.0", scheme = SCHEME_SET, title = "Ignite Sets", syntax = "ignite-set:name", category = { Category.CACHE, Category.CLUSTERING }, producerOnly = true, headersClass = IgniteConstants.class) +@BodyTypes(producerIn = @BodyType(value = Carrier.ANY, + description = "ADD, CONTAINS, REMOVE and RETAIN_ALL use the body as the element, and a" + + " Collection as several elements unless treatCollectionsAsCacheObjects=true; no" + + " body fails them. SIZE, ITERATOR, ARRAY and CLEAR do not use the body. The" + + " operation is the operation option or the CamelIgniteSetsOperation header;" + + " with neither the producer fails"), + producerOut = @BodyType(value = { Carrier.VALUE, Carrier.ITERATOR, Carrier.LIST, Carrier.UNCHANGED }, + dependsOn = "propagateIncomingBodyIfNoReturnValue", + byOption = { + @BodyType.When(option = "operation", value = "ADD", carriers = Carrier.VALUE, + javaType = "java.lang.Boolean"), + @BodyType.When(option = "operation", value = "CONTAINS", carriers = Carrier.VALUE, + javaType = "java.lang.Boolean"), + @BodyType.When(option = "operation", value = "REMOVE", carriers = Carrier.VALUE, + javaType = "java.lang.Boolean"), + @BodyType.When(option = "operation", value = "RETAIN_ALL", + carriers = Carrier.VALUE, javaType = "java.lang.Boolean"), + @BodyType.When(option = "operation", value = "SIZE", carriers = Carrier.VALUE, + javaType = "java.lang.Integer"), + @BodyType.When(option = "operation", value = "ITERATOR", + carriers = Carrier.ITERATOR), + @BodyType.When(option = "operation", value = "ARRAY", carriers = Carrier.LIST), + @BodyType.When(option = "operation", value = "CLEAR", + carriers = Carrier.UNCHANGED) }, + description = "true or false for ADD, CONTAINS, REMOVE and RETAIN_ALL (whether the set" + + " changed, or holds the element), the number of elements for SIZE, an" + + " Iterator for ITERATOR and an Object array for ARRAY. CLEAR leaves the" + + " body")) public class IgniteSetEndpoint extends AbstractIgniteEndpoint { @UriPath diff --git a/components/camel-jcache/src/generated/resources/META-INF/org/apache/camel/component/jcache/jcache.json b/components/camel-jcache/src/generated/resources/META-INF/org/apache/camel/component/jcache/jcache.json index a45226ae5024..45984af75d51 100644 --- a/components/camel-jcache/src/generated/resources/META-INF/org/apache/camel/component/jcache/jcache.json +++ b/components/camel-jcache/src/generated/resources/META-INF/org/apache/camel/component/jcache/jcache.json @@ -43,6 +43,11 @@ "CamelJCacheEntryProcessor": { "index": 6, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "EntryProcessor<Object, Object, Object>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The EntryProcessor to invoke", "constantName": "org.apache.camel.component.jcache.JCacheConstants#ENTRY_PROCESSOR" }, "CamelJCacheEntryArgs": { "index": 7, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Collection<Object>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The additional arguments to pass to the EntryProcessor", "constantName": "org.apache.camel.component.jcache.JCacheConstants#ARGUMENTS" } }, + "bodyTypes": { + "consumerOut": { "carriers": [ "unknown" ], "description": "The value of the entry, as it was put, with the key in the CamelJCacheKey header and the event (CREATED, UPDATED, REMOVED or EXPIRED) in CamelJCacheEventType; with oldValueRequired the previous value is in the CamelJCacheOldValue header. A REMOVED or EXPIRED event has the old value as body when the provider gives it (Hazelcast does with oldValueRequired), else no body" }, + "producerIn": { "carriers": [ "any" ], "description": "The value to store for PUT, PUTIFABSENT, REPLACE, GETANDPUT and GETANDREPLACE, as it is, and a Map of the entries for PUTALL; no body, or a body that is not a Map for PUTALL, fails. A provider that stores by value serializes it: a stream fails, so convert it to text or bytes first. The other actions do not use the body" }, + "producerOut": { "carriers": [ "unknown" ], "byOption": [ { "option": "action", "value": "GETALL", "carriers": [ "map" ], "javaType": "java.util.Map" }, { "option": "action", "value": "PUT", "carriers": [ "unchanged" ] }, { "option": "action", "value": "PUTALL", "carriers": [ "unchanged" ] }, { "option": "action", "value": "PUTIFABSENT", "carriers": [ "unchanged" ] }, { "option": "action", "value": "REPLACE", "carriers": [ "unchanged" ] }, { "option": "action", "value": "REMOVE", "ca [...] + }, "properties": { "cacheName": { "index": 0, "kind": "path", "displayName": "Cache Name", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The name of the cache" }, "cacheConfigurationProperties": { "index": 1, "kind": "parameter", "displayName": "Cache Configuration Properties", "group": "common", "label": "", "required": false, "type": "object", "javaType": "java.util.Properties", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.jcache.JCacheConfiguration", "configurationField": "configuration", "description": "The Properties for the javax.cache.spi.CachingProvider to create the CacheM [...] diff --git a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheEndpoint.java b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheEndpoint.java index dc2139dc7452..51fe61e6f562 100644 --- a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheEndpoint.java +++ b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheEndpoint.java @@ -20,6 +20,9 @@ import org.apache.camel.Category; import org.apache.camel.Consumer; import org.apache.camel.Processor; import org.apache.camel.Producer; +import org.apache.camel.spi.BodyType; +import org.apache.camel.spi.BodyType.Carrier; +import org.apache.camel.spi.BodyTypes; import org.apache.camel.spi.Metadata; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; @@ -31,6 +34,39 @@ import org.apache.camel.support.DefaultEndpoint; */ @UriEndpoint(firstVersion = "2.17.0", scheme = "jcache", title = "JCache", syntax = "jcache:cacheName", category = { Category.CACHE, Category.CLUSTERING }, headersClass = JCacheConstants.class) +@BodyTypes(consumerOut = @BodyType(value = Carrier.UNKNOWN, + description = "The value of the entry, as it was put, with the key in the CamelJCacheKey" + + " header and the event (CREATED, UPDATED, REMOVED or EXPIRED) in" + + " CamelJCacheEventType; with oldValueRequired the previous value is in the" + + " CamelJCacheOldValue header. A REMOVED or EXPIRED event has the old value as" + + " body when the provider gives it (Hazelcast does with oldValueRequired)," + + " else no body"), + producerIn = @BodyType(value = Carrier.ANY, + description = "The value to store for PUT, PUTIFABSENT, REPLACE, GETANDPUT and GETANDREPLACE," + + " as it is, and a Map of the entries for PUTALL; no body, or a body that is" + + " not a Map for PUTALL, fails. A provider that stores by value serializes it:" + + " a stream fails, so convert it to text or bytes first. The other actions do" + + " not use the body"), + producerOut = @BodyType(value = Carrier.UNKNOWN, + byOption = { + @BodyType.When(option = "action", value = "GETALL", carriers = Carrier.MAP, + javaType = "java.util.Map"), + @BodyType.When(option = "action", value = "PUT", carriers = Carrier.UNCHANGED), + @BodyType.When(option = "action", value = "PUTALL", carriers = Carrier.UNCHANGED), + @BodyType.When(option = "action", value = "PUTIFABSENT", + carriers = Carrier.UNCHANGED), + @BodyType.When(option = "action", value = "REPLACE", carriers = Carrier.UNCHANGED), + @BodyType.When(option = "action", value = "REMOVE", carriers = Carrier.UNCHANGED), + @BodyType.When(option = "action", value = "REMOVEALL", + carriers = Carrier.UNCHANGED), + @BodyType.When(option = "action", value = "CLEAR", carriers = Carrier.UNCHANGED) }, + description = "By the action, which the CamelJCacheAction header can set: the value of the" + + " key for GET, or no body when it is not in the cache; the previous value," + + " or no body, for GETANDPUT, GETANDREPLACE and GETANDREMOVE; a Map of the" + + " keys found to their values for GETALL; the result of the EntryProcessor" + + " for INVOKE, a Map of the keys to their EntryProcessorResult with" + + " CamelJCacheKeys. The other actions keep the body; PUTIFABSENT, REPLACE and" + + " REMOVE put whether they changed the cache in the CamelJCacheResult header")) public class JCacheEndpoint extends DefaultEndpoint { @UriPath(description = "The name of the cache") diff --git a/components/camel-state-store/camel-state-store/src/generated/resources/META-INF/org/apache/camel/component/statestore/state-store.json b/components/camel-state-store/camel-state-store/src/generated/resources/META-INF/org/apache/camel/component/statestore/state-store.json index 47d003a36392..807a43c79cb4 100644 --- a/components/camel-state-store/camel-state-store/src/generated/resources/META-INF/org/apache/camel/component/statestore/state-store.json +++ b/components/camel-state-store/camel-state-store/src/generated/resources/META-INF/org/apache/camel/component/statestore/state-store.json @@ -33,6 +33,10 @@ "CamelStateStoreKey": { "index": 1, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The key to use for the operation", "constantName": "org.apache.camel.component.statestore.StateStoreConstants#KEY" }, "CamelStateStoreTtl": { "index": 2, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Per-message TTL override in milliseconds. Takes precedence over the endpoint ttl option.", "constantName": "org.apache.camel.component.statestore.StateStoreConstants#TTL" } }, + "bodyTypes": { + "producerIn": { "carriers": [ "any" ], "description": "The value to store for put and putIfAbsent, as it is: a stream is stored as the stream and shared by the later gets, so convert it to text or bytes first. The other operations do not use the body" }, + "producerOut": { "carriers": [ "unknown" ], "byOption": [ { "option": "operation", "value": "contains", "carriers": [ "value" ], "javaType": "java.lang.Boolean" }, { "option": "operation", "value": "keys", "carriers": [ "list" ], "javaType": "java.util.Set<java.lang.String>" }, { "option": "operation", "value": "size", "carriers": [ "value" ], "javaType": "java.lang.Integer" }, { "option": "operation", "value": "clear", "carriers": [ "null" ] } ], "description": "By the operation, wh [...] + }, "properties": { "storeName": { "index": 0, "kind": "path", "displayName": "Store Name", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The name of the state store" }, "operation": { "index": 1, "kind": "parameter", "displayName": "Operation", "group": "producer", "label": "", "required": false, "type": "enum", "javaType": "org.apache.camel.component.statestore.StateStoreOperations", "enum": [ "put", "putIfAbsent", "get", "delete", "contains", "keys", "size", "clear" ], "deprecated": false, "autowired": false, "secret": false, "description": "The default operation to perform" }, diff --git a/components/camel-state-store/camel-state-store/src/main/java/org/apache/camel/component/statestore/StateStoreEndpoint.java b/components/camel-state-store/camel-state-store/src/main/java/org/apache/camel/component/statestore/StateStoreEndpoint.java index 62747afce2e9..90a855cce895 100644 --- a/components/camel-state-store/camel-state-store/src/main/java/org/apache/camel/component/statestore/StateStoreEndpoint.java +++ b/components/camel-state-store/camel-state-store/src/main/java/org/apache/camel/component/statestore/StateStoreEndpoint.java @@ -20,6 +20,9 @@ import org.apache.camel.Category; import org.apache.camel.Consumer; import org.apache.camel.Processor; import org.apache.camel.Producer; +import org.apache.camel.spi.BodyType; +import org.apache.camel.spi.BodyType.Carrier; +import org.apache.camel.spi.BodyTypes; import org.apache.camel.spi.KeyValueRepository; import org.apache.camel.spi.Metadata; import org.apache.camel.spi.UriEndpoint; @@ -36,6 +39,25 @@ import org.apache.camel.support.DefaultEndpoint; syntax = "state-store:storeName", producerOnly = true, category = { Category.CACHE }, headersClass = StateStoreConstants.class) +@BodyTypes(producerIn = @BodyType(value = Carrier.ANY, + description = "The value to store for put and putIfAbsent, as it is: a stream is stored as" + + " the stream and shared by the later gets, so convert it to text or bytes" + + " first. The other operations do not use the body"), + producerOut = @BodyType(value = Carrier.UNKNOWN, + byOption = { + @BodyType.When(option = "operation", value = "contains", carriers = Carrier.VALUE, + javaType = "java.lang.Boolean"), + @BodyType.When(option = "operation", value = "keys", carriers = Carrier.LIST, + javaType = "java.util.Set<java.lang.String>"), + @BodyType.When(option = "operation", value = "size", carriers = Carrier.VALUE, + javaType = "java.lang.Integer"), + @BodyType.When(option = "operation", value = "clear", carriers = Carrier.NULL) }, + description = "By the operation, which the CamelStateStoreOperation header can set: the" + + " stored value for get, the previous value for put, the value already there" + + " for putIfAbsent and the removed value for delete, each no body when there" + + " is none; a Boolean for contains, the Set of the keys for keys, the count" + + " for size and no body for clear. The value is the object the backend gives" + + " back: the in-memory one the object stored, another may give a copy")) public class StateStoreEndpoint extends DefaultEndpoint { @UriPath(description = "The name of the state store")
