You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2024/03/01 10:50:34 UTC
(camel-spring-boot) branch main updated: CAMEL-20502: JacksonAvro should be default avro dataformat. Add schemaResolver with classname as option in the model.
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-spring-boot.git
The following commit(s) were added to refs/heads/main by this push:
new d22ca0495f9 CAMEL-20502: JacksonAvro should be default avro dataformat. Add schemaResolver with classname as option in the model.
d22ca0495f9 is described below
commit d22ca0495f92f627a713fbe1022def98c8fdbf69
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Mar 1 11:50:16 2024 +0100
CAMEL-20502: JacksonAvro should be default avro dataformat. Add schemaResolver with classname as option in the model.
---
.../catalog/dataformats/avroJackson.json | 2 +-
.../springboot/catalog/dataformats/jackson.json | 2 +-
.../test/AvroMarshalAndUnmarshallTest.java | 9 +--
.../test/AvroMarshalAndUnmarshallXmlTest.java | 3 +-
.../src/test/resources/routes/springDataFormat.xml | 4 +-
.../camel-core-starter/src/main/docs/core.json | 4 +-
.../RestConfigurationDefinitionProperties.java | 9 ++-
.../src/main/docs/jackson-avro.json | 2 +-
.../JacksonAvroDataFormatConfiguration.java | 1 +
.../springboot/JacksonAvroDataFormatConverter.java | 70 ++++++++++++++++++++++
.../src/main/docs/jackson.json | 2 +-
.../springboot/JacksonDataFormatConfiguration.java | 1 +
.../springboot/JacksonDataFormatConverter.java | 69 +++++++++++++++++++++
.../maven/SpringBootAutoConfigurationMojo.java | 6 +-
14 files changed, 167 insertions(+), 17 deletions(-)
diff --git a/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/dataformats/avroJackson.json b/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/dataformats/avroJackson.json
index 8b13e2ad60f..298ce1be814 100644
--- a/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/dataformats/avroJackson.json
+++ b/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/dataformats/avroJackson.json
@@ -33,7 +33,7 @@
"timezone": { "index": 14, "kind": "attribute", "displayName": "Timezone", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "If set then Jackson will use the Timezone when marshalling\/unmarshalling." },
"autoDiscoverObjectMapper": { "index": 15, "kind": "attribute", "displayName": "Auto Discover Object Mapper", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If set to true then Jackson will lookup for an objectMapper into the registry" },
"contentTypeHeader": { "index": 16, "kind": "attribute", "displayName": "Content Type Header", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "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" },
- "schemaResolver": { "index": 17, "kind": "attribute", "displayName": "Schema Resolver", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Optional schema resolver used to lookup schemas for the data in transit." },
+ "schemaResolver": { "index": 17, "kind": "attribute", "displayName": "Schema Resolver", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.jackson.SchemaResolver", "deprecated": false, "autowired": false, "secret": false, "description": "Optional schema resolver used to lookup schemas for the data in transit." },
"autoDiscoverSchemaResolver": { "index": 18, "kind": "attribute", "displayName": "Auto Discover Schema Resolver", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "When not disabled, the SchemaResolver will be looked up into the registry" }
}
}
diff --git a/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/dataformats/jackson.json b/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/dataformats/jackson.json
index 28ca4eea608..bb180ec4bab 100644
--- a/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/dataformats/jackson.json
+++ b/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/dataformats/jackson.json
@@ -33,7 +33,7 @@
"disableFeatures": { "index": 14, "kind": "attribute", "displayName": "Disable Features", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Set of features to disable on the Jackson com.fasterxml.jackson.databind.ObjectMapper. The features should be a name that matches a enum from com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.Deserial [...]
"allowUnmarshallType": { "index": 15, "kind": "attribute", "displayName": "Allow Unmarshall Type", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If enabled then Jackson is allowed to attempt to use the CamelJacksonUnmarshalType header during the unmarshalling. This should only be enabled when desired to be used." },
"timezone": { "index": 16, "kind": "attribute", "displayName": "Timezone", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "If set then Jackson will use the Timezone when marshalling\/unmarshalling. This option will have no effect on the others Json DataFormat, like gson and fastjson." },
- "schemaResolver": { "index": 17, "kind": "attribute", "displayName": "Schema Resolver", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Optional schema resolver used to lookup schemas for the data in transit." },
+ "schemaResolver": { "index": 17, "kind": "attribute", "displayName": "Schema Resolver", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.jackson.SchemaResolver", "deprecated": false, "autowired": false, "secret": false, "description": "Optional schema resolver used to lookup schemas for the data in transit." },
"autoDiscoverSchemaResolver": { "index": 18, "kind": "attribute", "displayName": "Auto Discover Schema Resolver", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "When not disabled, the SchemaResolver will be looked up into the registry" },
"namingStrategy": { "index": 19, "kind": "attribute", "displayName": "Naming Strategy", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "If set then Jackson will use the the defined Property Naming Strategy.Possible values are: LOWER_CAMEL_CASE, LOWER_DOT_CASE, LOWER_CASE, KEBAB_CASE, SNAKE_CASE and UPPER_CAMEL_CASE" },
"contentTypeHeader": { "index": 20, "kind": "attribute", "displayName": "Content Type Header", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "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" }
diff --git a/components-starter/camel-avro-starter/src/test/java/org/apache/camel/dataformat/avro/springboot/test/AvroMarshalAndUnmarshallTest.java b/components-starter/camel-avro-starter/src/test/java/org/apache/camel/dataformat/avro/springboot/test/AvroMarshalAndUnmarshallTest.java
index c9530076def..ebc234072b7 100644
--- a/components-starter/camel-avro-starter/src/test/java/org/apache/camel/dataformat/avro/springboot/test/AvroMarshalAndUnmarshallTest.java
+++ b/components-starter/camel-avro-starter/src/test/java/org/apache/camel/dataformat/avro/springboot/test/AvroMarshalAndUnmarshallTest.java
@@ -24,6 +24,7 @@ import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.dataformat.avro.AvroDataFormat;
+import org.apache.camel.model.dataformat.AvroLibrary;
import org.apache.camel.spring.boot.CamelAutoConfiguration;
import org.junit.jupiter.api.Test;
@@ -83,7 +84,7 @@ public class AvroMarshalAndUnmarshallTest {
context.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
- from("direct:unmarshalC").unmarshal().avro(new CamelException("wrong schema"))
+ from("direct:unmarshalC").unmarshal().avro(AvroLibrary.ApacheAvro, new CamelException("wrong schema"))
.to("mock:reverse");
}
});
@@ -127,10 +128,10 @@ public class AvroMarshalAndUnmarshallTest {
from("direct:in").marshal(format);
from("direct:back").unmarshal(format).to("mock:reverse");
- from("direct:marshal").marshal().avro();
- from("direct:unmarshalA").unmarshal().avro(Value.class.getName()).to("mock:reverse");
+ from("direct:marshal").marshal().avro(AvroLibrary.ApacheAvro);
+ from("direct:unmarshalA").unmarshal().avro(AvroLibrary.ApacheAvro, Value.class.getName()).to("mock:reverse");
- from("direct:unmarshalB").unmarshal().avro(Value.SCHEMA$).to("mock:reverse");
+ from("direct:unmarshalB").unmarshal().avro(AvroLibrary.ApacheAvro, Value.SCHEMA$).to("mock:reverse");
}
};
}
diff --git a/components-starter/camel-avro-starter/src/test/java/org/apache/camel/dataformat/avro/springboot/test/AvroMarshalAndUnmarshallXmlTest.java b/components-starter/camel-avro-starter/src/test/java/org/apache/camel/dataformat/avro/springboot/test/AvroMarshalAndUnmarshallXmlTest.java
index 2b21b5801e6..e15f777a0ec 100644
--- a/components-starter/camel-avro-starter/src/test/java/org/apache/camel/dataformat/avro/springboot/test/AvroMarshalAndUnmarshallXmlTest.java
+++ b/components-starter/camel-avro-starter/src/test/java/org/apache/camel/dataformat/avro/springboot/test/AvroMarshalAndUnmarshallXmlTest.java
@@ -24,6 +24,7 @@ import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.dataformat.avro.AvroDataFormat;
+import org.apache.camel.model.dataformat.AvroLibrary;
import org.apache.camel.spring.boot.CamelAutoConfiguration;
import org.junit.jupiter.api.Test;
@@ -80,7 +81,7 @@ public class AvroMarshalAndUnmarshallXmlTest {
context.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
- from("direct:unmarshalC").unmarshal().avro(new CamelException("wrong schema"))
+ from("direct:unmarshalC").unmarshal().avro(AvroLibrary.ApacheAvro, new CamelException("wrong schema"))
.to("mock:reverse");
}
});
diff --git a/components-starter/camel-avro-starter/src/test/resources/routes/springDataFormat.xml b/components-starter/camel-avro-starter/src/test/resources/routes/springDataFormat.xml
index 0778dc3817e..70c7e013995 100644
--- a/components-starter/camel-avro-starter/src/test/resources/routes/springDataFormat.xml
+++ b/components-starter/camel-avro-starter/src/test/resources/routes/springDataFormat.xml
@@ -21,13 +21,13 @@
<route>
<from uri="direct:in"/>
<marshal>
- <avro instanceClassName="org.apache.camel.dataformat.avro.springboot.test.Value"/>
+ <avro instanceClassName="org.apache.camel.dataformat.avro.springboot.test.Value" library="ApacheAvro"/>
</marshal>
</route>
<route>
<from uri="direct:back"/>
<unmarshal>
- <avro instanceClassName="org.apache.camel.dataformat.avro.springboot.test.Value"/>
+ <avro instanceClassName="org.apache.camel.dataformat.avro.springboot.test.Value" library="ApacheAvro"/>
</unmarshal>
<to uri="mock:reverse"/>
</route>
diff --git a/components-starter/camel-core-starter/src/main/docs/core.json b/components-starter/camel-core-starter/src/main/docs/core.json
index 564e289b72a..6d735ebee11 100644
--- a/components-starter/camel-core-starter/src/main/docs/core.json
+++ b/components-starter/camel-core-starter/src/main/docs/core.json
@@ -854,9 +854,9 @@
{
"name": "camel.rest.use-x-forward-headers",
"type": "java.lang.Boolean",
- "description": "Whether to use X-Forward headers for Host and related setting. The default value is true.",
+ "description": "Whether to use X-Forward headers to set host etc. for OpenApi. This may be needed in special cases involving reverse-proxy and networking going from HTTP to HTTPS etc. Then the proxy can send X-Forward headers (X-Forwarded-Proto) that influences the host names in the OpenAPI schema that camel-openapi-java generates from Rest DSL routes.",
"sourceType": "org.apache.camel.model.rest.springboot.RestConfigurationDefinitionProperties",
- "defaultValue": true
+ "defaultValue": false
},
{
"name": "camel.rest.xml-data-format",
diff --git a/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/rest/springboot/RestConfigurationDefinitionProperties.java b/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/rest/springboot/RestConfigurationDefinitionProperties.java
index 7da0c2fa0e2..a32bda86e4f 100644
--- a/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/rest/springboot/RestConfigurationDefinitionProperties.java
+++ b/components-starter/camel-core-starter/src/main/java/org/apache/camel/model/rest/springboot/RestConfigurationDefinitionProperties.java
@@ -79,10 +79,13 @@ public class RestConfigurationDefinitionProperties {
*/
private String apiHost;
/**
- * Whether to use X-Forward headers for Host and related setting. The
- * default value is true.
+ * Whether to use X-Forward headers to set host etc. for OpenApi. This may
+ * be needed in special cases involving reverse-proxy and networking going
+ * from HTTP to HTTPS etc. Then the proxy can send X-Forward headers
+ * (X-Forwarded-Proto) that influences the host names in the OpenAPI schema
+ * that camel-openapi-java generates from Rest DSL routes.
*/
- private Boolean useXForwardHeaders = true;
+ private Boolean useXForwardHeaders = false;
/**
* Sets the location of the api document the REST producer will use to
* validate the REST uri and query parameters are valid accordingly to the
diff --git a/components-starter/camel-jackson-avro-starter/src/main/docs/jackson-avro.json b/components-starter/camel-jackson-avro-starter/src/main/docs/jackson-avro.json
index e16817e27be..2dfd3f4daf9 100644
--- a/components-starter/camel-jackson-avro-starter/src/main/docs/jackson-avro.json
+++ b/components-starter/camel-jackson-avro-starter/src/main/docs/jackson-avro.json
@@ -110,7 +110,7 @@
{
"name": "camel.dataformat.avro-jackson.schema-resolver",
"type": "java.lang.String",
- "description": "Optional schema resolver used to lookup schemas for the data in transit.",
+ "description": "Optional schema resolver used to lookup schemas for the data in transit. The option is a org.apache.camel.component.jackson.SchemaResolver type.",
"sourceType": "org.apache.camel.component.jackson.avro.springboot.JacksonAvroDataFormatConfiguration"
},
{
diff --git a/components-starter/camel-jackson-avro-starter/src/main/java/org/apache/camel/component/jackson/avro/springboot/JacksonAvroDataFormatConfiguration.java b/components-starter/camel-jackson-avro-starter/src/main/java/org/apache/camel/component/jackson/avro/springboot/JacksonAvroDataFormatConfiguration.java
index 44d1ffd80fe..bb7d6457dcd 100644
--- a/components-starter/camel-jackson-avro-starter/src/main/java/org/apache/camel/component/jackson/avro/springboot/JacksonAvroDataFormatConfiguration.java
+++ b/components-starter/camel-jackson-avro-starter/src/main/java/org/apache/camel/component/jackson/avro/springboot/JacksonAvroDataFormatConfiguration.java
@@ -129,6 +129,7 @@ public class JacksonAvroDataFormatConfiguration
private Boolean contentTypeHeader = true;
/**
* Optional schema resolver used to lookup schemas for the data in transit.
+ * The option is a org.apache.camel.component.jackson.SchemaResolver type.
*/
private String schemaResolver;
/**
diff --git a/components-starter/camel-jackson-avro-starter/src/main/java/org/apache/camel/component/jackson/avro/springboot/JacksonAvroDataFormatConverter.java b/components-starter/camel-jackson-avro-starter/src/main/java/org/apache/camel/component/jackson/avro/springboot/JacksonAvroDataFormatConverter.java
new file mode 100644
index 00000000000..8c84f6a2682
--- /dev/null
+++ b/components-starter/camel-jackson-avro-starter/src/main/java/org/apache/camel/component/jackson/avro/springboot/JacksonAvroDataFormatConverter.java
@@ -0,0 +1,70 @@
+/*
+ * 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.component.jackson.avro.springboot;
+
+import java.util.LinkedHashSet;
+import java.util.Set;
+import org.apache.camel.CamelContext;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.context.properties.ConfigurationPropertiesBinding;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.convert.TypeDescriptor;
+import org.springframework.core.convert.converter.GenericConverter;
+import org.springframework.stereotype.Component;
+
+/**
+ * Generated by camel-package-maven-plugin - do not edit this file!
+ */
+@Configuration(proxyBeanMethods = false)
+@ConfigurationPropertiesBinding
+@Component
+public class JacksonAvroDataFormatConverter implements GenericConverter {
+
+ @Autowired
+ private ApplicationContext applicationContext;
+ private final CamelContext camelContext;
+
+ public JacksonAvroDataFormatConverter(
+ org.apache.camel.CamelContext camelContext) {
+ this.camelContext = camelContext;
+ }
+
+ public Set<ConvertiblePair> getConvertibleTypes() {
+ Set<ConvertiblePair> answer = new LinkedHashSet<>();
+ answer.add(new ConvertiblePair(String.class, org.apache.camel.component.jackson.SchemaResolver.class));
+ return answer;
+ }
+
+ public Object convert(
+ Object source,
+ TypeDescriptor sourceType,
+ TypeDescriptor targetType) {
+ if (source == null) {
+ return null;
+ }
+ String ref = source.toString();
+ if (!ref.startsWith("#")) {
+ return null;
+ }
+ ref = ref.startsWith("#bean:") ? ref.substring(6) : ref.substring(1);
+ switch (targetType.getName()) {
+ case "org.apache.camel.component.jackson.SchemaResolver": return applicationContext.getBean(ref, org.apache.camel.component.jackson.SchemaResolver.class);
+ }
+ return null;
+ }
+}
\ No newline at end of file
diff --git a/components-starter/camel-jackson-starter/src/main/docs/jackson.json b/components-starter/camel-jackson-starter/src/main/docs/jackson.json
index f9243179118..60b9421489a 100644
--- a/components-starter/camel-jackson-starter/src/main/docs/jackson.json
+++ b/components-starter/camel-jackson-starter/src/main/docs/jackson.json
@@ -123,7 +123,7 @@
{
"name": "camel.dataformat.jackson.schema-resolver",
"type": "java.lang.String",
- "description": "Optional schema resolver used to lookup schemas for the data in transit.",
+ "description": "Optional schema resolver used to lookup schemas for the data in transit. The option is a org.apache.camel.component.jackson.SchemaResolver type.",
"sourceType": "org.apache.camel.component.jackson.springboot.JacksonDataFormatConfiguration"
},
{
diff --git a/components-starter/camel-jackson-starter/src/main/java/org/apache/camel/component/jackson/springboot/JacksonDataFormatConfiguration.java b/components-starter/camel-jackson-starter/src/main/java/org/apache/camel/component/jackson/springboot/JacksonDataFormatConfiguration.java
index 89627f06551..d3cc4a8d27f 100644
--- a/components-starter/camel-jackson-starter/src/main/java/org/apache/camel/component/jackson/springboot/JacksonDataFormatConfiguration.java
+++ b/components-starter/camel-jackson-starter/src/main/java/org/apache/camel/component/jackson/springboot/JacksonDataFormatConfiguration.java
@@ -128,6 +128,7 @@ public class JacksonDataFormatConfiguration
private String timezone;
/**
* Optional schema resolver used to lookup schemas for the data in transit.
+ * The option is a org.apache.camel.component.jackson.SchemaResolver type.
*/
private String schemaResolver;
/**
diff --git a/components-starter/camel-jackson-starter/src/main/java/org/apache/camel/component/jackson/springboot/JacksonDataFormatConverter.java b/components-starter/camel-jackson-starter/src/main/java/org/apache/camel/component/jackson/springboot/JacksonDataFormatConverter.java
new file mode 100644
index 00000000000..d915033b881
--- /dev/null
+++ b/components-starter/camel-jackson-starter/src/main/java/org/apache/camel/component/jackson/springboot/JacksonDataFormatConverter.java
@@ -0,0 +1,69 @@
+/*
+ * 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.component.jackson.springboot;
+
+import java.util.LinkedHashSet;
+import java.util.Set;
+import org.apache.camel.CamelContext;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.context.properties.ConfigurationPropertiesBinding;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.convert.TypeDescriptor;
+import org.springframework.core.convert.converter.GenericConverter;
+import org.springframework.stereotype.Component;
+
+/**
+ * Generated by camel-package-maven-plugin - do not edit this file!
+ */
+@Configuration(proxyBeanMethods = false)
+@ConfigurationPropertiesBinding
+@Component
+public class JacksonDataFormatConverter implements GenericConverter {
+
+ @Autowired
+ private ApplicationContext applicationContext;
+ private final CamelContext camelContext;
+
+ public JacksonDataFormatConverter(org.apache.camel.CamelContext camelContext) {
+ this.camelContext = camelContext;
+ }
+
+ public Set<ConvertiblePair> getConvertibleTypes() {
+ Set<ConvertiblePair> answer = new LinkedHashSet<>();
+ answer.add(new ConvertiblePair(String.class, org.apache.camel.component.jackson.SchemaResolver.class));
+ return answer;
+ }
+
+ public Object convert(
+ Object source,
+ TypeDescriptor sourceType,
+ TypeDescriptor targetType) {
+ if (source == null) {
+ return null;
+ }
+ String ref = source.toString();
+ if (!ref.startsWith("#")) {
+ return null;
+ }
+ ref = ref.startsWith("#bean:") ? ref.substring(6) : ref.substring(1);
+ switch (targetType.getName()) {
+ case "org.apache.camel.component.jackson.SchemaResolver": return applicationContext.getBean(ref, org.apache.camel.component.jackson.SchemaResolver.class);
+ }
+ return null;
+ }
+}
\ No newline at end of file
diff --git a/tooling/camel-spring-boot-generator-maven-plugin/src/main/java/org/apache/camel/springboot/maven/SpringBootAutoConfigurationMojo.java b/tooling/camel-spring-boot-generator-maven-plugin/src/main/java/org/apache/camel/springboot/maven/SpringBootAutoConfigurationMojo.java
index 70dc455f05d..0fdb94d5516 100644
--- a/tooling/camel-spring-boot-generator-maven-plugin/src/main/java/org/apache/camel/springboot/maven/SpringBootAutoConfigurationMojo.java
+++ b/tooling/camel-spring-boot-generator-maven-plugin/src/main/java/org/apache/camel/springboot/maven/SpringBootAutoConfigurationMojo.java
@@ -1512,13 +1512,17 @@ public class SpringBootAutoConfigurationMojo extends AbstractSpringBootGenerator
javaClass.setPackage(packageName);
javaClass.setName(name);
javaClass.getJavaDoc().setFullText("Generated by camel-package-maven-plugin - do not edit this file!");
+ javaClass.addAnnotation(Configuration.class).setLiteralValue("proxyBeanMethods", "false");
+ javaClass.addAnnotation("org.springframework.boot.context.properties.ConfigurationPropertiesBinding");
+ javaClass.addAnnotation("org.springframework.stereotype.Component");
javaClass.addImport("java.util.LinkedHashSet");
javaClass.addImport("java.util.Set");
javaClass.addImport("org.apache.camel.CamelContext");
javaClass.addImport("org.springframework.core.convert.TypeDescriptor");
javaClass.addImport("org.springframework.core.convert.converter.GenericConverter");
- javaClass.implementInterface("org.springframework.core.convert.converter.GenericConverter");
+ javaClass.implementInterface("GenericConverter");
+ javaClass.addField().setPrivate().setName("applicationContext").setType(loadClass("org.springframework.context.ApplicationContext")).addAnnotation(Autowired.class);
javaClass.addField().setPrivate().setFinal(true).setName("camelContext").setType(loadClass("org.apache.camel.CamelContext"));
javaClass.addMethod().setConstructor(true).setPublic().setPublic().setName(name).addParameter("org.apache.camel.CamelContext", "camelContext")
.setBody("this.camelContext = camelContext;\n");