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 0de522cb2f6 CAMEL-19009: camel-gson - Date Format with GsonBuilder 
(#9302)
0de522cb2f6 is described below

commit 0de522cb2f655e2fcd487b885ddced580d2d71a5
Author: Saravanakumar Selvaraj <[email protected]>
AuthorDate: Sun Feb 5 14:02:05 2023 +0530

    CAMEL-19009: camel-gson - Date Format with GsonBuilder (#9302)
    
    * CAMEL-19009: camel-gson - Date Format with GsonBuilder
    
    * CAMEL-19009: camel-gson - Date Format with GsonBuilder
    
    * CAMEL-19009: camel-gson - Date Format with GsonBuilder
    
    * CAMEL-19009: camel-gson - Date Format with GsonBuilder
---
 .../camel/component/gson/GsonDataFormat.java       |  2 +-
 .../gson/SpringGsonJsonDataFormatTest.java         | 23 +++++++++++++++++
 .../org/apache/camel/component/gson/TestPojo.java  | 11 ++++++++
 .../gson/SpringGsonJsonDataFormatTest.xml          | 12 +++++++++
 .../camel/model/dataformat/JsonDataFormat.java     | 29 ++++++++++++++++++++++
 .../reifier/dataformat/JsonDataFormatReifier.java  |  1 +
 6 files changed, 77 insertions(+), 1 deletion(-)

diff --git 
a/components/camel-gson/src/main/java/org/apache/camel/component/gson/GsonDataFormat.java
 
b/components/camel-gson/src/main/java/org/apache/camel/component/gson/GsonDataFormat.java
index c0c1f72d519..e9481cfb8fb 100644
--- 
a/components/camel-gson/src/main/java/org/apache/camel/component/gson/GsonDataFormat.java
+++ 
b/components/camel-gson/src/main/java/org/apache/camel/component/gson/GsonDataFormat.java
@@ -48,7 +48,7 @@ import org.apache.camel.util.IOHelper;
  * Marshal POJOs to JSON and back using <a 
href="http://code.google.com/p/google-gson/";>Gson</a>
  */
 @Dataformat("gson")
-@Metadata(includeProperties = 
"unmarshalType,unmarshalTypeName,prettyPrint,contentTypeHeader")
+@Metadata(includeProperties = 
"unmarshalType,unmarshalTypeName,prettyPrint,dateFormatPattern,contentTypeHeader")
 public class GsonDataFormat extends ServiceSupport
         implements DataFormat, DataFormatName, DataFormatContentTypeHeader, 
CamelContextAware {
 
diff --git 
a/components/camel-gson/src/test/java/org/apache/camel/component/gson/SpringGsonJsonDataFormatTest.java
 
b/components/camel-gson/src/test/java/org/apache/camel/component/gson/SpringGsonJsonDataFormatTest.java
index 8ed4a13a9cc..824b2013404 100644
--- 
a/components/camel-gson/src/test/java/org/apache/camel/component/gson/SpringGsonJsonDataFormatTest.java
+++ 
b/components/camel-gson/src/test/java/org/apache/camel/component/gson/SpringGsonJsonDataFormatTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.component.gson;
 
+import java.text.SimpleDateFormat;
+
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.spring.junit5.CamelSpringTestSupport;
 import org.junit.jupiter.api.Test;
@@ -67,6 +69,27 @@ public class SpringGsonJsonDataFormatTest extends 
CamelSpringTestSupport {
         mock.assertIsSatisfied();
     }
 
+    @Test
+    public void testMarshalAndUnmarshalPojoWithDateFormatPattern() throws 
Exception {
+        TestPojo in = new TestPojo();
+        in.setName("Camel");
+        in.setDob(new SimpleDateFormat("yyyyMMdd").parse("20230204"));
+
+        MockEndpoint mock = getMockEndpoint("mock:reversePojo");
+        mock.expectedMessageCount(1);
+        mock.message(0).body().isInstanceOf(TestPojo.class);
+        mock.message(0).body().isEqualTo(in);
+
+        Object marshalled = template.requestBody("direct:inFormatDate", in);
+        String marshalledAsString = 
context.getTypeConverter().convertTo(String.class, marshalled);
+        String expected = "{\"name\":\"Camel\",\"dob\":\"2023-02-04\"}";
+        assertEquals(expected, marshalledAsString);
+
+        template.sendBody("direct:backFormatDate", marshalled);
+
+        mock.assertIsSatisfied();
+    }
+
     @Override
     protected AbstractXmlApplicationContext createApplicationContext() {
         return new 
ClassPathXmlApplicationContext("org/apache/camel/component/gson/SpringGsonJsonDataFormatTest.xml");
diff --git 
a/components/camel-gson/src/test/java/org/apache/camel/component/gson/TestPojo.java
 
b/components/camel-gson/src/test/java/org/apache/camel/component/gson/TestPojo.java
index 1d094543140..12edbc5e227 100644
--- 
a/components/camel-gson/src/test/java/org/apache/camel/component/gson/TestPojo.java
+++ 
b/components/camel-gson/src/test/java/org/apache/camel/component/gson/TestPojo.java
@@ -16,9 +16,12 @@
  */
 package org.apache.camel.component.gson;
 
+import java.util.Date;
+
 public class TestPojo {
 
     private String name;
+    private Date dob;
 
     public String getName() {
         return this.name;
@@ -28,6 +31,14 @@ public class TestPojo {
         this.name = name;
     }
 
+    public Date getDob() {
+        return this.dob;
+    }
+
+    public void setDob(Date dob) {
+        this.dob = dob;
+    }
+
     @Override
     public boolean equals(Object obj) {
         return this.name.equals(((TestPojo) obj).getName());
diff --git 
a/components/camel-gson/src/test/resources/org/apache/camel/component/gson/SpringGsonJsonDataFormatTest.xml
 
b/components/camel-gson/src/test/resources/org/apache/camel/component/gson/SpringGsonJsonDataFormatTest.xml
index cd0cebe79ec..650f3ea00ba 100644
--- 
a/components/camel-gson/src/test/resources/org/apache/camel/component/gson/SpringGsonJsonDataFormatTest.xml
+++ 
b/components/camel-gson/src/test/resources/org/apache/camel/component/gson/SpringGsonJsonDataFormatTest.xml
@@ -32,6 +32,7 @@
             <!-- this one uses our own TestPojo class as unmarshal type -->
             <json id="gson" library="Gson" 
unmarshalType="org.apache.camel.component.gson.TestPojo"/>
             <json id="pretty" library="Gson" prettyPrint="true" 
unmarshalType="org.apache.camel.component.gson.TestPojo"/>
+            <json id="format_date" library="Gson" 
dateFormatPattern="yyyy-MM-dd" 
unmarshalType="org.apache.camel.component.gson.TestPojo"/>
         </dataFormats>
 
         <route>
@@ -56,6 +57,17 @@
             <to uri="mock:reversePojo"/>
         </route>
 
+        <route>
+            <from uri="direct:inFormatDate"/>
+            <marshal><custom ref="format_date"/></marshal>
+        </route>
+
+        <route>
+            <from uri="direct:backFormatDate"/>
+            <unmarshal><custom ref="format_date"/></unmarshal>
+            <to uri="mock:reversePojo"/>
+        </route>
+
     </camelContext>
     <!-- END SNIPPET: e1 -->
 
diff --git 
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java
 
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java
index 32271109092..78d90393f29 100644
--- 
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java
+++ 
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java
@@ -103,6 +103,9 @@ public class JsonDataFormat extends DataFormatDefinition 
implements ContentTypeH
               description = "Whether the data format should set the 
Content-Type header with the type from the data format."
                             + " For example application/xml for data formats 
marshalling to XML, or application/json for data formats marshalling to JSON")
     private String contentTypeHeader;
+    @XmlAttribute
+    @Metadata(description = "To configure the date format while marshall or 
unmarshall Date fields in JSON using Gson")
+    private String dateFormatPattern;
 
     public JsonDataFormat() {
         super("json");
@@ -139,6 +142,7 @@ public class JsonDataFormat extends DataFormatDefinition 
implements ContentTypeH
         this.autoDiscoverSchemaResolver = builder.autoDiscoverSchemaResolver;
         this.namingStrategy = builder.namingStrategy;
         this.contentTypeHeader = builder.contentTypeHeader;
+        this.dateFormatPattern = builder.dateFormatPattern;
     }
 
     @Override
@@ -155,6 +159,14 @@ public class JsonDataFormat extends DataFormatDefinition 
implements ContentTypeH
         this.contentTypeHeader = contentTypeHeader;
     }
 
+    public String getDateFormatPattern() {
+        return dateFormatPattern;
+    }
+
+    public void setDateFormatPattern(String dateFormatPattern) {
+        this.dateFormatPattern = dateFormatPattern;
+    }
+
     public String getObjectMapper() {
         return objectMapper;
     }
@@ -590,17 +602,34 @@ public class JsonDataFormat extends DataFormatDefinition 
implements ContentTypeH
         private String autoDiscoverSchemaResolver;
         private String namingStrategy;
         private String contentTypeHeader;
+        private String dateFormatPattern;
 
+        /**
+         * Whether the data format should set the Content-Type header with the 
type from the data format. For example
+         * application/xml for data formats marshalling to XML, or 
application/json for data formats marshalling to JSON
+         */
         public Builder contentTypeHeader(String contentTypeHeader) {
             this.contentTypeHeader = contentTypeHeader;
             return this;
         }
 
+        /**
+         * Whether the data format should set the Content-Type header with the 
type from the data format. For example
+         * application/xml for data formats marshalling to XML, or 
application/json for data formats marshalling to JSON
+         */
         public Builder contentTypeHeader(boolean contentTypeHeader) {
             this.contentTypeHeader = Boolean.toString(contentTypeHeader);
             return this;
         }
 
+        /**
+         * To configure the date format while marshall or unmarshall Date 
fields in JSON using Gson.
+         */
+        public Builder dateFormatPattern(String dateFormatPattern) {
+            this.dateFormatPattern = dateFormatPattern;
+            return this;
+        }
+
         /**
          * Lookup and use the existing ObjectMapper with the given id when 
using Jackson.
          */
diff --git 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/dataformat/JsonDataFormatReifier.java
 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/dataformat/JsonDataFormatReifier.java
index 6239826ad75..f6dd3c68a38 100644
--- 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/dataformat/JsonDataFormatReifier.java
+++ 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/dataformat/JsonDataFormatReifier.java
@@ -46,6 +46,7 @@ public class JsonDataFormatReifier extends 
DataFormatReifier<JsonDataFormat> {
         }
         properties.put("unmarshalType", or(definition.getUnmarshalType(), 
definition.getUnmarshalTypeName()));
         properties.put("prettyPrint", definition.getPrettyPrint());
+        properties.put("dateFormatPattern", definition.getDateFormatPattern());
         properties.put("include", definition.getInclude());
         properties.put("allowJmsType", definition.getAllowJmsType());
         properties.put("collectionType", or(definition.getCollectionType(), 
definition.getCollectionTypeName()));

Reply via email to