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 2a57a18cad45 CAMEL-26163: camel-wordpress - convert a JSON text or Map 
body to a Post or User (#28939)
2a57a18cad45 is described below

commit 2a57a18cad453e542eba923e973e29de462dc5d9
Author: Claus Ibsen <[email protected]>
AuthorDate: Mon Nov 2 20:49:59 2026 +0100

    CAMEL-26163: camel-wordpress - convert a JSON text or Map body to a Post or 
User (#28939)
    
    …ost or User
    
    The post and user producers read the body with getBody(Post.class) and
    getBody(User.class). There is no converter from JSON text or a Map, so the
    body became null and the service failed with a bare NullPointerException
    ("Please define an object to create").
    
    A JSON text (String, byte[] or InputStream) or a Map body is now converted
    to the Post or User class with Jackson, like the WordPress answers. Any
    other body fails with an InvalidPayloadException that names the type.
    The catalog body types and the component doc are updated.
    
    Co-Authored-By: Claude Opus 5.5 <[email protected]>
    Signed-off-by: Claus Ibsen <[email protected]>
---
 .../apache/camel/catalog/components/wordpress.json |  2 +-
 .../camel/catalog/docs/wordpress-component.adoc    |  5 ++
 .../camel/component/wordpress/wordpress.json       |  2 +-
 .../src/main/docs/wordpress-component.adoc         |  5 ++
 .../component/wordpress/WordpressEndpoint.java     |  6 +--
 .../producer/AbstractWordpressProducer.java        | 37 ++++++++++++-
 .../wordpress/producer/WordpressPostProducer.java  |  8 +--
 .../wordpress/producer/WordpressUserProducer.java  | 10 ++--
 .../wordpress/WordpressPostOperationTest.java      | 63 ++++++++++++++++++++++
 .../wordpress/WordpressUserOperationTest.java      | 46 ++++++++++++++++
 .../test/WordpressServerHttpRequestHandler.java    | 20 +++++++
 11 files changed, 188 insertions(+), 16 deletions(-)

diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/wordpress.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/wordpress.json
index 0c421197ddc7..6e98725b4abd 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/wordpress.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/wordpress.json
@@ -41,7 +41,7 @@
   },
   "bodyTypes": {
     "consumerOut": { "carriers": [ "pojo" ], "byOption": [ { "option": 
"operation", "value": "post", "carriers": [ "pojo" ], "javaType": 
"org.apache.camel.component.wordpress.api.model.Post" }, { "option": 
"operation", "value": "user", "carriers": [ "pojo" ], "javaType": 
"org.apache.camel.component.wordpress.api.model.User" } ], "description": "One 
message per post or user of the search at every poll, the same ones again on 
the next poll, or the one of the id option: a Post or a User of  [...]
-    "producerIn": { "carriers": [ "pojo" ], "byOption": [ { "option": 
"operationDetail", "value": "delete", "carriers": [ "any" ] } ], "description": 
"The Post or User (org.apache.camel.component.wordpress.api.model) to create, 
or to update with the id option: JSON text, a Map or another body fails, so 
unmarshal it to the class first. A delete does not read the body" },
+    "producerIn": { "carriers": [ "pojo", "text", "bytes", "stream", "map" ], 
"byOption": [ { "option": "operationDetail", "value": "delete", "carriers": [ 
"any" ] } ], "description": "The Post or User 
(org.apache.camel.component.wordpress.api.model) to create, or to update with 
the id option. JSON text or a Map is converted to the class with Jackson; 
another body fails. A delete does not read the body" },
     "producerOut": { "carriers": [ "pojo" ], "description": "The Post or User 
that WordPress answers: the one created, updated or deleted" }
   },
   "properties": {
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/wordpress-component.adoc
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/wordpress-component.adoc
index 8444a9140264..c01ae96dfe80 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/wordpress-component.adoc
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/wordpress-component.adoc
@@ -96,6 +96,11 @@ To be able to write, you must have an authorized user 
credentials (see Authentic
 - `wordpress:post?id=1` updates a post based on data 
`org.apache.camel.component.wordpress.api.model.Post` from the message body.  
 - `wordpress:post:delete?id=1` deletes a specific post
 
+The message body can also be JSON text (a `String`, `byte[]` or `InputStream`) 
or a `Map`, with the same field names
+as the `Post` or `User` that WordPress answers (for example `first_name` for a 
user).
+It is converted to the `Post` or `User` class with Jackson.
+Any other body fails with an `InvalidPayloadException`.
+
 === Authentication
 
 Producers that perform write operations, e.g., creating a new post,
diff --git 
a/components/camel-wordpress/src/generated/resources/META-INF/org/apache/camel/component/wordpress/wordpress.json
 
b/components/camel-wordpress/src/generated/resources/META-INF/org/apache/camel/component/wordpress/wordpress.json
index 0c421197ddc7..6e98725b4abd 100644
--- 
a/components/camel-wordpress/src/generated/resources/META-INF/org/apache/camel/component/wordpress/wordpress.json
+++ 
b/components/camel-wordpress/src/generated/resources/META-INF/org/apache/camel/component/wordpress/wordpress.json
@@ -41,7 +41,7 @@
   },
   "bodyTypes": {
     "consumerOut": { "carriers": [ "pojo" ], "byOption": [ { "option": 
"operation", "value": "post", "carriers": [ "pojo" ], "javaType": 
"org.apache.camel.component.wordpress.api.model.Post" }, { "option": 
"operation", "value": "user", "carriers": [ "pojo" ], "javaType": 
"org.apache.camel.component.wordpress.api.model.User" } ], "description": "One 
message per post or user of the search at every poll, the same ones again on 
the next poll, or the one of the id option: a Post or a User of  [...]
-    "producerIn": { "carriers": [ "pojo" ], "byOption": [ { "option": 
"operationDetail", "value": "delete", "carriers": [ "any" ] } ], "description": 
"The Post or User (org.apache.camel.component.wordpress.api.model) to create, 
or to update with the id option: JSON text, a Map or another body fails, so 
unmarshal it to the class first. A delete does not read the body" },
+    "producerIn": { "carriers": [ "pojo", "text", "bytes", "stream", "map" ], 
"byOption": [ { "option": "operationDetail", "value": "delete", "carriers": [ 
"any" ] } ], "description": "The Post or User 
(org.apache.camel.component.wordpress.api.model) to create, or to update with 
the id option. JSON text or a Map is converted to the class with Jackson; 
another body fails. A delete does not read the body" },
     "producerOut": { "carriers": [ "pojo" ], "description": "The Post or User 
that WordPress answers: the one created, updated or deleted" }
   },
   "properties": {
diff --git a/components/camel-wordpress/src/main/docs/wordpress-component.adoc 
b/components/camel-wordpress/src/main/docs/wordpress-component.adoc
index 8444a9140264..c01ae96dfe80 100644
--- a/components/camel-wordpress/src/main/docs/wordpress-component.adoc
+++ b/components/camel-wordpress/src/main/docs/wordpress-component.adoc
@@ -96,6 +96,11 @@ To be able to write, you must have an authorized user 
credentials (see Authentic
 - `wordpress:post?id=1` updates a post based on data 
`org.apache.camel.component.wordpress.api.model.Post` from the message body.  
 - `wordpress:post:delete?id=1` deletes a specific post
 
+The message body can also be JSON text (a `String`, `byte[]` or `InputStream`) 
or a `Map`, with the same field names
+as the `Post` or `User` that WordPress answers (for example `first_name` for a 
user).
+It is converted to the `Post` or `User` class with Jackson.
+Any other body fails with an `InvalidPayloadException`.
+
 === Authentication
 
 Producers that perform write operations, e.g., creating a new post,
diff --git 
a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/WordpressEndpoint.java
 
b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/WordpressEndpoint.java
index 9fbfbd234030..d2877c0b6df0 100644
--- 
a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/WordpressEndpoint.java
+++ 
b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/WordpressEndpoint.java
@@ -60,12 +60,12 @@ import org.apache.camel.util.PropertiesHelper;
                                    description = "One message per post or user 
of the search at every poll, the same ones again"
                                                  + " on the next poll, or the 
one of the id option: a Post or a User of"
                                                  + " 
org.apache.camel.component.wordpress.api.model"),
-           producerIn = @BodyType(value = Carrier.POJO,
+           producerIn = @BodyType(value = { Carrier.POJO, Carrier.TEXT, 
Carrier.BYTES, Carrier.STREAM, Carrier.MAP },
                                   byOption = @BodyType.When(option = 
"operationDetail", value = "delete",
                                                             carriers = 
Carrier.ANY),
                                   description = "The Post or User 
(org.apache.camel.component.wordpress.api.model) to create, or"
-                                                + " to update with the id 
option: JSON text, a Map or another body fails, so"
-                                                + " unmarshal it to the class 
first. A delete does not read the body"),
+                                                + " to update with the id 
option. JSON text or a Map is converted to the class"
+                                                + " with Jackson; another body 
fails. A delete does not read the body"),
            producerOut = @BodyType(value = Carrier.POJO,
                                    description = "The Post or User that 
WordPress answers: the one created, updated or deleted"))
 public class WordpressEndpoint extends DefaultEndpoint implements 
EndpointServiceLocation {
diff --git 
a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/producer/AbstractWordpressProducer.java
 
b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/producer/AbstractWordpressProducer.java
index b378629309f5..48c828f9bd0e 100644
--- 
a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/producer/AbstractWordpressProducer.java
+++ 
b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/producer/AbstractWordpressProducer.java
@@ -16,7 +16,13 @@
  */
 package org.apache.camel.component.wordpress.producer;
 
+import java.io.InputStream;
+import java.util.Map;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.camel.Exchange;
+import org.apache.camel.InvalidPayloadException;
+import org.apache.camel.Message;
 import org.apache.camel.component.wordpress.WordpressConfiguration;
 import org.apache.camel.component.wordpress.WordpressEndpoint;
 import org.apache.camel.component.wordpress.api.WordpressServiceProvider;
@@ -27,6 +33,7 @@ import org.slf4j.LoggerFactory;
 public abstract class AbstractWordpressProducer<T> extends DefaultProducer {
 
     private static final Logger LOG = 
LoggerFactory.getLogger(AbstractWordpressProducer.class);
+    private static final ObjectMapper MAPPER = new ObjectMapper();
 
     private WordpressConfiguration configuration;
 
@@ -61,9 +68,35 @@ public abstract class AbstractWordpressProducer<T> extends 
DefaultProducer {
         }
     }
 
-    protected abstract T processInsert(Exchange exchange);
+    /**
+     * Gets the message body as the given model class. A JSON text (String, 
byte[] or InputStream) or a Map is converted
+     * with Jackson, the same way as WordPress answers are read. Any other 
body that cannot be converted fails with an
+     * {@link InvalidPayloadException}.
+     */
+    protected <B> B getMandatoryBody(Exchange exchange, Class<B> type) throws 
InvalidPayloadException {
+        final Message in = exchange.getIn();
+        final Object body = in.getBody();
+        if (type.isInstance(body)) {
+            return type.cast(body);
+        }
+        try {
+            if (body instanceof Map<?, ?> map) {
+                return MAPPER.convertValue(map, type);
+            }
+            if (body instanceof String || body instanceof byte[] || body 
instanceof InputStream) {
+                return MAPPER.readValue(in.getMandatoryBody(String.class), 
type);
+            }
+        } catch (InvalidPayloadException e) {
+            throw e;
+        } catch (Exception e) {
+            throw new InvalidPayloadException(exchange, type, in, e);
+        }
+        return in.getMandatoryBody(type);
+    }
+
+    protected abstract T processInsert(Exchange exchange) throws Exception;
 
-    protected abstract T processUpdate(Exchange exchange);
+    protected abstract T processUpdate(Exchange exchange) throws Exception;
 
     protected abstract T processDelete(Exchange exchange);
 
diff --git 
a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/producer/WordpressPostProducer.java
 
b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/producer/WordpressPostProducer.java
index 8eecf3e302d1..dc0ed9de82c4 100644
--- 
a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/producer/WordpressPostProducer.java
+++ 
b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/producer/WordpressPostProducer.java
@@ -38,15 +38,15 @@ public class WordpressPostProducer extends 
AbstractWordpressProducer<Post> {
     }
 
     @Override
-    protected Post processInsert(Exchange exchange) {
+    protected Post processInsert(Exchange exchange) throws Exception {
         LOG.debug("Trying to create a new blog post with {}", 
exchange.getIn().getBody());
-        return servicePosts.create(exchange.getIn().getBody(Post.class));
+        return servicePosts.create(getMandatoryBody(exchange, Post.class));
     }
 
     @Override
-    protected Post processUpdate(Exchange exchange) {
+    protected Post processUpdate(Exchange exchange) throws Exception {
         LOG.debug("Trying to update the post {} with id {}", 
exchange.getIn().getBody(), this.getConfiguration().getId());
-        return servicePosts.update(this.getConfiguration().getId(), 
exchange.getIn().getBody(Post.class));
+        return servicePosts.update(this.getConfiguration().getId(), 
getMandatoryBody(exchange, Post.class));
     }
 
     @Override
diff --git 
a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/producer/WordpressUserProducer.java
 
b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/producer/WordpressUserProducer.java
index 85cba144733d..4d573f2f54b4 100644
--- 
a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/producer/WordpressUserProducer.java
+++ 
b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/producer/WordpressUserProducer.java
@@ -41,15 +41,15 @@ public class WordpressUserProducer extends 
AbstractWordpressProducer<User> {
     }
 
     @Override
-    protected User processUpdate(Exchange exchange) {
+    protected User processUpdate(Exchange exchange) throws Exception {
         LOG.debug("Trying to update the user {} with id {}", 
exchange.getIn().getBody(), this.getConfiguration().getId());
-        return serviceUsers.update(getConfiguration().getId(), 
exchange.getIn().getBody(User.class));
+        return serviceUsers.update(getConfiguration().getId(), 
getMandatoryBody(exchange, User.class));
     }
 
     @Override
-    protected User processInsert(Exchange exchange) {
-        LOG.debug("Trying to create a new user{}", exchange.getIn().getBody());
-        return serviceUsers.create(exchange.getIn().getBody(User.class));
+    protected User processInsert(Exchange exchange) throws Exception {
+        LOG.debug("Trying to create a new user {}", 
exchange.getIn().getBody());
+        return serviceUsers.create(getMandatoryBody(exchange, User.class));
     }
 
 }
diff --git 
a/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/WordpressPostOperationTest.java
 
b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/WordpressPostOperationTest.java
index 165d1b67db64..63c2fcddf6b6 100644
--- 
a/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/WordpressPostOperationTest.java
+++ 
b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/WordpressPostOperationTest.java
@@ -16,16 +16,24 @@
  */
 package org.apache.camel.component.wordpress;
 
+import java.util.Map;
+
+import org.apache.camel.CamelExecutionException;
+import org.apache.camel.InvalidPayloadException;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.component.wordpress.api.WordpressConstants;
 import org.apache.camel.component.wordpress.api.model.Content;
 import org.apache.camel.component.wordpress.api.model.Post;
 import org.apache.camel.component.wordpress.api.model.PublishableStatus;
+import 
org.apache.camel.component.wordpress.api.test.WordpressServerHttpRequestHandler;
 import org.junit.jupiter.api.Test;
 
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 public class WordpressPostOperationTest extends WordpressComponentTestSupport {
 
@@ -83,6 +91,61 @@ public class WordpressPostOperationTest extends 
WordpressComponentTestSupport {
         MockEndpoint.assertIsSatisfied(context);
     }
 
+    @Test
+    public void testInsertPostFromJsonText() throws InterruptedException {
+        MockEndpoint mock = getMockEndpoint("mock:resultInsert");
+        mock.expectedMessageCount(1);
+
+        final Post response = (Post) template.requestBody("direct:insertPost",
+                "{\"author\": 2, \"title\": {\"raw\": \"hello from json 
text\"}}");
+        assertThat(response.getId(), is(9));
+        assertThat(WordpressServerHttpRequestHandler.getLastRequestBody(), 
containsString("\"hello from json text\""));
+
+        MockEndpoint.assertIsSatisfied(context);
+    }
+
+    @Test
+    public void testInsertPostFromJsonBytes() throws InterruptedException {
+        MockEndpoint mock = getMockEndpoint("mock:resultInsert");
+        mock.expectedMessageCount(1);
+
+        final Post response = (Post) template.requestBody("direct:insertPost",
+                "{\"author\": 2, \"title\": {\"raw\": \"hello from json 
bytes\"}}".getBytes());
+        assertThat(response.getId(), is(9));
+        assertThat(WordpressServerHttpRequestHandler.getLastRequestBody(), 
containsString("\"hello from json bytes\""));
+
+        MockEndpoint.assertIsSatisfied(context);
+    }
+
+    @Test
+    public void testUpdatePostFromMap() throws InterruptedException {
+        MockEndpoint mock = getMockEndpoint("mock:resultUpdate");
+        mock.expectedMessageCount(1);
+
+        final Post response = (Post) template.requestBody("direct:updatePost",
+                Map.of("author", 2, "title", Map.of("raw", "hello from map")));
+        assertThat(response.getId(), is(9));
+        assertThat(WordpressServerHttpRequestHandler.getLastRequestBody(), 
containsString("\"hello from map\""));
+
+        MockEndpoint.assertIsSatisfied(context);
+    }
+
+    @Test
+    public void testInsertPostWithInvalidBody() throws InterruptedException {
+        MockEndpoint mock = getMockEndpoint("mock:resultInsert");
+        mock.expectedMessageCount(0);
+
+        CamelExecutionException e = assertThrows(CamelExecutionException.class,
+                () -> template.requestBody("direct:insertPost", 123));
+        assertThat(e.getCause(), instanceOf(InvalidPayloadException.class));
+
+        e = assertThrows(CamelExecutionException.class,
+                () -> template.requestBody("direct:insertPost", "not json"));
+        assertThat(e.getCause(), instanceOf(InvalidPayloadException.class));
+
+        MockEndpoint.assertIsSatisfied(context);
+    }
+
     @Test
     public void testDeletePost() throws InterruptedException {
         MockEndpoint mock = getMockEndpoint("mock:resultDelete");
diff --git 
a/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/WordpressUserOperationTest.java
 
b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/WordpressUserOperationTest.java
index f150861f90b1..b3c651403736 100644
--- 
a/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/WordpressUserOperationTest.java
+++ 
b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/WordpressUserOperationTest.java
@@ -16,13 +16,21 @@
  */
 package org.apache.camel.component.wordpress;
 
+import java.util.Map;
+
+import org.apache.camel.CamelExecutionException;
+import org.apache.camel.InvalidPayloadException;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.component.wordpress.api.model.User;
+import 
org.apache.camel.component.wordpress.api.test.WordpressServerHttpRequestHandler;
 import org.junit.jupiter.api.Test;
 
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 public class WordpressUserOperationTest extends WordpressComponentTestSupport {
 
@@ -93,6 +101,44 @@ public class WordpressUserOperationTest extends 
WordpressComponentTestSupport {
         MockEndpoint.assertIsSatisfied(context);
     }
 
+    @Test
+    public void testInsertUserFromJsonText() throws InterruptedException {
+        MockEndpoint mock = getMockEndpoint("mock:resultInsert");
+        mock.expectedMessageCount(1);
+
+        final User response = (User) template.requestBody("direct:insertUser",
+                "{\"username\": \"bdenbrough\", \"email\": 
\"[email protected]\", \"first_name\": \"Bill\"}");
+        assertThat(response.getId(), is(3));
+        assertThat(WordpressServerHttpRequestHandler.getLastRequestBody(), 
containsString("\"first_name\":\"Bill\""));
+
+        MockEndpoint.assertIsSatisfied(context);
+    }
+
+    @Test
+    public void testUpdateUserFromMap() throws InterruptedException {
+        MockEndpoint mock = getMockEndpoint("mock:resultUpdate");
+        mock.expectedMessageCount(1);
+
+        final User response = (User) template.requestBody("direct:updateUser",
+                Map.of("email", "[email protected]", "last_name", "Denbrough"));
+        assertThat(response.getId(), is(1));
+        assertThat(WordpressServerHttpRequestHandler.getLastRequestBody(), 
containsString("\"last_name\":\"Denbrough\""));
+
+        MockEndpoint.assertIsSatisfied(context);
+    }
+
+    @Test
+    public void testUpdateUserWithInvalidBody() throws InterruptedException {
+        MockEndpoint mock = getMockEndpoint("mock:resultUpdate");
+        mock.expectedMessageCount(0);
+
+        CamelExecutionException e = assertThrows(CamelExecutionException.class,
+                () -> template.requestBody("direct:updateUser", 123));
+        assertThat(e.getCause(), instanceOf(InvalidPayloadException.class));
+
+        MockEndpoint.assertIsSatisfied(context);
+    }
+
     @Override
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {
diff --git 
a/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/test/WordpressServerHttpRequestHandler.java
 
b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/test/WordpressServerHttpRequestHandler.java
index 9cb834cd42c7..b22e63825bf0 100644
--- 
a/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/test/WordpressServerHttpRequestHandler.java
+++ 
b/components/camel-wordpress/src/test/java/org/apache/camel/component/wordpress/api/test/WordpressServerHttpRequestHandler.java
@@ -27,8 +27,11 @@ import org.apache.hc.core5.http.ClassicHttpRequest;
 import org.apache.hc.core5.http.ClassicHttpResponse;
 import org.apache.hc.core5.http.ContentType;
 import org.apache.hc.core5.http.Header;
+import org.apache.hc.core5.http.HttpEntity;
 import org.apache.hc.core5.http.HttpStatus;
+import org.apache.hc.core5.http.ParseException;
 import org.apache.hc.core5.http.io.HttpRequestHandler;
+import org.apache.hc.core5.http.io.entity.EntityUtils;
 import org.apache.hc.core5.http.io.entity.StringEntity;
 import org.apache.hc.core5.http.message.HttpRequestWrapper;
 import org.apache.hc.core5.http.protocol.HttpContext;
@@ -42,6 +45,8 @@ public class WordpressServerHttpRequestHandler implements 
HttpRequestHandler {
 
     private static final Logger LOGGER = 
LoggerFactory.getLogger(WordpressServerHttpRequestHandler.class);
 
+    private static volatile String lastRequestBody;
+
     private final Map<String, String> mockResourceJsonResponse;
 
     public WordpressServerHttpRequestHandler(String mockResourceJsonResponse) {
@@ -63,12 +68,27 @@ public class WordpressServerHttpRequestHandler implements 
HttpRequestHandler {
             response.setEntity(new StringEntity("Forbidden", 
ContentType.TEXT_PLAIN));
             return;
         }
+        final HttpEntity entity = request.getEntity();
+        if (entity != null) {
+            try {
+                lastRequestBody = EntityUtils.toString(entity);
+            } catch (ParseException e) {
+                throw new IOException(e);
+            }
+        }
         final String responseBody = IOUtils
                 
.toString(this.getClass().getResourceAsStream(mockResourceJsonResponse.get(requestWrapper.getMethod())));
         response.setCode(HttpStatus.SC_OK);
         response.setEntity(new StringEntity(responseBody, 
ContentType.APPLICATION_JSON));
     }
 
+    /**
+     * The body of the last request with a body (create or update), to check 
what the producer sent.
+     */
+    public static String getLastRequestBody() {
+        return lastRequestBody;
+    }
+
     private boolean authenticate(HttpRequestWrapper request) {
         // read operations don't need to authenticate
         if (request.getMethod().contentEquals("GET")) {

Reply via email to