This is an automated email from the ASF dual-hosted git repository.

jamesnetherton pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git

commit 21ae7314ab5882c69a046e95f59ec5e8fe2c8b4b
Author: James Netherton <[email protected]>
AuthorDate: Thu Jul 21 14:03:08 2022 +0100

    Test Quarkus Jackson ObjectMapper with JacksonDataFormat
    
    Fixes #3922
---
 .../jackson/json/JacksonJsonResource.java          | 14 ++--
 .../dataformats/jackson/json/JacksonJsonRoute.java |  4 +-
 .../jackson/json/NamingStrategyCustomizer.java     | 31 +++++++++
 .../component/dataformats/json/model/Person.java   | 81 ++++++++++++++++++++++
 4 files changed, 121 insertions(+), 9 deletions(-)

diff --git 
a/integration-tests/dataformats-json/src/main/java/org/apache/camel/quarkus/component/dataformats/jackson/json/JacksonJsonResource.java
 
b/integration-tests/dataformats-json/src/main/java/org/apache/camel/quarkus/component/dataformats/jackson/json/JacksonJsonResource.java
index 33d865ea5a..3dc9951b93 100644
--- 
a/integration-tests/dataformats-json/src/main/java/org/apache/camel/quarkus/component/dataformats/jackson/json/JacksonJsonResource.java
+++ 
b/integration-tests/dataformats-json/src/main/java/org/apache/camel/quarkus/component/dataformats/jackson/json/JacksonJsonResource.java
@@ -43,6 +43,7 @@ import org.apache.camel.component.jackson.JacksonConstants;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.quarkus.component.dataformats.json.model.DummyObject;
 import org.apache.camel.quarkus.component.dataformats.json.model.Order;
+import org.apache.camel.quarkus.component.dataformats.json.model.Person;
 import org.apache.camel.quarkus.component.dataformats.json.model.Pojo;
 import org.apache.camel.quarkus.component.dataformats.json.model.TestJAXBPojo;
 import org.apache.camel.quarkus.component.dataformats.json.model.TestOtherPojo;
