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 2025/04/10 18:40:31 UTC
(camel) 03/04: CAMEL-21949: camel-core - Type converter with allowNull should be a valid response for ConvertBodyTo
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch allow-null
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 06ce3f41a7892ba7a29c5d53371b435e5e9a407f
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Apr 10 19:04:24 2025 +0200
CAMEL-21949: camel-core - Type converter with allowNull should be a valid response for ConvertBodyTo
---
.../cxf/converter/CxfConverterLoader.java | 48 +++++++++++++--
.../cxf/converter/CxfPayloadConverterLoader.java | 68 ++++++++++++++++++----
.../cxf/converter/CxfPayloadConverter.java | 4 +-
.../component/cxf/jaxrs/CxfConverterLoader.java | 58 +++++++++++++++---
.../camel/component/cxf/jaxrs/CxfConverter.java | 2 +-
.../resources/velocity/type-converter-loader.vm | 11 +++-
6 files changed, 162 insertions(+), 29 deletions(-)
diff --git a/components/camel-cxf/camel-cxf-common/src/generated/java/org/apache/camel/component/cxf/converter/CxfConverterLoader.java b/components/camel-cxf/camel-cxf-common/src/generated/java/org/apache/camel/component/cxf/converter/CxfConverterLoader.java
index 3a1356e3a66..c6bed12eb01 100644
--- a/components/camel-cxf/camel-cxf-common/src/generated/java/org/apache/camel/component/cxf/converter/CxfConverterLoader.java
+++ b/components/camel-cxf/camel-cxf-common/src/generated/java/org/apache/camel/component/cxf/converter/CxfConverterLoader.java
@@ -46,17 +46,53 @@ public final class CxfConverterLoader implements TypeConverterLoader, CamelConte
private void registerConverters(TypeConverterRegistry registry) {
addTypeConverter(registry, java.io.InputStream.class, jakarta.xml.soap.SOAPMessage.class, false,
- (type, exchange, value) -> org.apache.camel.component.cxf.converter.CxfConverter.soapMessageToInputStream((jakarta.xml.soap.SOAPMessage) value, exchange));
+ (type, exchange, value) -> {
+ Object answer = org.apache.camel.component.cxf.converter.CxfConverter.soapMessageToInputStream((jakarta.xml.soap.SOAPMessage) value, exchange);
+ if (false && answer == null) {
+ answer = Void.class;
+ }
+ return answer;
+ });
addTypeConverter(registry, java.lang.Object[].class, java.lang.Object.class, false,
- (type, exchange, value) -> org.apache.camel.component.cxf.converter.CxfConverter.toArray(value));
+ (type, exchange, value) -> {
+ Object answer = org.apache.camel.component.cxf.converter.CxfConverter.toArray(value);
+ if (false && answer == null) {
+ answer = Void.class;
+ }
+ return answer;
+ });
addTypeConverter(registry, java.lang.String.class, jakarta.xml.soap.SOAPMessage.class, false,
- (type, exchange, value) -> org.apache.camel.component.cxf.converter.CxfConverter.soapMessageToString((jakarta.xml.soap.SOAPMessage) value, exchange));
+ (type, exchange, value) -> {
+ Object answer = org.apache.camel.component.cxf.converter.CxfConverter.soapMessageToString((jakarta.xml.soap.SOAPMessage) value, exchange);
+ if (false && answer == null) {
+ answer = Void.class;
+ }
+ return answer;
+ });
addTypeConverter(registry, javax.xml.namespace.QName.class, java.lang.String.class, false,
- (type, exchange, value) -> org.apache.camel.component.cxf.converter.CxfConverter.toQName((java.lang.String) value));
+ (type, exchange, value) -> {
+ Object answer = org.apache.camel.component.cxf.converter.CxfConverter.toQName((java.lang.String) value);
+ if (false && answer == null) {
+ answer = Void.class;
+ }
+ return answer;
+ });
addTypeConverter(registry, org.apache.camel.component.cxf.common.DataFormat.class, java.lang.String.class, false,
- (type, exchange, value) -> org.apache.camel.component.cxf.converter.CxfConverter.toDataFormat((java.lang.String) value));
+ (type, exchange, value) -> {
+ Object answer = org.apache.camel.component.cxf.converter.CxfConverter.toDataFormat((java.lang.String) value);
+ if (false && answer == null) {
+ answer = Void.class;
+ }
+ return answer;
+ });
addTypeConverter(registry, org.apache.cxf.message.MessageContentsList.class, java.lang.Object[].class, false,
- (type, exchange, value) -> org.apache.camel.component.cxf.converter.CxfConverter.toMessageContentsList((java.lang.Object[]) value));
+ (type, exchange, value) -> {
+ Object answer = org.apache.camel.component.cxf.converter.CxfConverter.toMessageContentsList((java.lang.Object[]) value);
+ if (false && answer == null) {
+ answer = Void.class;
+ }
+ return answer;
+ });
}
private static void addTypeConverter(TypeConverterRegistry registry, Class<?> toType, Class<?> fromType, boolean allowNull, SimpleTypeConverter.ConversionMethod method) {
diff --git a/components/camel-cxf/camel-cxf-common/src/generated/java/org/apache/camel/component/cxf/converter/CxfPayloadConverterLoader.java b/components/camel-cxf/camel-cxf-common/src/generated/java/org/apache/camel/component/cxf/converter/CxfPayloadConverterLoader.java
index 4c150d22bc1..c783284480c 100644
--- a/components/camel-cxf/camel-cxf-common/src/generated/java/org/apache/camel/component/cxf/converter/CxfPayloadConverterLoader.java
+++ b/components/camel-cxf/camel-cxf-common/src/generated/java/org/apache/camel/component/cxf/converter/CxfPayloadConverterLoader.java
@@ -45,22 +45,70 @@ public final class CxfPayloadConverterLoader implements TypeConverterLoader, Cam
}
private void registerConverters(TypeConverterRegistry registry) {
- addTypeConverter(registry, javax.xml.transform.Source.class, org.apache.camel.component.cxf.common.CxfPayload.class, false,
- (type, exchange, value) -> org.apache.camel.component.cxf.converter.CxfPayloadConverter.cxfPayLoadToSource((org.apache.camel.component.cxf.common.CxfPayload) value, exchange));
+ addTypeConverter(registry, javax.xml.transform.Source.class, org.apache.camel.component.cxf.common.CxfPayload.class, true,
+ (type, exchange, value) -> {
+ Object answer = org.apache.camel.component.cxf.converter.CxfPayloadConverter.cxfPayLoadToSource((org.apache.camel.component.cxf.common.CxfPayload) value, exchange);
+ if (true && answer == null) {
+ answer = Void.class;
+ }
+ return answer;
+ });
addTypeConverter(registry, org.apache.camel.StreamCache.class, org.apache.camel.component.cxf.common.CxfPayload.class, false,
- (type, exchange, value) -> org.apache.camel.component.cxf.converter.CxfPayloadConverter.cxfPayLoadToStreamCache((org.apache.camel.component.cxf.common.CxfPayload) value, exchange));
+ (type, exchange, value) -> {
+ Object answer = org.apache.camel.component.cxf.converter.CxfPayloadConverter.cxfPayLoadToStreamCache((org.apache.camel.component.cxf.common.CxfPayload) value, exchange);
+ if (false && answer == null) {
+ answer = Void.class;
+ }
+ return answer;
+ });
addTypeConverter(registry, org.apache.camel.component.cxf.common.CxfPayload.class, javax.xml.transform.Source.class, false,
- (type, exchange, value) -> org.apache.camel.component.cxf.converter.CxfPayloadConverter.sourceToCxfPayload((javax.xml.transform.Source) value, exchange));
+ (type, exchange, value) -> {
+ Object answer = org.apache.camel.component.cxf.converter.CxfPayloadConverter.sourceToCxfPayload((javax.xml.transform.Source) value, exchange);
+ if (false && answer == null) {
+ answer = Void.class;
+ }
+ return answer;
+ });
addTypeConverter(registry, org.apache.camel.component.cxf.common.CxfPayload.class, org.w3c.dom.Document.class, false,
- (type, exchange, value) -> org.apache.camel.component.cxf.converter.CxfPayloadConverter.documentToCxfPayload((org.w3c.dom.Document) value, exchange));
+ (type, exchange, value) -> {
+ Object answer = org.apache.camel.component.cxf.converter.CxfPayloadConverter.documentToCxfPayload((org.w3c.dom.Document) value, exchange);
+ if (false && answer == null) {
+ answer = Void.class;
+ }
+ return answer;
+ });
addTypeConverter(registry, org.apache.camel.component.cxf.common.CxfPayload.class, org.w3c.dom.Element.class, false,
- (type, exchange, value) -> org.apache.camel.component.cxf.converter.CxfPayloadConverter.elementToCxfPayload((org.w3c.dom.Element) value, exchange));
+ (type, exchange, value) -> {
+ Object answer = org.apache.camel.component.cxf.converter.CxfPayloadConverter.elementToCxfPayload((org.w3c.dom.Element) value, exchange);
+ if (false && answer == null) {
+ answer = Void.class;
+ }
+ return answer;
+ });
addTypeConverter(registry, org.apache.camel.component.cxf.common.CxfPayload.class, org.w3c.dom.NodeList.class, false,
- (type, exchange, value) -> org.apache.camel.component.cxf.converter.CxfPayloadConverter.nodeListToCxfPayload((org.w3c.dom.NodeList) value, exchange));
- addTypeConverter(registry, org.w3c.dom.Node.class, org.apache.camel.component.cxf.common.CxfPayload.class, false,
- (type, exchange, value) -> org.apache.camel.component.cxf.converter.CxfPayloadConverter.cxfPayLoadToNode((org.apache.camel.component.cxf.common.CxfPayload) value, exchange));
+ (type, exchange, value) -> {
+ Object answer = org.apache.camel.component.cxf.converter.CxfPayloadConverter.nodeListToCxfPayload((org.w3c.dom.NodeList) value, exchange);
+ if (false && answer == null) {
+ answer = Void.class;
+ }
+ return answer;
+ });
+ addTypeConverter(registry, org.w3c.dom.Node.class, org.apache.camel.component.cxf.common.CxfPayload.class, true,
+ (type, exchange, value) -> {
+ Object answer = org.apache.camel.component.cxf.converter.CxfPayloadConverter.cxfPayLoadToNode((org.apache.camel.component.cxf.common.CxfPayload) value, exchange);
+ if (true && answer == null) {
+ answer = Void.class;
+ }
+ return answer;
+ });
addTypeConverter(registry, org.w3c.dom.NodeList.class, org.apache.camel.component.cxf.common.CxfPayload.class, false,
- (type, exchange, value) -> org.apache.camel.component.cxf.converter.CxfPayloadConverter.cxfPayloadToNodeList((org.apache.camel.component.cxf.common.CxfPayload) value, exchange));
+ (type, exchange, value) -> {
+ Object answer = org.apache.camel.component.cxf.converter.CxfPayloadConverter.cxfPayloadToNodeList((org.apache.camel.component.cxf.common.CxfPayload) value, exchange);
+ if (false && answer == null) {
+ answer = Void.class;
+ }
+ return answer;
+ });
}
private static void addTypeConverter(TypeConverterRegistry registry, Class<?> toType, Class<?> fromType, boolean allowNull, SimpleTypeConverter.ConversionMethod method) {
diff --git a/components/camel-cxf/camel-cxf-common/src/main/java/org/apache/camel/component/cxf/converter/CxfPayloadConverter.java b/components/camel-cxf/camel-cxf-common/src/main/java/org/apache/camel/component/cxf/converter/CxfPayloadConverter.java
index 9a09861f205..44a03d66ab7 100644
--- a/components/camel-cxf/camel-cxf-common/src/main/java/org/apache/camel/component/cxf/converter/CxfPayloadConverter.java
+++ b/components/camel-cxf/camel-cxf-common/src/main/java/org/apache/camel/component/cxf/converter/CxfPayloadConverter.java
@@ -93,7 +93,7 @@ public final class CxfPayloadConverter {
return new NodeListWrapper(payload.getBody());
}
- @Converter
+ @Converter(allowNull = true)
public static <T> Node cxfPayLoadToNode(CxfPayload<T> payload, Exchange exchange) {
List<Element> payloadBodyElements = payload.getBody();
@@ -103,7 +103,7 @@ public final class CxfPayloadConverter {
return null;
}
- @Converter
+ @Converter(allowNull = true)
public static <T> Source cxfPayLoadToSource(CxfPayload<T> payload, Exchange exchange) {
List<Source> payloadBody = payload.getBodySources();
diff --git a/components/camel-cxf/camel-cxf-rest/src/generated/java/org/apache/camel/component/cxf/jaxrs/CxfConverterLoader.java b/components/camel-cxf/camel-cxf-rest/src/generated/java/org/apache/camel/component/cxf/jaxrs/CxfConverterLoader.java
index 08c8c2e6205..698247d0117 100644
--- a/components/camel-cxf/camel-cxf-rest/src/generated/java/org/apache/camel/component/cxf/jaxrs/CxfConverterLoader.java
+++ b/components/camel-cxf/camel-cxf-rest/src/generated/java/org/apache/camel/component/cxf/jaxrs/CxfConverterLoader.java
@@ -45,20 +45,62 @@ public final class CxfConverterLoader implements TypeConverterLoader, CamelConte
}
private void registerConverters(TypeConverterRegistry registry) {
- addTypeConverter(registry, java.io.InputStream.class, jakarta.ws.rs.core.Response.class, false,
- (type, exchange, value) -> org.apache.camel.component.cxf.jaxrs.CxfConverter.toInputStream((jakarta.ws.rs.core.Response) value, exchange));
+ addTypeConverter(registry, java.io.InputStream.class, jakarta.ws.rs.core.Response.class, true,
+ (type, exchange, value) -> {
+ Object answer = org.apache.camel.component.cxf.jaxrs.CxfConverter.toInputStream((jakarta.ws.rs.core.Response) value, exchange);
+ if (true && answer == null) {
+ answer = Void.class;
+ }
+ return answer;
+ });
addTypeConverter(registry, java.io.InputStream.class, jakarta.xml.soap.SOAPMessage.class, false,
- (type, exchange, value) -> org.apache.camel.component.cxf.jaxrs.CxfConverter.soapMessageToInputStream((jakarta.xml.soap.SOAPMessage) value, exchange));
+ (type, exchange, value) -> {
+ Object answer = org.apache.camel.component.cxf.jaxrs.CxfConverter.soapMessageToInputStream((jakarta.xml.soap.SOAPMessage) value, exchange);
+ if (false && answer == null) {
+ answer = Void.class;
+ }
+ return answer;
+ });
addTypeConverter(registry, java.lang.Object[].class, java.lang.Object.class, false,
- (type, exchange, value) -> org.apache.camel.component.cxf.jaxrs.CxfConverter.toArray(value));
+ (type, exchange, value) -> {
+ Object answer = org.apache.camel.component.cxf.jaxrs.CxfConverter.toArray(value);
+ if (false && answer == null) {
+ answer = Void.class;
+ }
+ return answer;
+ });
addTypeConverter(registry, java.lang.String.class, jakarta.xml.soap.SOAPMessage.class, false,
- (type, exchange, value) -> org.apache.camel.component.cxf.jaxrs.CxfConverter.soapMessageToString((jakarta.xml.soap.SOAPMessage) value, exchange));
+ (type, exchange, value) -> {
+ Object answer = org.apache.camel.component.cxf.jaxrs.CxfConverter.soapMessageToString((jakarta.xml.soap.SOAPMessage) value, exchange);
+ if (false && answer == null) {
+ answer = Void.class;
+ }
+ return answer;
+ });
addTypeConverter(registry, javax.xml.namespace.QName.class, java.lang.String.class, false,
- (type, exchange, value) -> org.apache.camel.component.cxf.jaxrs.CxfConverter.toQName((java.lang.String) value));
+ (type, exchange, value) -> {
+ Object answer = org.apache.camel.component.cxf.jaxrs.CxfConverter.toQName((java.lang.String) value);
+ if (false && answer == null) {
+ answer = Void.class;
+ }
+ return answer;
+ });
addTypeConverter(registry, org.apache.camel.component.cxf.common.DataFormat.class, java.lang.String.class, false,
- (type, exchange, value) -> org.apache.camel.component.cxf.jaxrs.CxfConverter.toDataFormat((java.lang.String) value));
+ (type, exchange, value) -> {
+ Object answer = org.apache.camel.component.cxf.jaxrs.CxfConverter.toDataFormat((java.lang.String) value);
+ if (false && answer == null) {
+ answer = Void.class;
+ }
+ return answer;
+ });
addTypeConverter(registry, org.apache.cxf.message.MessageContentsList.class, java.lang.Object[].class, false,
- (type, exchange, value) -> org.apache.camel.component.cxf.jaxrs.CxfConverter.toMessageContentsList((java.lang.Object[]) value));
+ (type, exchange, value) -> {
+ Object answer = org.apache.camel.component.cxf.jaxrs.CxfConverter.toMessageContentsList((java.lang.Object[]) value);
+ if (false && answer == null) {
+ answer = Void.class;
+ }
+ return answer;
+ });
}
private static void addTypeConverter(TypeConverterRegistry registry, Class<?> toType, Class<?> fromType, boolean allowNull, SimpleTypeConverter.ConversionMethod method) {
diff --git a/components/camel-cxf/camel-cxf-rest/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfConverter.java b/components/camel-cxf/camel-cxf-rest/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfConverter.java
index 7f86e18a6e7..9e34680bc7e 100644
--- a/components/camel-cxf/camel-cxf-rest/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfConverter.java
+++ b/components/camel-cxf/camel-cxf-rest/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfConverter.java
@@ -100,7 +100,7 @@ public final class CxfConverter {
return DataFormat.valueOf(name.toUpperCase());
}
- @Converter
+ @Converter(allowNull = true)
public static InputStream toInputStream(Response response, Exchange exchange) {
Object obj = response.getEntity();
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/resources/velocity/type-converter-loader.vm b/tooling/maven/camel-package-maven-plugin/src/main/resources/velocity/type-converter-loader.vm
index db63573c444..2837ac6fa06 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/resources/velocity/type-converter-loader.vm
+++ b/tooling/maven/camel-package-maven-plugin/src/main/resources/velocity/type-converter-loader.vm
@@ -76,8 +76,15 @@ public final class ${className} implements TypeConverterLoader, CamelContextAwar
private void registerConverters(TypeConverterRegistry registry) {
#foreach ( $to in $converters.getConverters().entrySet() )
#foreach ( $from in $to.getValue().entrySet() )
- addTypeConverter(registry, ${to.getKey()}.class, ${mojo.toString($from.getKey())}.class, ${mojo.isAllowNull($from.getValue())},
- (type, exchange, value) -> ${mojo.toJava($from.getValue(), $converterClasses)});
+ #set ( $allowNull = ${mojo.isAllowNull($from.getValue())} )
+ addTypeConverter(registry, ${to.getKey()}.class, ${mojo.toString($from.getKey())}.class, $allowNull,
+ (type, exchange, value) -> {
+ Object answer = ${mojo.toJava($from.getValue(), $converterClasses)};
+ if ($allowNull && answer == null) {
+ answer = Void.class;
+ }
+ return answer;
+ });
#end
#end
}