This is an automated email from the ASF dual-hosted git repository. ppalaga pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/main by this push: new aec0df1 gson: complete doc and test coverage #3556 aec0df1 is described below commit aec0df132e1bd3fdb0ff8287ff1a4725936324a6 Author: aldettinger <aldettin...@gmail.com> AuthorDate: Wed Feb 16 16:00:36 2022 +0100 gson: complete doc and test coverage #3556 --- docs/modules/ROOT/pages/reference/extensions/gson.adoc | 9 +++++++++ extensions/gson/runtime/src/main/doc/configuration.adoc | 5 +++++ .../component/dataformats/json/JsonDataformatsResource.java | 2 +- .../component/dataformats/json/JsonDataformatsRoute.java | 7 ++++++- .../component/dataformats/json/model/DummyObject.java | 12 ++++++++++++ .../component/dataformats/json/JsonComponentsTest.java | 7 +++++-- 6 files changed, 38 insertions(+), 4 deletions(-) diff --git a/docs/modules/ROOT/pages/reference/extensions/gson.adoc b/docs/modules/ROOT/pages/reference/extensions/gson.adoc index cd7f437..bee02a5 100644 --- a/docs/modules/ROOT/pages/reference/extensions/gson.adoc +++ b/docs/modules/ROOT/pages/reference/extensions/gson.adoc @@ -38,3 +38,12 @@ Or add the coordinates to your existing project: ---- Check the xref:user-guide/index.adoc[User guide] for more information about writing Camel Quarkus applications. + +== Additional Camel Quarkus configuration + +=== Marshaling/Unmarshaling objects in native mode + +When marshaling/unmarshaling objects in native mode, all the serialized classes need to be link:https://quarkus.io/guides/writing-native-applications-tips#registering-for-reflection[registered for reflection]. +As such, when using `GsonDataFormat.setUnmarshalType(...)`, `GsonDataFormat.setUnmarshalTypeName(...)` and even `GsonDataFormat.setUnmarshalGenericType(...)`, the unmarshal type as well as sub field types should be registered for reflection. +See a working example in this link:https://github.com/apache/camel-quarkus/blob/main/integration-tests/dataformats-json/src/main/java/org/apache/camel/quarkus/component/dataformats/json/model/PojoA.java[integration test]. + diff --git a/extensions/gson/runtime/src/main/doc/configuration.adoc b/extensions/gson/runtime/src/main/doc/configuration.adoc new file mode 100644 index 0000000..dcb5888 --- /dev/null +++ b/extensions/gson/runtime/src/main/doc/configuration.adoc @@ -0,0 +1,5 @@ +=== Marshaling/Unmarshaling objects in native mode + +When marshaling/unmarshaling objects in native mode, all the serialized classes need to be link:https://quarkus.io/guides/writing-native-applications-tips#registering-for-reflection[registered for reflection]. +As such, when using `GsonDataFormat.setUnmarshalType(...)`, `GsonDataFormat.setUnmarshalTypeName(...)` and even `GsonDataFormat.setUnmarshalGenericType(...)`, the unmarshal type as well as sub field types should be registered for reflection. +See a working example in this link:https://github.com/apache/camel-quarkus/blob/main/integration-tests/dataformats-json/src/main/java/org/apache/camel/quarkus/component/dataformats/json/model/PojoA.java[integration test]. \ No newline at end of file diff --git a/integration-tests/dataformats-json/src/main/java/org/apache/camel/quarkus/component/dataformats/json/JsonDataformatsResource.java b/integration-tests/dataformats-json/src/main/java/org/apache/camel/quarkus/component/dataformats/json/JsonDataformatsResource.java index 6f51cd8..b2c6bb1 100644 --- a/integration-tests/dataformats-json/src/main/java/org/apache/camel/quarkus/component/dataformats/json/JsonDataformatsResource.java +++ b/integration-tests/dataformats-json/src/main/java/org/apache/camel/quarkus/component/dataformats/json/JsonDataformatsResource.java @@ -56,7 +56,7 @@ public class JsonDataformatsResource { @Path("/out") @POST - @Produces(MediaType.TEXT_PLAIN) + @Produces(MediaType.APPLICATION_JSON) public String testOrder(@QueryParam("json-component") String jsonComponent) { LOG.infof("Invoking testOrder(%s)", jsonComponent); return consumerTemplate.receive("vm:" + jsonComponent + "-out").getMessage().getBody().toString(); diff --git a/integration-tests/dataformats-json/src/main/java/org/apache/camel/quarkus/component/dataformats/json/JsonDataformatsRoute.java b/integration-tests/dataformats-json/src/main/java/org/apache/camel/quarkus/component/dataformats/json/JsonDataformatsRoute.java index b5bc061..13a7831 100644 --- a/integration-tests/dataformats-json/src/main/java/org/apache/camel/quarkus/component/dataformats/json/JsonDataformatsRoute.java +++ b/integration-tests/dataformats-json/src/main/java/org/apache/camel/quarkus/component/dataformats/json/JsonDataformatsRoute.java @@ -65,6 +65,7 @@ public class JsonDataformatsRoute extends RouteBuilder { Type genericType = new TypeToken<List<DummyObject>>() { }.getType(); gsonDummyObjectDataFormat.setUnmarshalGenericType(genericType); + gsonDummyObjectDataFormat.setDateFormatPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); gsonDummyObjectDataFormat.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES); gsonDummyObjectDataFormat.setExclusionStrategies(Arrays.<ExclusionStrategy> asList(new ExclusionStrategy() { @Override @@ -77,7 +78,11 @@ public class JsonDataformatsRoute extends RouteBuilder { return false; } })); - configureJsonRoutes(JsonLibrary.Gson, gsonDummyObjectDataFormat, new GsonDataFormat(PojoA.class), + + GsonDataFormat unmarshalByTypeNameGsonDataFormat = new GsonDataFormat(); + unmarshalByTypeNameGsonDataFormat + .setUnmarshalTypeName("org.apache.camel.quarkus.component.dataformats.json.model.PojoA"); + configureJsonRoutes(JsonLibrary.Gson, gsonDummyObjectDataFormat, unmarshalByTypeNameGsonDataFormat, new GsonDataFormat(PojoB.class)); JsonbDataFormat jsonBDummyObjectDataFormat = new JsonbDataFormat(new ParamType(List.class, DummyObject.class)); diff --git a/integration-tests/dataformats-json/src/main/java/org/apache/camel/quarkus/component/dataformats/json/model/DummyObject.java b/integration-tests/dataformats-json/src/main/java/org/apache/camel/quarkus/component/dataformats/json/model/DummyObject.java index 1888d89..0a7ead3 100644 --- a/integration-tests/dataformats-json/src/main/java/org/apache/camel/quarkus/component/dataformats/json/model/DummyObject.java +++ b/integration-tests/dataformats-json/src/main/java/org/apache/camel/quarkus/component/dataformats/json/model/DummyObject.java @@ -16,6 +16,8 @@ */ package org.apache.camel.quarkus.component.dataformats.json.model; +import java.util.Date; + import javax.json.bind.annotation.JsonbProperty; import javax.json.bind.annotation.JsonbTransient; @@ -37,6 +39,8 @@ public class DummyObject { @JsonbTransient private int ignored; + private Date date = new Date(1645026373); + public DummyObject() { } @@ -56,6 +60,14 @@ public class DummyObject { this.ignored = ignored; } + public Date getDate() { + return date; + } + + public void setDate(Date date) { + this.date = date; + } + @Override public String toString() { return "DummyObject [dummyString=" + dummyString + ", ignored=" + ignored + "]"; diff --git a/integration-tests/dataformats-json/src/test/java/org/apache/camel/quarkus/component/dataformats/json/JsonComponentsTest.java b/integration-tests/dataformats-json/src/test/java/org/apache/camel/quarkus/component/dataformats/json/JsonComponentsTest.java index 4217f87..7728578 100644 --- a/integration-tests/dataformats-json/src/test/java/org/apache/camel/quarkus/component/dataformats/json/JsonComponentsTest.java +++ b/integration-tests/dataformats-json/src/test/java/org/apache/camel/quarkus/component/dataformats/json/JsonComponentsTest.java @@ -29,6 +29,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; +import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is; @@ -50,12 +51,14 @@ public class JsonComponentsTest { .queryParam("json-component", jsonComponent) .post("/dataformats-json/out") .then() - .body(equalTo("{\"dummy_string\":\"value1\"}")); + .body("dummy_string", equalTo("value1")) + .body("date", containsString("1970")); RestAssured.given() .queryParam("json-component", jsonComponent) .post("/dataformats-json/out") .then() - .body(equalTo("{\"dummy_string\":\"value2\"}")); + .body("dummy_string", equalTo("value2")) + .body("date", containsString("1970")); } @ParameterizedTest