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 <claus.ib...@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 }