You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2022/02/23 15:31:34 UTC
[camel-quarkus] 17/22: gson: complete doc and test coverage #3556
This is an automated email from the ASF dual-hosted git repository.
jamesnetherton pushed a commit to branch 2.7.x
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
commit d395c00091d3837ec3f3d9704048ee09f4a31fd1
Author: aldettinger <al...@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 ab98d7c..7a98bec 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 dedb55c..8f93a75 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