@@ -249,17 +250,16 @@ public class JacksonJsonResource {
     @Path("jackson/object-mapper")
     @GET
     public void jacksonObjectMapper() throws Exception {
-        Map<String, Object> in = new HashMap<>();
-        in.put("name", "Camel");
+        Person person = new Person("John", "Doe", 44);
 
         MockEndpoint mock = 
context.getEndpoint("mock:jackson-objectmapper-reverse", MockEndpoint.class);
         mock.expectedMessageCount(1);
-        mock.message(0).body().isInstanceOf(Map.class);
-        mock.message(0).body().isEqualTo(in);
+        mock.message(0).body().isInstanceOf(Person.class);
+        mock.message(0).body().isEqualTo(person);
 
-        Object marshalled = 
producerTemplate.requestBody("direct:jackson-objectmapper-in", in);
+        Object marshalled = 
producerTemplate.requestBody("direct:jackson-objectmapper-in", person);
         String marshalledAsString = 
context.getTypeConverter().convertTo(String.class, marshalled);
-        assertEquals("{\"name\":\"Camel\"}", marshalledAsString);
+        
assertEquals("{\"first_name\":\"John\",\"last_name\":\"Doe\",\"age\":44}", 
marshalledAsString);
 
         producerTemplate.sendBody("direct:jackson-objectmapper-back", 
marshalled);
 
@@ -495,7 +495,7 @@ public class JacksonJsonResource {
             order.setPartName("Camel");
 
             String json = (String) 
producerTemplate.requestBody("direct:jackson-conversion-pojo-test", order);
-            
assertEquals("{\"id\":0,\"partName\":\"Camel\",\"amount\":1,\"customer_name\":\"Acme\"}",
 json);
+            
assertEquals("{\"id\":0,\"part_name\":\"Camel\",\"amount\":1,\"customer_name\":\"Acme\"}",
 json);
         }
 
     }
diff --git 
a/integration-tests/dataformats-json/src/main/java/org/apache/camel/quarkus/component/dataformats/jackson/json/JacksonJsonRoute.java
 
b/integration-tests/dataformats-json/src/main/java/org/apache/camel/quarkus/component/dataformats/jackson/json/JacksonJsonRoute.java
index a62e049764..9808dd6c09 100644
--- 
a/integration-tests/dataformats-json/src/main/java/org/apache/camel/quarkus/component/dataformats/jackson/json/JacksonJsonRoute.java
+++ 
b/integration-tests/dataformats-json/src/main/java/org/apache/camel/quarkus/component/dataformats/jackson/json/JacksonJsonRoute.java
@@ -29,6 +29,7 @@ import 
org.apache.camel.component.jackson.ListJacksonDataFormat;
 import org.apache.camel.model.dataformat.JsonLibrary;
 import org.apache.camel.quarkus.component.dataformats.json.model.DummyObject;
 import org.apache.camel.quarkus.component.dataformats.json.model.MyModule;
+import org.apache.camel.quarkus.component.dataformats.json.model.Person;
 import org.apache.camel.quarkus.component.dataformats.json.model.Pojo;
 import org.apache.camel.quarkus.component.dataformats.json.model.TestJAXBPojo;
 import org.apache.camel.quarkus.component.dataformats.json.model.TestPojo;
@@ -78,8 +79,7 @@ public class JacksonJsonRoute extends RouteBuilder {
         from("direct:jackson-marshal-inPojo").marshal(formatPojo);
         
from("direct:jackson-marshal-backPojo").unmarshal(formatPojo).to("mock:jackson-marshal-reversePojo");
 
-        this.getContext().getRegistry().bind("myMapper", new ObjectMapper());
-        JacksonDataFormat objectMapperFormat = new JacksonDataFormat();
+        JacksonDataFormat objectMapperFormat = new 
JacksonDataFormat(Person.class);
         objectMapperFormat.setAutoDiscoverObjectMapper(true);
         from("direct:jackson-objectmapper-in").marshal(objectMapperFormat);
         
from("direct:jackson-objectmapper-back").unmarshal(objectMapperFormat).to("mock:jackson-objectmapper-reverse");
diff --git 
a/integration-tests/dataformats-json/src/main/java/org/apache/camel/quarkus/component/dataformats/jackson/json/NamingStrategyCustomizer.java
 
b/integration-tests/dataformats-json/src/main/java/org/apache/camel/quarkus/component/dataformats/jackson/json/NamingStrategyCustomizer.java
new file mode 100644
index 0000000000..f33f646f4a
--- /dev/null
+++ 
b/integration-tests/dataformats-json/src/main/java/org/apache/camel/quarkus/component/dataformats/jackson/json/NamingStrategyCustomizer.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.quarkus.component.dataformats.jackson.json;
+
+import javax.inject.Singleton;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.PropertyNamingStrategies;
+import io.quarkus.jackson.ObjectMapperCustomizer;
+
+@Singleton
+public class NamingStrategyCustomizer implements ObjectMapperCustomizer {
+    public void customize(ObjectMapper mapper) {
+        // Use snake case property names, so that we can verify the Quarkus 
ObjectMapper really is being used
+        mapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);
+    }
+}
diff --git 
a/integration-tests/dataformats-json/src/main/java/org/apache/camel/quarkus/component/dataformats/json/model/Person.java
 
b/integration-tests/dataformats-json/src/main/java/org/apache/camel/quarkus/component/dataformats/json/model/Person.java
new file mode 100644
index 0000000000..75946efda5
--- /dev/null
+++ 
b/integration-tests/dataformats-json/src/main/java/org/apache/camel/quarkus/component/dataformats/json/model/Person.java
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.quarkus.component.dataformats.json.model;
+
+import java.util.Objects;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.quarkus.runtime.annotations.RegisterForReflection;
+
+@RegisterForReflection(fields = false)
+public class Person {
+
+    @JsonProperty
+    private String firstName;
+    @JsonProperty
+    private String lastName;
+    @JsonProperty
+    private int age;
+
+    public Person() {
+    }
+
+    public Person(String firstName, String lastName, int age) {
+        this.firstName = firstName;
+        this.lastName = lastName;
+        this.age = age;
+    }
+
+    public String getFirstName() {
+        return firstName;
+    }
+
+    public void setFirstName(String firstName) {
+        this.firstName = firstName;
+    }
+
+    public String getLastName() {
+        return lastName;
+    }
+
+    public void setLastName(String lastName) {
+        this.lastName = lastName;
+    }
+
+    public int getAge() {
+        return age;
+    }
+
+    public void setAge(int age) {
+        this.age = age;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o)
+            return true;
+        if (o == null || getClass() != o.getClass())
+            return false;
+        Person person = (Person) o;
+        return age == person.age && Objects.equals(firstName, 
person.firstName) && Objects.equals(lastName, person.lastName);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(firstName, lastName, age);
+    }
+}

Reply via email to