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); + } +}
