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 2021/02/01 13:38:20 UTC
[camel-spring-boot] 01/05: CAMEL-16111: camel-spring-boot starters
fix issue when end users are using their own customer converter in Spring
Boot then Camel converters cannot be found by Spring Boot. Thanks to
Krzysztof Jamroz for reporting and suggest fix.
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-spring-boot.git
commit 567be7a3ac4125094d322e971720a97dabe9e32b
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Feb 1 13:50:41 2021 +0100
CAMEL-16111: camel-spring-boot starters fix issue when end users are using their own customer converter in Spring Boot then Camel converters cannot be found by Spring Boot. Thanks to Krzysztof Jamroz for reporting and suggest fix.
---
.../maven/SpringBootAutoConfigurationMojo.java | 55 ++++++++--------------
1 file changed, 20 insertions(+), 35 deletions(-)
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 6b9cae5..19e1e8d 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
@@ -1277,7 +1277,6 @@ public class SpringBootAutoConfigurationMojo extends AbstractSpringBootGenerator
javaClass.getJavaDoc().setFullText("Generated by camel-package-maven-plugin - do not edit this file!");
javaClass.addAnnotation(Generated.class).setStringValue("value", SpringBootAutoConfigurationMojo.class.getName());
javaClass.addAnnotation(Configuration.class).setLiteralValue("proxyBeanMethods", "false");
- javaClass.addAnnotation(AutoConfigureAfter.class).setLiteralValue("CamelAutoConfiguration.class");
javaClass.addAnnotation(Conditional.class).setLiteralValue("ConditionalOnCamelContextAndAutoConfigurationBeans.class");
javaClass.addAnnotation(EnableConfigurationProperties.class)
.setLiteralValue("{ComponentConfigurationProperties.class," + configurationName + ".class}");
@@ -1287,8 +1286,14 @@ public class SpringBootAutoConfigurationMojo extends AbstractSpringBootGenerator
"value",
new String[]{"camel.component", "camel.component." + componentName});
+ if (complexOptions) {
+ String cn = name.replace("ComponentAutoConfiguration", "ComponentConverter");
+ javaClass.addAnnotation(AutoConfigureAfter.class).setLiteralValue("{CamelAutoConfiguration.class, " + cn + ".class}");
+ } else {
+ javaClass.addAnnotation(AutoConfigureAfter.class).setLiteralValue("CamelAutoConfiguration.class");
+ }
+
javaClass.addImport(ApplicationContext.class);
- javaClass.addImport("org.springframework.boot.convert.ApplicationConversionService");
javaClass.addImport("org.apache.camel.CamelContext");
javaClass.addImport("org.apache.camel.Component");
javaClass.addImport("org.apache.camel.spi.ComponentCustomizer");
@@ -1303,15 +1308,8 @@ public class SpringBootAutoConfigurationMojo extends AbstractSpringBootGenerator
javaClass.addField().setPrivate().setFinal(true).setName("camelContext").setType(loadClass("org.apache.camel.CamelContext"));
javaClass.addField().setPrivate().setName("configuration").setType(configClass).addAnnotation(Autowired.class);
- String converterClassName = name.replace("ComponentAutoConfiguration", "ComponentConverter");
Method ctr = javaClass.addMethod().setConstructor(true).setPublic().setName(name).addParameter("org.apache.camel.CamelContext", "camelContext");
- if (complexOptions) {
- ctr.setBody("this.camelContext = camelContext;\n"
- + "ApplicationConversionService acs = (ApplicationConversionService) ApplicationConversionService.getSharedInstance();\n"
- + "acs.addConverter(new " + converterClassName + "(camelContext));\n");
- } else {
- ctr.setBody("this.camelContext = camelContext;\n");
- }
+ ctr.setBody("this.camelContext = camelContext;\n");
// add method for auto configure
String body = createComponentBody(model.getShortJavaType(), componentName);
@@ -1322,7 +1320,6 @@ public class SpringBootAutoConfigurationMojo extends AbstractSpringBootGenerator
.setPublic()
.setBody(body)
.setReturnType(loadType("org.apache.camel.spi.ComponentCustomizer"));
-
method.addAnnotation(Lazy.class);
method.addAnnotation(Bean.class);
@@ -1343,16 +1340,16 @@ public class SpringBootAutoConfigurationMojo extends AbstractSpringBootGenerator
javaClass.setName(name);
javaClass.getJavaDoc().setFullText("Generated by camel-package-maven-plugin - do not edit this file!");
javaClass.addAnnotation(Generated.class).setStringValue("value", SpringBootAutoConfigurationMojo.class.getName());
+ 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.addField().setPrivate().setFinal(true).setName("camelContext").setType(loadClass("org.apache.camel.CamelContext"));
- javaClass.addMethod().setConstructor(true).setPublic().setName(name).addParameter("org.apache.camel.CamelContext", "camelContext")
- .setBody("this.camelContext = camelContext;\n");
+ javaClass.implementInterface("GenericConverter");
+ javaClass.addField().setPrivate().setName("applicationContext").setType(loadClass("org.springframework.context.ApplicationContext")).addAnnotation(Autowired.class);
String body = createConverterPairBody(model);
javaClass.addMethod().setName("getConvertibleTypes").setPublic().setReturnType("Set<ConvertiblePair>")
@@ -1367,6 +1364,8 @@ public class SpringBootAutoConfigurationMojo extends AbstractSpringBootGenerator
String fileName = packageName.replaceAll("\\.", "\\/") + "/" + name + ".java";
writeSourceIfChanged(javaClass, fileName, false);
+
+ writeComponentSpringFactorySource(packageName, name);
}
private String createConvertBody(ComponentModel model) {
@@ -1383,7 +1382,7 @@ public class SpringBootAutoConfigurationMojo extends AbstractSpringBootGenerator
// we need complex types only which unique types only
Stream<String> s = model.getComponentOptions().stream().filter(this::isComplexType).map(SpringBootAutoConfigurationMojo::getJavaType).distinct();
s.forEach(type -> {
- sb.append(" case \"").append(type).append("\": return camelContext.getRegistry().lookupByNameAndType(ref, ").append(type).append(".class);\n");
+ sb.append(" case \"").append(type).append("\": return applicationContext.getBean(ref, ").append(type).append(".class);\n");
});
sb.append("}\n");
sb.append("return null;\n");
@@ -1404,7 +1403,7 @@ public class SpringBootAutoConfigurationMojo extends AbstractSpringBootGenerator
// we need complex types only which unique types only
Stream<String> s = model.getOptions().stream().filter(this::isComplexType).map(SpringBootAutoConfigurationMojo::getJavaType).distinct();
s.forEach(type -> {
- sb.append(" case \"").append(type).append("\": return camelContext.getRegistry().lookupByNameAndType(ref, ").append(type).append(".class);\n");
+ sb.append(" case \"").append(type).append("\": return applicationContext.getBean(ref, ").append(type).append(".class);\n");
});
sb.append("}\n");
sb.append("return null;\n");
@@ -1425,7 +1424,7 @@ public class SpringBootAutoConfigurationMojo extends AbstractSpringBootGenerator
// we need complex types only which unique types only
Stream<String> s = model.getOptions().stream().filter(this::isComplexType).map(SpringBootAutoConfigurationMojo::getJavaType).distinct();
s.forEach(type -> {
- sb.append(" case \"").append(type).append("\": return camelContext.getRegistry().lookupByNameAndType(ref, ").append(type).append(".class);\n");
+ sb.append(" case \"").append(type).append("\": return applicationContext.getBean(ref, ").append(type).append(".class);\n");
});
sb.append("}\n");
sb.append("return null;\n");
@@ -1514,15 +1513,8 @@ public class SpringBootAutoConfigurationMojo extends AbstractSpringBootGenerator
javaClass.addField().setPrivate().setFinal(true).setName("camelContext").setType(loadClass("org.apache.camel.CamelContext"));
javaClass.addField().setPrivate().setName("configuration").setType(configClass).addAnnotation(Autowired.class);
- String converterClassName = name.replace("DataFormatAutoConfiguration", "DataFormatConverter");
Method ctr = javaClass.addMethod().setConstructor(true).setPublic().setName(name).addParameter("org.apache.camel.CamelContext", "camelContext");
- if (complexOptions) {
- ctr.setBody("this.camelContext = camelContext;\n"
- + "ApplicationConversionService acs = (ApplicationConversionService) ApplicationConversionService.getSharedInstance();\n"
- + "acs.addConverter(new " + converterClassName + "(camelContext));\n");
- } else {
- ctr.setBody("this.camelContext = camelContext;\n");
- }
+ ctr.setBody("this.camelContext = camelContext;\n");
String body = createDataFormatBody(model.getShortJavaType(), dataformatName);
String methodName = "configure" + model.getShortJavaType() + "Factory";
@@ -1619,15 +1611,8 @@ public class SpringBootAutoConfigurationMojo extends AbstractSpringBootGenerator
javaClass.addField().setPrivate().setFinal(true).setName("camelContext").setType(loadClass("org.apache.camel.CamelContext"));
javaClass.addField().setPrivate().setName("configuration").setType(configClass).addAnnotation(Autowired.class);
- String converterClassName = name.replace("LanguageAutoConfiguration", "LanguageConverter");
Method ctr = javaClass.addMethod().setConstructor(true).setPublic().setName(name).addParameter("org.apache.camel.CamelContext", "camelContext");
- if (complexOptions) {
- ctr.setBody("this.camelContext = camelContext;\n"
- + "ApplicationConversionService acs = (ApplicationConversionService) ApplicationConversionService.getSharedInstance();\n"
- + "acs.addConverter(new " + converterClassName + "(camelContext));\n");
- } else {
- ctr.setBody("this.camelContext = camelContext;\n");
- }
+ ctr.setBody("this.camelContext = camelContext;\n");
String body = createLanguageBody(model.getShortJavaType(), languageName);
String methodName = "configure" + model.getShortJavaType();