This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new eb240551d4b3 chore: camel-odata - show the documentation examples in
Java, XML and YAML
eb240551d4b3 is described below
commit eb240551d4b3e45c6c1282e5754dd40712e7829d
Author: Claus Ibsen <[email protected]>
AuthorDate: Fri Oct 2 12:50:20 2026 +0200
chore: camel-odata - show the documentation examples in Java, XML and YAML
Follow-up to #27168: every Java example on the OData component page is now
shown as tabs with Java, XML and canonical YAML (Authorization headers,
ETags, fetching a collection, and reading, creating, updating and deleting
an entity).
The collection example split over body(), but the response body is the
parsed OData JSON object as a Map, so it split over the map entries. It
now splits ${body[value]}, which holds the entities. The create and update
examples send a JSON String body, which works in all three DSLs, and the
text explains how String and other bodies are sent. Also fixed the
indentation of the examples and regenerated the catalog copy of the page.
Closes #27275
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
---
.../apache/camel/catalog/docs/odata-component.adoc | 420 +++++++++++++++++++--
.../camel-odata/src/main/docs/odata-component.adoc | 420 +++++++++++++++++++--
2 files changed, 770 insertions(+), 70 deletions(-)
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/odata-component.adoc
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/odata-component.adoc
index 2811be92b3ee..3a11d856ebe7 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/odata-component.adoc
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/odata-component.adoc
@@ -193,12 +193,42 @@ If the upstream authorization credentials must not be
forwarded, remove the head
For example:
+[tabs]
+====
+Java::
++
[source,java]
----
from("platform-http:/products")
-.removeHeader("Authorization")
-.to("odata:http://my-odata-service/odata/Products");
+ .removeHeader("Authorization")
+ .to("odata:http://my-odata-service/odata/Products");
+----
+
+XML::
++
+[source,xml]
+----
+<route>
+ <from uri="platform-http:/products"/>
+ <removeHeader name="Authorization"/>
+ <to uri="odata:http://my-odata-service/odata/Products"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
----
+- route:
+ from:
+ uri: platform-http:/products
+ steps:
+ - removeHeader:
+ name: Authorization
+ - to:
+ uri: odata:http://my-odata-service/odata/Products
+----
+====
== Query Options
@@ -263,13 +293,48 @@ Bearer token authentication can be configured using the
`authBearerToken` option
Authentication can also be supplied dynamically using the message-level
`Authorization` header:
+[tabs]
+====
+Java::
++
[source,java]
----
from("direct:getProducts")
-.setHeader("Authorization", constant("Bearer my-token"))
-.to("odata:http://my-odata-service/odata/Products");
+ .setHeader("Authorization", constant("Bearer my-token"))
+ .to("odata:http://my-odata-service/odata/Products");
----
+XML::
++
+[source,xml]
+----
+<route>
+ <from uri="direct:getProducts"/>
+ <setHeader name="Authorization">
+ <constant>Bearer my-token</constant>
+ </setHeader>
+ <to uri="odata:http://my-odata-service/odata/Products"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+ from:
+ uri: direct:getProducts
+ steps:
+ - setHeader:
+ name: Authorization
+ expression:
+ constant:
+ expression: "Bearer my-token"
+ - to:
+ uri: odata:http://my-odata-service/odata/Products
+----
+====
+
When an `Authorization` header is present on the message, it takes precedence
over endpoint authentication.
Take care when forwarding exchanges from an upstream HTTP consumer because the
incoming `Authorization` header may be forwarded to the OData service.
@@ -282,16 +347,74 @@ An ETag supplied in `CamelODataETag` is sent to the
service using the HTTP `If-M
For example:
+[tabs]
+====
+Java::
++
[source,java]
----
from("direct:updateProduct")
-.setHeader("CamelODataOperation", constant("UPDATE"))
-.setHeader("CamelODataKey", constant("101"))
-.setHeader("CamelODataETag", constant("W/\"etag-value\""))
-.setBody(constant(Map.of("Price", 249.99)))
-.to("odata:http://my-odata-service/odata/Products");
+ .setHeader("CamelODataOperation", constant("UPDATE"))
+ .setHeader("CamelODataKey", constant("101"))
+ .setHeader("CamelODataETag", constant("W/\"etag-value\""))
+ .setBody(constant("{\"Price\": 249.99}"))
+ .to("odata:http://my-odata-service/odata/Products");
----
+XML::
++
+[source,xml]
+----
+<route>
+ <from uri="direct:updateProduct"/>
+ <setHeader name="CamelODataOperation">
+ <constant>UPDATE</constant>
+ </setHeader>
+ <setHeader name="CamelODataKey">
+ <constant>101</constant>
+ </setHeader>
+ <setHeader name="CamelODataETag">
+ <constant>W/"etag-value"</constant>
+ </setHeader>
+ <setBody>
+ <constant>{"Price": 249.99}</constant>
+ </setBody>
+ <to uri="odata:http://my-odata-service/odata/Products"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+ from:
+ uri: direct:updateProduct
+ steps:
+ - setHeader:
+ name: CamelODataOperation
+ expression:
+ constant:
+ expression: UPDATE
+ - setHeader:
+ name: CamelODataKey
+ expression:
+ constant:
+ expression: "101"
+ - setHeader:
+ name: CamelODataETag
+ expression:
+ constant:
+ expression: 'W/"etag-value"'
+ - setBody:
+ expression:
+ constant:
+ expression: '{"Price": 249.99}'
+ - to:
+ uri: odata:http://my-odata-service/odata/Products
+----
+====
+
When the service returns an HTTP `ETag` header, the value is exposed as
`CamelODataETag`.
The component also recognizes the OData `@odata.etag` property in a JSON
response.
@@ -305,14 +428,14 @@ For example, a response containing:
[source,json]
----
{
-"@odata.count": 42,
-"@odata.nextLink": "https://my-odata-service/odata/Products?$skip=10",
-"value": [
-{
-"ID": 1,
-"Name": "Laptop"
-}
-]
+ "@odata.count": 42,
+ "@odata.nextLink": "https://my-odata-service/odata/Products?$skip=10",
+ "value": [
+ {
+ "ID": 1,
+ "Name": "Laptop"
+ }
+ ]
}
----
@@ -338,26 +461,109 @@ Refer to the generated endpoint options section for
details about configuring SS
=== Fetching a Collection
+[tabs]
+====
+Java::
++
[source,java]
----
from("direct:getProducts")
-.to("odata:http://my-odata-service/odata/Products")
-.split(body())
-.to("log:product");
+ .to("odata:http://my-odata-service/odata/Products")
+ .split(simple("${body[value]}"))
+ .to("log:product")
+ .end();
----
+XML::
++
+[source,xml]
+----
+<route>
+ <from uri="direct:getProducts"/>
+ <to uri="odata:http://my-odata-service/odata/Products"/>
+ <split>
+ <simple>${body[value]}</simple>
+ <to uri="log:product"/>
+ </split>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+ from:
+ uri: direct:getProducts
+ steps:
+ - to:
+ uri: odata:http://my-odata-service/odata/Products
+ - split:
+ expression:
+ simple:
+ expression: "${body[value]}"
+ steps:
+ - to:
+ uri: log:product
+----
+====
+
The default operation is `READ_SET`, so no operation header is required.
+The response body is the parsed JSON object as a `Map`, and the entities are
in its `value` entry.
=== Reading a Single Entity
+[tabs]
+====
+Java::
++
[source,java]
----
from("direct:getProductById")
-.setHeader("CamelODataOperation", constant("READ_ENTRY"))
-.setHeader("CamelODataKey", constant("101"))
-.to("odata:http://my-odata-service/odata/Products");
+ .setHeader("CamelODataOperation", constant("READ_ENTRY"))
+ .setHeader("CamelODataKey", constant("101"))
+ .to("odata:http://my-odata-service/odata/Products");
----
+XML::
++
+[source,xml]
+----
+<route>
+ <from uri="direct:getProductById"/>
+ <setHeader name="CamelODataOperation">
+ <constant>READ_ENTRY</constant>
+ </setHeader>
+ <setHeader name="CamelODataKey">
+ <constant>101</constant>
+ </setHeader>
+ <to uri="odata:http://my-odata-service/odata/Products"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+ from:
+ uri: direct:getProductById
+ steps:
+ - setHeader:
+ name: CamelODataOperation
+ expression:
+ constant:
+ expression: READ_ENTRY
+ - setHeader:
+ name: CamelODataKey
+ expression:
+ constant:
+ expression: "101"
+ - to:
+ uri: odata:http://my-odata-service/odata/Products
+----
+====
+
This results in a request to:
[source,text]
@@ -367,41 +573,185 @@ http://my-odata-service/odata/Products(101)
=== Creating an Entity
+[tabs]
+====
+Java::
++
[source,java]
----
from("direct:createProduct")
-.setHeader("CamelODataOperation", constant("CREATE"))
-.setBody(constant(Map.of("Name", "Tablet", "Price", 299.99)))
-.to("odata:http://my-odata-service/odata/Products");
+ .setHeader("CamelODataOperation", constant("CREATE"))
+ .setBody(constant("{\"Name\": \"Tablet\", \"Price\": 299.99}"))
+ .to("odata:http://my-odata-service/odata/Products");
+----
+
+XML::
++
+[source,xml]
+----
+<route>
+ <from uri="direct:createProduct"/>
+ <setHeader name="CamelODataOperation">
+ <constant>CREATE</constant>
+ </setHeader>
+ <setBody>
+ <constant>{"Name": "Tablet", "Price": 299.99}</constant>
+ </setBody>
+ <to uri="odata:http://my-odata-service/odata/Products"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+ from:
+ uri: direct:createProduct
+ steps:
+ - setHeader:
+ name: CamelODataOperation
+ expression:
+ constant:
+ expression: CREATE
+ - setBody:
+ expression:
+ constant:
+ expression: '{"Name": "Tablet", "Price": 299.99}'
+ - to:
+ uri: odata:http://my-odata-service/odata/Products
----
+====
-The component serializes the message body as JSON and sends it using HTTP
`POST`.
+The component sends the message body using HTTP `POST`. A `String` body is
sent as is, so it must be JSON; any other body,
+such as a `Map`, is serialized to JSON.
=== Updating an Entity
+[tabs]
+====
+Java::
++
[source,java]
----
from("direct:updateProduct")
-.setHeader("CamelODataOperation", constant("UPDATE"))
-.setHeader("CamelODataKey", constant("101"))
-.setHeader("CamelODataETag", constant("W/\"etag-value\""))
-.setBody(constant(Map.of("Price", 249.99)))
-.to("odata:http://my-odata-service/odata/Products");
+ .setHeader("CamelODataOperation", constant("UPDATE"))
+ .setHeader("CamelODataKey", constant("101"))
+ .setHeader("CamelODataETag", constant("W/\"etag-value\""))
+ .setBody(constant("{\"Price\": 249.99}"))
+ .to("odata:http://my-odata-service/odata/Products");
----
+XML::
++
+[source,xml]
+----
+<route>
+ <from uri="direct:updateProduct"/>
+ <setHeader name="CamelODataOperation">
+ <constant>UPDATE</constant>
+ </setHeader>
+ <setHeader name="CamelODataKey">
+ <constant>101</constant>
+ </setHeader>
+ <setHeader name="CamelODataETag">
+ <constant>W/"etag-value"</constant>
+ </setHeader>
+ <setBody>
+ <constant>{"Price": 249.99}</constant>
+ </setBody>
+ <to uri="odata:http://my-odata-service/odata/Products"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+ from:
+ uri: direct:updateProduct
+ steps:
+ - setHeader:
+ name: CamelODataOperation
+ expression:
+ constant:
+ expression: UPDATE
+ - setHeader:
+ name: CamelODataKey
+ expression:
+ constant:
+ expression: "101"
+ - setHeader:
+ name: CamelODataETag
+ expression:
+ constant:
+ expression: 'W/"etag-value"'
+ - setBody:
+ expression:
+ constant:
+ expression: '{"Price": 249.99}'
+ - to:
+ uri: odata:http://my-odata-service/odata/Products
+----
+====
+
The component sends the update using HTTP `PATCH`.
When an ETag is supplied, it is sent using the HTTP `If-Match` header.
=== Deleting an Entity
+[tabs]
+====
+Java::
++
[source,java]
----
from("direct:deleteProduct")
-.setHeader("CamelODataOperation", constant("DELETE"))
-.setHeader("CamelODataKey", constant("101"))
-.to("odata:http://my-odata-service/odata/Products");
+ .setHeader("CamelODataOperation", constant("DELETE"))
+ .setHeader("CamelODataKey", constant("101"))
+ .to("odata:http://my-odata-service/odata/Products");
+----
+
+XML::
++
+[source,xml]
+----
+<route>
+ <from uri="direct:deleteProduct"/>
+ <setHeader name="CamelODataOperation">
+ <constant>DELETE</constant>
+ </setHeader>
+ <setHeader name="CamelODataKey">
+ <constant>101</constant>
+ </setHeader>
+ <to uri="odata:http://my-odata-service/odata/Products"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+ from:
+ uri: direct:deleteProduct
+ steps:
+ - setHeader:
+ name: CamelODataOperation
+ expression:
+ constant:
+ expression: DELETE
+ - setHeader:
+ name: CamelODataKey
+ expression:
+ constant:
+ expression: "101"
+ - to:
+ uri: odata:http://my-odata-service/odata/Products
----
+====
The component sends an HTTP `DELETE` request for the specified entity.
diff --git a/components/camel-odata/src/main/docs/odata-component.adoc
b/components/camel-odata/src/main/docs/odata-component.adoc
index 2811be92b3ee..3a11d856ebe7 100644
--- a/components/camel-odata/src/main/docs/odata-component.adoc
+++ b/components/camel-odata/src/main/docs/odata-component.adoc
@@ -193,12 +193,42 @@ If the upstream authorization credentials must not be
forwarded, remove the head
For example:
+[tabs]
+====
+Java::
++
[source,java]
----
from("platform-http:/products")
-.removeHeader("Authorization")
-.to("odata:http://my-odata-service/odata/Products");
+ .removeHeader("Authorization")
+ .to("odata:http://my-odata-service/odata/Products");
+----
+
+XML::
++
+[source,xml]
+----
+<route>
+ <from uri="platform-http:/products"/>
+ <removeHeader name="Authorization"/>
+ <to uri="odata:http://my-odata-service/odata/Products"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
----
+- route:
+ from:
+ uri: platform-http:/products
+ steps:
+ - removeHeader:
+ name: Authorization
+ - to:
+ uri: odata:http://my-odata-service/odata/Products
+----
+====
== Query Options
@@ -263,13 +293,48 @@ Bearer token authentication can be configured using the
`authBearerToken` option
Authentication can also be supplied dynamically using the message-level
`Authorization` header:
+[tabs]
+====
+Java::
++
[source,java]
----
from("direct:getProducts")
-.setHeader("Authorization", constant("Bearer my-token"))
-.to("odata:http://my-odata-service/odata/Products");
+ .setHeader("Authorization", constant("Bearer my-token"))
+ .to("odata:http://my-odata-service/odata/Products");
----
+XML::
++
+[source,xml]
+----
+<route>
+ <from uri="direct:getProducts"/>
+ <setHeader name="Authorization">
+ <constant>Bearer my-token</constant>
+ </setHeader>
+ <to uri="odata:http://my-odata-service/odata/Products"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+ from:
+ uri: direct:getProducts
+ steps:
+ - setHeader:
+ name: Authorization
+ expression:
+ constant:
+ expression: "Bearer my-token"
+ - to:
+ uri: odata:http://my-odata-service/odata/Products
+----
+====
+
When an `Authorization` header is present on the message, it takes precedence
over endpoint authentication.
Take care when forwarding exchanges from an upstream HTTP consumer because the
incoming `Authorization` header may be forwarded to the OData service.
@@ -282,16 +347,74 @@ An ETag supplied in `CamelODataETag` is sent to the
service using the HTTP `If-M
For example:
+[tabs]
+====
+Java::
++
[source,java]
----
from("direct:updateProduct")
-.setHeader("CamelODataOperation", constant("UPDATE"))
-.setHeader("CamelODataKey", constant("101"))
-.setHeader("CamelODataETag", constant("W/\"etag-value\""))
-.setBody(constant(Map.of("Price", 249.99)))
-.to("odata:http://my-odata-service/odata/Products");
+ .setHeader("CamelODataOperation", constant("UPDATE"))
+ .setHeader("CamelODataKey", constant("101"))
+ .setHeader("CamelODataETag", constant("W/\"etag-value\""))
+ .setBody(constant("{\"Price\": 249.99}"))
+ .to("odata:http://my-odata-service/odata/Products");
----
+XML::
++
+[source,xml]
+----
+<route>
+ <from uri="direct:updateProduct"/>
+ <setHeader name="CamelODataOperation">
+ <constant>UPDATE</constant>
+ </setHeader>
+ <setHeader name="CamelODataKey">
+ <constant>101</constant>
+ </setHeader>
+ <setHeader name="CamelODataETag">
+ <constant>W/"etag-value"</constant>
+ </setHeader>
+ <setBody>
+ <constant>{"Price": 249.99}</constant>
+ </setBody>
+ <to uri="odata:http://my-odata-service/odata/Products"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+ from:
+ uri: direct:updateProduct
+ steps:
+ - setHeader:
+ name: CamelODataOperation
+ expression:
+ constant:
+ expression: UPDATE
+ - setHeader:
+ name: CamelODataKey
+ expression:
+ constant:
+ expression: "101"
+ - setHeader:
+ name: CamelODataETag
+ expression:
+ constant:
+ expression: 'W/"etag-value"'
+ - setBody:
+ expression:
+ constant:
+ expression: '{"Price": 249.99}'
+ - to:
+ uri: odata:http://my-odata-service/odata/Products
+----
+====
+
When the service returns an HTTP `ETag` header, the value is exposed as
`CamelODataETag`.
The component also recognizes the OData `@odata.etag` property in a JSON
response.
@@ -305,14 +428,14 @@ For example, a response containing:
[source,json]
----
{
-"@odata.count": 42,
-"@odata.nextLink": "https://my-odata-service/odata/Products?$skip=10",
-"value": [
-{
-"ID": 1,
-"Name": "Laptop"
-}
-]
+ "@odata.count": 42,
+ "@odata.nextLink": "https://my-odata-service/odata/Products?$skip=10",
+ "value": [
+ {
+ "ID": 1,
+ "Name": "Laptop"
+ }
+ ]
}
----
@@ -338,26 +461,109 @@ Refer to the generated endpoint options section for
details about configuring SS
=== Fetching a Collection
+[tabs]
+====
+Java::
++
[source,java]
----
from("direct:getProducts")
-.to("odata:http://my-odata-service/odata/Products")
-.split(body())
-.to("log:product");
+ .to("odata:http://my-odata-service/odata/Products")
+ .split(simple("${body[value]}"))
+ .to("log:product")
+ .end();
----
+XML::
++
+[source,xml]
+----
+<route>
+ <from uri="direct:getProducts"/>
+ <to uri="odata:http://my-odata-service/odata/Products"/>
+ <split>
+ <simple>${body[value]}</simple>
+ <to uri="log:product"/>
+ </split>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+ from:
+ uri: direct:getProducts
+ steps:
+ - to:
+ uri: odata:http://my-odata-service/odata/Products
+ - split:
+ expression:
+ simple:
+ expression: "${body[value]}"
+ steps:
+ - to:
+ uri: log:product
+----
+====
+
The default operation is `READ_SET`, so no operation header is required.
+The response body is the parsed JSON object as a `Map`, and the entities are
in its `value` entry.
=== Reading a Single Entity
+[tabs]
+====
+Java::
++
[source,java]
----
from("direct:getProductById")
-.setHeader("CamelODataOperation", constant("READ_ENTRY"))
-.setHeader("CamelODataKey", constant("101"))
-.to("odata:http://my-odata-service/odata/Products");
+ .setHeader("CamelODataOperation", constant("READ_ENTRY"))
+ .setHeader("CamelODataKey", constant("101"))
+ .to("odata:http://my-odata-service/odata/Products");
----
+XML::
++
+[source,xml]
+----
+<route>
+ <from uri="direct:getProductById"/>
+ <setHeader name="CamelODataOperation">
+ <constant>READ_ENTRY</constant>
+ </setHeader>
+ <setHeader name="CamelODataKey">
+ <constant>101</constant>
+ </setHeader>
+ <to uri="odata:http://my-odata-service/odata/Products"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+ from:
+ uri: direct:getProductById
+ steps:
+ - setHeader:
+ name: CamelODataOperation
+ expression:
+ constant:
+ expression: READ_ENTRY
+ - setHeader:
+ name: CamelODataKey
+ expression:
+ constant:
+ expression: "101"
+ - to:
+ uri: odata:http://my-odata-service/odata/Products
+----
+====
+
This results in a request to:
[source,text]
@@ -367,41 +573,185 @@ http://my-odata-service/odata/Products(101)
=== Creating an Entity
+[tabs]
+====
+Java::
++
[source,java]
----
from("direct:createProduct")
-.setHeader("CamelODataOperation", constant("CREATE"))
-.setBody(constant(Map.of("Name", "Tablet", "Price", 299.99)))
-.to("odata:http://my-odata-service/odata/Products");
+ .setHeader("CamelODataOperation", constant("CREATE"))
+ .setBody(constant("{\"Name\": \"Tablet\", \"Price\": 299.99}"))
+ .to("odata:http://my-odata-service/odata/Products");
+----
+
+XML::
++
+[source,xml]
+----
+<route>
+ <from uri="direct:createProduct"/>
+ <setHeader name="CamelODataOperation">
+ <constant>CREATE</constant>
+ </setHeader>
+ <setBody>
+ <constant>{"Name": "Tablet", "Price": 299.99}</constant>
+ </setBody>
+ <to uri="odata:http://my-odata-service/odata/Products"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+ from:
+ uri: direct:createProduct
+ steps:
+ - setHeader:
+ name: CamelODataOperation
+ expression:
+ constant:
+ expression: CREATE
+ - setBody:
+ expression:
+ constant:
+ expression: '{"Name": "Tablet", "Price": 299.99}'
+ - to:
+ uri: odata:http://my-odata-service/odata/Products
----
+====
-The component serializes the message body as JSON and sends it using HTTP
`POST`.
+The component sends the message body using HTTP `POST`. A `String` body is
sent as is, so it must be JSON; any other body,
+such as a `Map`, is serialized to JSON.
=== Updating an Entity
+[tabs]
+====
+Java::
++
[source,java]
----
from("direct:updateProduct")
-.setHeader("CamelODataOperation", constant("UPDATE"))
-.setHeader("CamelODataKey", constant("101"))
-.setHeader("CamelODataETag", constant("W/\"etag-value\""))
-.setBody(constant(Map.of("Price", 249.99)))
-.to("odata:http://my-odata-service/odata/Products");
+ .setHeader("CamelODataOperation", constant("UPDATE"))
+ .setHeader("CamelODataKey", constant("101"))
+ .setHeader("CamelODataETag", constant("W/\"etag-value\""))
+ .setBody(constant("{\"Price\": 249.99}"))
+ .to("odata:http://my-odata-service/odata/Products");
----
+XML::
++
+[source,xml]
+----
+<route>
+ <from uri="direct:updateProduct"/>
+ <setHeader name="CamelODataOperation">
+ <constant>UPDATE</constant>
+ </setHeader>
+ <setHeader name="CamelODataKey">
+ <constant>101</constant>
+ </setHeader>
+ <setHeader name="CamelODataETag">
+ <constant>W/"etag-value"</constant>
+ </setHeader>
+ <setBody>
+ <constant>{"Price": 249.99}</constant>
+ </setBody>
+ <to uri="odata:http://my-odata-service/odata/Products"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+ from:
+ uri: direct:updateProduct
+ steps:
+ - setHeader:
+ name: CamelODataOperation
+ expression:
+ constant:
+ expression: UPDATE
+ - setHeader:
+ name: CamelODataKey
+ expression:
+ constant:
+ expression: "101"
+ - setHeader:
+ name: CamelODataETag
+ expression:
+ constant:
+ expression: 'W/"etag-value"'
+ - setBody:
+ expression:
+ constant:
+ expression: '{"Price": 249.99}'
+ - to:
+ uri: odata:http://my-odata-service/odata/Products
+----
+====
+
The component sends the update using HTTP `PATCH`.
When an ETag is supplied, it is sent using the HTTP `If-Match` header.
=== Deleting an Entity
+[tabs]
+====
+Java::
++
[source,java]
----
from("direct:deleteProduct")
-.setHeader("CamelODataOperation", constant("DELETE"))
-.setHeader("CamelODataKey", constant("101"))
-.to("odata:http://my-odata-service/odata/Products");
+ .setHeader("CamelODataOperation", constant("DELETE"))
+ .setHeader("CamelODataKey", constant("101"))
+ .to("odata:http://my-odata-service/odata/Products");
+----
+
+XML::
++
+[source,xml]
+----
+<route>
+ <from uri="direct:deleteProduct"/>
+ <setHeader name="CamelODataOperation">
+ <constant>DELETE</constant>
+ </setHeader>
+ <setHeader name="CamelODataKey">
+ <constant>101</constant>
+ </setHeader>
+ <to uri="odata:http://my-odata-service/odata/Products"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+ from:
+ uri: direct:deleteProduct
+ steps:
+ - setHeader:
+ name: CamelODataOperation
+ expression:
+ constant:
+ expression: DELETE
+ - setHeader:
+ name: CamelODataKey
+ expression:
+ constant:
+ expression: "101"
+ - to:
+ uri: odata:http://my-odata-service/odata/Products
----
+====
The component sends an HTTP `DELETE` request for the specified entity.