You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2021/11/18 13:02:40 UTC
[camel] 06/10: CAMEL-16912 - camel-jackson - Make it easy to configure property naming strategy
This is an automated email from the ASF dual-hosted git repository.
acosentino pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
commit f9ccda8afc2128b2a4b636c45d359e874aba4e13
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Thu Nov 18 13:49:03 2021 +0100
CAMEL-16912 - camel-jackson - Make it easy to configure property naming strategy
---
.../jackson/JacksonDataFormatConfigurer.java | 2 +-
.../jackson/AbstractJacksonDataFormat.java | 39 +++++++++++++++++--
.../jackson/JacksonMarshalNamingStrategyTest.java | 3 +-
...ngJacksonJsonDataFormatNamingStrategyTest.java} | 21 ++++-------
...ringJacksonJsonDataFormatNamingStrategyTest.xml | 44 ++++++++++++++++++++++
.../reifier/dataformat/JsonDataFormatReifier.java | 1 +
6 files changed, 89 insertions(+), 21 deletions(-)
diff --git a/components/camel-jackson/src/generated/java/org/apache/camel/component/jackson/JacksonDataFormatConfigurer.java b/components/camel-jackson/src/generated/java/org/apache/camel/component/jackson/JacksonDataFormatConfigurer.java
index 7c60bd1..55ad712 100644
--- a/components/camel-jackson/src/generated/java/org/apache/camel/component/jackson/JacksonDataFormatConfigurer.java
+++ b/components/camel-jackson/src/generated/java/org/apache/camel/component/jackson/JacksonDataFormatConfigurer.java
@@ -55,7 +55,7 @@ public class JacksonDataFormatConfigurer extends PropertyConfigurerSupport imple
case "autodiscoverschemaresolver":
case "autoDiscoverSchemaResolver": dataformat.setAutoDiscoverSchemaResolver(property(camelContext, boolean.class, value)); return true;
case "namingstrategy":
- case "namingStrategy": dataformat.setNamingStrategy(property(camelContext, com.fasterxml.jackson.databind.PropertyNamingStrategy.class, value)); return true;
+ case "namingStrategy": dataformat.setNamingStrategy(property(camelContext, java.lang.String.class, value)); return true;
default: return false;
}
}
diff --git a/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/AbstractJacksonDataFormat.java b/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/AbstractJacksonDataFormat.java
index aa04e68..67f838d6 100644
--- a/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/AbstractJacksonDataFormat.java
+++ b/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/AbstractJacksonDataFormat.java
@@ -33,6 +33,7 @@ import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.Module;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.type.CollectionType;
@@ -81,7 +82,7 @@ public abstract class AbstractJacksonDataFormat extends ServiceSupport
private boolean autoDiscoverObjectMapper;
private SchemaResolver schemaResolver;
private boolean autoDiscoverSchemaResolver = true;
- private PropertyNamingStrategy namingStrategy;
+ private String namingStrategy;
/**
* Use the default Jackson {@link ObjectMapper} and {@link Object}
@@ -287,11 +288,11 @@ public abstract class AbstractJacksonDataFormat extends ServiceSupport
return modules;
}
- public PropertyNamingStrategy getNamingStrategy() {
+ public String getNamingStrategy() {
return namingStrategy;
}
- public void setNamingStrategy(PropertyNamingStrategy namingStrategy) {
+ public void setNamingStrategy(String namingStrategy) {
this.namingStrategy = namingStrategy;
}
@@ -659,7 +660,10 @@ public abstract class AbstractJacksonDataFormat extends ServiceSupport
}
if (org.apache.camel.util.ObjectHelper.isNotEmpty(namingStrategy)) {
- objectMapper.setPropertyNamingStrategy(namingStrategy);
+ PropertyNamingStrategy selectedNamingStrategy = determineNamingStrategy(namingStrategy);
+ if (org.apache.camel.util.ObjectHelper.isNotEmpty(selectedNamingStrategy)) {
+ objectMapper.setPropertyNamingStrategy(selectedNamingStrategy);
+ }
}
} else {
LOG.debug("The objectMapper was already found in the registry, no customizations will be applied");
@@ -682,6 +686,33 @@ public abstract class AbstractJacksonDataFormat extends ServiceSupport
}
}
+ private PropertyNamingStrategy determineNamingStrategy(String namingStrategy) {
+ PropertyNamingStrategy strategy = null;
+ switch (namingStrategy) {
+ case "LOWER_CAMEL_CASE":
+ strategy = PropertyNamingStrategies.LOWER_CAMEL_CASE;
+ break;
+ case "LOWER_DOT_CASE":
+ strategy = PropertyNamingStrategies.LOWER_DOT_CASE;
+ break;
+ case "LOWER_CASE":
+ strategy = PropertyNamingStrategies.LOWER_CASE;
+ break;
+ case "KEBAB_CASE":
+ strategy = PropertyNamingStrategies.KEBAB_CASE;
+ break;
+ case "SNAKE_CASE":
+ strategy = PropertyNamingStrategies.SNAKE_CASE;
+ break;
+ case "UPPER_CAMEL_CASE":
+ strategy = PropertyNamingStrategies.UPPER_CAMEL_CASE;
+ break;
+ default:
+ break;
+ }
+ return strategy;
+ }
+
@Override
protected void doStop() throws Exception {
// noop
diff --git a/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonMarshalNamingStrategyTest.java b/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonMarshalNamingStrategyTest.java
index 612a2f1..4437e6a 100644
--- a/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonMarshalNamingStrategyTest.java
+++ b/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonMarshalNamingStrategyTest.java
@@ -16,7 +16,6 @@
*/
package org.apache.camel.component.jackson;
-import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.test.junit5.CamelTestSupport;
@@ -48,7 +47,7 @@ public class JacksonMarshalNamingStrategyTest extends CamelTestSupport {
@Override
public void configure() throws Exception {
JacksonDataFormat format = new JacksonDataFormat();
- format.setNamingStrategy(PropertyNamingStrategies.LOWER_DOT_CASE);
+ format.setNamingStrategy("LOWER_DOT_CASE");
from("direct:in").marshal(format).to("mock:result");
}
};
diff --git a/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonMarshalNamingStrategyTest.java b/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/SpringJacksonJsonDataFormatNamingStrategyTest.java
similarity index 71%
copy from components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonMarshalNamingStrategyTest.java
copy to components/camel-jackson/src/test/java/org/apache/camel/component/jackson/SpringJacksonJsonDataFormatNamingStrategyTest.java
index 612a2f1..665140d 100644
--- a/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonMarshalNamingStrategyTest.java
+++ b/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/SpringJacksonJsonDataFormatNamingStrategyTest.java
@@ -16,15 +16,15 @@
*/
package org.apache.camel.component.jackson;
-import com.fasterxml.jackson.databind.PropertyNamingStrategies;
-import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.test.junit5.CamelTestSupport;
+import org.apache.camel.test.spring.junit5.CamelSpringTestSupport;
import org.junit.jupiter.api.Test;
+import org.springframework.context.support.AbstractXmlApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
import static org.junit.jupiter.api.Assertions.assertEquals;
-public class JacksonMarshalNamingStrategyTest extends CamelTestSupport {
+public class SpringJacksonJsonDataFormatNamingStrategyTest extends CamelSpringTestSupport {
@Test
public void testMarshalAndUnmarshalMap() throws Exception {
@@ -42,16 +42,9 @@ public class JacksonMarshalNamingStrategyTest extends CamelTestSupport {
}
@Override
- protected RouteBuilder createRouteBuilder() throws Exception {
- return new RouteBuilder() {
-
- @Override
- public void configure() throws Exception {
- JacksonDataFormat format = new JacksonDataFormat();
- format.setNamingStrategy(PropertyNamingStrategies.LOWER_DOT_CASE);
- from("direct:in").marshal(format).to("mock:result");
- }
- };
+ protected AbstractXmlApplicationContext createApplicationContext() {
+ return new ClassPathXmlApplicationContext(
+ "org/apache/camel/component/jackson/SpringJacksonJsonDataFormatNamingStrategyTest.xml");
}
}
diff --git a/components/camel-jackson/src/test/resources/org/apache/camel/component/jackson/SpringJacksonJsonDataFormatNamingStrategyTest.xml b/components/camel-jackson/src/test/resources/org/apache/camel/component/jackson/SpringJacksonJsonDataFormatNamingStrategyTest.xml
new file mode 100644
index 0000000..0ce8cea
--- /dev/null
+++ b/components/camel-jackson/src/test/resources/org/apache/camel/component/jackson/SpringJacksonJsonDataFormatNamingStrategyTest.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ 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.
+
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
+ ">
+
+ <!-- START SNIPPET: e1 -->
+ <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
+
+ <!-- we define the json jackson data formats to be used -->
+ <dataFormats>
+ <json id="jack" library="Jackson" namingStrategy="LOWER_DOT_CASE"/>
+ </dataFormats>
+
+ <route>
+ <from uri="direct:in"/>
+ <marshal><custom ref="jack"/></marshal>
+ <to uri="mock:result"/>
+ </route>
+
+ </camelContext>
+ <!-- END SNIPPET: e1 -->
+
+</beans>
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 383037d..848c49e 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
@@ -75,6 +75,7 @@ public class JsonDataFormatReifier extends DataFormatReifier<JsonDataFormat> {
if (definition.getLibrary() == JsonLibrary.Jackson) {
properties.put("schemaResolver", asRef(definition.getSchemaResolver()));
properties.put("autoDiscoverSchemaResolver", definition.getAutoDiscoverSchemaResolver());
+ properties.put("namingStrategy", definition.getNamingStrategy());
}
}