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.git


The following commit(s) were added to refs/heads/main by this push:
     new cd3268d3cab CAMEL-213670: Upgrade to smooks 2.0.1
cd3268d3cab is described below

commit cd3268d3cab381172428df472f7262d9343bdd6c
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Tue Oct 22 09:40:28 2024 +0200

    CAMEL-213670: Upgrade to smooks 2.0.1
---
 ...nverterLoader.java => SinkConverterLoader.java} | 30 ++++++------
 .../smooks/converter/SourceConverterLoader.java    | 18 ++++----
 .../services/org/apache/camel/TypeConverterLoader  |  2 +-
 .../camel/component/smooks/SmooksProcessor.java    | 41 ++++++++++------
 .../{ResultConverter.java => SinkConverter.java}   | 54 +++++++++-------------
 .../smooks/converter/SourceConverter.java          | 45 ++++++++++--------
 .../component/smooks/SmooksProcessorTest.java      | 21 ++++-----
 ...ltConverterTest.java => SinkConverterTest.java} | 20 ++++----
 .../smooks/converter/SourceConverterTest.java      |  2 +-
 .../test/resources/edi-to-xml-smooks-config.xml    |  2 +-
 .../ROOT/pages/camel-4x-upgrade-guide-4_9.adoc     | 11 ++---
 parent/pom.xml                                     |  2 +-
 12 files changed, 127 insertions(+), 121 deletions(-)

diff --git 
a/components/camel-smooks/src/generated/java/org/apache/camel/component/smooks/converter/ResultConverterLoader.java
 
b/components/camel-smooks/src/generated/java/org/apache/camel/component/smooks/converter/SinkConverterLoader.java
similarity index 70%
rename from 
components/camel-smooks/src/generated/java/org/apache/camel/component/smooks/converter/ResultConverterLoader.java
rename to 
components/camel-smooks/src/generated/java/org/apache/camel/component/smooks/converter/SinkConverterLoader.java
index 2280a868479..244eb11a9a2 100644
--- 
a/components/camel-smooks/src/generated/java/org/apache/camel/component/smooks/converter/ResultConverterLoader.java
+++ 
b/components/camel-smooks/src/generated/java/org/apache/camel/component/smooks/converter/SinkConverterLoader.java
@@ -21,11 +21,11 @@ import org.apache.camel.util.DoubleMap;
 @Generated("org.apache.camel.maven.packaging.TypeConverterLoaderGeneratorMojo")
 @SuppressWarnings("unchecked")
 @DeferredContextBinding
-public final class ResultConverterLoader implements TypeConverterLoader, 
CamelContextAware {
+public final class SinkConverterLoader implements TypeConverterLoader, 
CamelContextAware {
 
     private CamelContext camelContext;
 
-    public ResultConverterLoader() {
+    public SinkConverterLoader() {
     }
 
     @Override
@@ -45,18 +45,18 @@ public final class ResultConverterLoader implements 
TypeConverterLoader, CamelCo
     }
 
     private void registerConverters(TypeConverterRegistry registry) {
-        addTypeConverter(registry, java.lang.Double.class, 
org.smooks.io.payload.JavaResult.ResultMap.class, false,
-            (type, exchange, value) -> 
org.apache.camel.component.smooks.converter.ResultConverter.toDouble((org.smooks.io.payload.JavaResult.ResultMap)
 value));
-        addTypeConverter(registry, java.lang.Integer.class, 
org.smooks.io.payload.JavaResult.ResultMap.class, false,
-            (type, exchange, value) -> 
org.apache.camel.component.smooks.converter.ResultConverter.toInteger((org.smooks.io.payload.JavaResult.ResultMap)
 value));
-        addTypeConverter(registry, java.lang.String.class, 
org.smooks.io.payload.StringResult.class, false,
-            (type, exchange, value) -> 
org.apache.camel.component.smooks.converter.ResultConverter.toString((org.smooks.io.payload.StringResult)
 value));
-        addTypeConverter(registry, java.util.List.class, 
org.smooks.io.payload.JavaResult.ResultMap.class, false,
-            (type, exchange, value) -> 
org.apache.camel.component.smooks.converter.ResultConverter.toList((org.smooks.io.payload.JavaResult.ResultMap)
 value, exchange));
-        addTypeConverter(registry, 
javax.xml.transform.stream.StreamSource.class, 
org.smooks.io.payload.StringResult.class, false,
-            (type, exchange, value) -> 
org.apache.camel.component.smooks.converter.ResultConverter.toStreamSource((org.smooks.io.payload.StringResult)
 value));
-        addTypeConverter(registry, org.w3c.dom.Node.class, 
javax.xml.transform.dom.DOMResult.class, false,
-            (type, exchange, value) -> 
org.apache.camel.component.smooks.converter.ResultConverter.toDocument((javax.xml.transform.dom.DOMResult)
 value));
+        addTypeConverter(registry, java.lang.Double.class, 
org.smooks.io.sink.JavaSink.ResultMap.class, false,
+            (type, exchange, value) -> 
org.apache.camel.component.smooks.converter.SinkConverter.toDouble((org.smooks.io.sink.JavaSink.ResultMap)
 value));
+        addTypeConverter(registry, java.lang.Integer.class, 
org.smooks.io.sink.JavaSink.ResultMap.class, false,
+            (type, exchange, value) -> 
org.apache.camel.component.smooks.converter.SinkConverter.toInteger((org.smooks.io.sink.JavaSink.ResultMap)
 value));
+        addTypeConverter(registry, java.lang.String.class, 
org.smooks.io.sink.StringSink.class, false,
+            (type, exchange, value) -> 
org.apache.camel.component.smooks.converter.SinkConverter.toString((org.smooks.io.sink.StringSink)
 value));
+        addTypeConverter(registry, java.util.List.class, 
org.smooks.io.sink.JavaSink.ResultMap.class, false,
+            (type, exchange, value) -> 
org.apache.camel.component.smooks.converter.SinkConverter.toList((org.smooks.io.sink.JavaSink.ResultMap)
 value, exchange));
+        addTypeConverter(registry, org.smooks.io.source.StringSource.class, 
org.smooks.io.sink.StringSink.class, false,
+            (type, exchange, value) -> 
org.apache.camel.component.smooks.converter.SinkConverter.toStringSource((org.smooks.io.sink.StringSink)
 value));
+        addTypeConverter(registry, org.w3c.dom.Node.class, 
org.smooks.io.sink.DOMSink.class, false,
+            (type, exchange, value) -> 
org.apache.camel.component.smooks.converter.SinkConverter.toDocument((org.smooks.io.sink.DOMSink)
 value));
     }
 
     private static void addTypeConverter(TypeConverterRegistry registry, 
Class<?> toType, Class<?> fromType, boolean allowNull, 
SimpleTypeConverter.ConversionMethod method) {
@@ -64,7 +64,7 @@ public final class ResultConverterLoader implements 
TypeConverterLoader, CamelCo
     }
 
     private void registerFallbackConverters(TypeConverterRegistry registry) {
-        addFallbackTypeConverter(registry, false, false, (type, exchange, 
value) -> 
org.apache.camel.component.smooks.converter.ResultConverter.convertTo(type, 
exchange, value, registry));
+        addFallbackTypeConverter(registry, false, false, (type, exchange, 
value) -> 
org.apache.camel.component.smooks.converter.SinkConverter.convertTo(type, 
exchange, value, registry));
     }
 
     private static void addFallbackTypeConverter(TypeConverterRegistry 
registry, boolean allowNull, boolean canPromote, 
SimpleTypeConverter.ConversionMethod method) {
diff --git 
a/components/camel-smooks/src/generated/java/org/apache/camel/component/smooks/converter/SourceConverterLoader.java
 
b/components/camel-smooks/src/generated/java/org/apache/camel/component/smooks/converter/SourceConverterLoader.java
index ab1c69772f8..16504fb65cb 100644
--- 
a/components/camel-smooks/src/generated/java/org/apache/camel/component/smooks/converter/SourceConverterLoader.java
+++ 
b/components/camel-smooks/src/generated/java/org/apache/camel/component/smooks/converter/SourceConverterLoader.java
@@ -44,16 +44,18 @@ public final class SourceConverterLoader implements 
TypeConverterLoader, CamelCo
     }
 
     private void registerConverters(TypeConverterRegistry registry) {
-        addTypeConverter(registry, javax.xml.transform.Source.class, 
java.io.InputStream.class, false,
-            (type, exchange, value) -> 
org.apache.camel.component.smooks.converter.SourceConverter.toStreamSource((java.io.InputStream)
 value));
-        addTypeConverter(registry, javax.xml.transform.Source.class, 
org.apache.camel.WrappedFile.class, true,
-            (type, exchange, value) -> 
org.apache.camel.component.smooks.converter.SourceConverter.toStreamSource((org.apache.camel.WrappedFile)
 value, exchange));
-        addTypeConverter(registry, org.smooks.io.payload.JavaSource.class, 
java.lang.Object.class, false,
+        addTypeConverter(registry, org.smooks.api.io.Source.class, 
org.apache.camel.WrappedFile.class, false,
+            (type, exchange, value) -> 
org.apache.camel.component.smooks.converter.SourceConverter.toURISource((org.apache.camel.WrappedFile)
 value));
+        addTypeConverter(registry, org.smooks.io.source.JavaSource.class, 
java.lang.Object.class, false,
             (type, exchange, value) -> 
org.apache.camel.component.smooks.converter.SourceConverter.toJavaSource(value));
-        addTypeConverter(registry, org.smooks.io.payload.JavaSource.class, 
org.smooks.io.payload.JavaResult.class, false,
-            (type, exchange, value) -> 
org.apache.camel.component.smooks.converter.SourceConverter.toJavaSource((org.smooks.io.payload.JavaResult)
 value));
-        addTypeConverter(registry, 
org.smooks.io.payload.JavaSourceWithoutEventStream.class, 
java.lang.Object.class, false,
+        addTypeConverter(registry, org.smooks.io.source.JavaSource.class, 
org.smooks.io.sink.JavaSink.class, false,
+            (type, exchange, value) -> 
org.apache.camel.component.smooks.converter.SourceConverter.toJavaSource((org.smooks.io.sink.JavaSink)
 value));
+        addTypeConverter(registry, 
org.smooks.io.source.JavaSourceWithoutEventStream.class, 
java.lang.Object.class, false,
             (type, exchange, value) -> 
org.apache.camel.component.smooks.converter.SourceConverter.toJavaSourceWithoutEventStream(value));
+        addTypeConverter(registry, org.smooks.io.source.StreamSource.class, 
java.io.InputStream.class, false,
+            (type, exchange, value) -> 
org.apache.camel.component.smooks.converter.SourceConverter.toStreamSource((java.io.InputStream)
 value));
+        addTypeConverter(registry, org.smooks.io.source.StringSource.class, 
java.lang.String.class, false,
+            (type, exchange, value) -> 
org.apache.camel.component.smooks.converter.SourceConverter.toStringSource((java.lang.String)
 value));
     }
 
     private static void addTypeConverter(TypeConverterRegistry registry, 
Class<?> toType, Class<?> fromType, boolean allowNull, 
SimpleTypeConverter.ConversionMethod method) {
diff --git 
a/components/camel-smooks/src/generated/resources/META-INF/services/org/apache/camel/TypeConverterLoader
 
b/components/camel-smooks/src/generated/resources/META-INF/services/org/apache/camel/TypeConverterLoader
index 5b76f723f6b..507592d2816 100644
--- 
a/components/camel-smooks/src/generated/resources/META-INF/services/org/apache/camel/TypeConverterLoader
+++ 
b/components/camel-smooks/src/generated/resources/META-INF/services/org/apache/camel/TypeConverterLoader
@@ -1,3 +1,3 @@
 # Generated by camel build tools - do NOT edit this file!
-org.apache.camel.component.smooks.converter.ResultConverterLoader
+org.apache.camel.component.smooks.converter.SinkConverterLoader
 org.apache.camel.component.smooks.converter.SourceConverterLoader
diff --git 
a/components/camel-smooks/src/main/java/org/apache/camel/component/smooks/SmooksProcessor.java
 
b/components/camel-smooks/src/main/java/org/apache/camel/component/smooks/SmooksProcessor.java
index 1464347362a..94e5aa7128a 100644
--- 
a/components/camel-smooks/src/main/java/org/apache/camel/component/smooks/SmooksProcessor.java
+++ 
b/components/camel-smooks/src/main/java/org/apache/camel/component/smooks/SmooksProcessor.java
@@ -20,14 +20,12 @@ import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.Reader;
+import java.net.MalformedURLException;
+import java.net.URL;
 import java.util.*;
 import java.util.Map.Entry;
 
-import javax.xml.transform.Result;
-import javax.xml.transform.Source;
-import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.sax.SAXSource;
-import javax.xml.transform.stream.StreamSource;
 
 import org.w3c.dom.Node;
 
@@ -50,10 +48,16 @@ import org.smooks.api.ExecutionContext;
 import org.smooks.api.SmooksException;
 import org.smooks.api.TypedKey;
 import org.smooks.api.delivery.VisitorAppender;
+import org.smooks.api.io.Sink;
+import org.smooks.api.io.Source;
 import org.smooks.api.resource.visitor.Visitor;
 import org.smooks.engine.lookup.ExportsLookup;
 import org.smooks.engine.report.HtmlReportGenerator;
 import org.smooks.io.payload.Exports;
+import org.smooks.io.source.DOMSource;
+import org.smooks.io.source.ReaderSource;
+import org.smooks.io.source.StreamSource;
+import org.smooks.io.source.URLSource;
 
 /**
  * Smooks {@link Processor} for Camel.
@@ -109,20 +113,20 @@ public class SmooksProcessor extends ServiceSupport 
implements Processor, CamelC
 
             final Exports exports = 
smooks.getApplicationContext().getRegistry().lookup(new ExportsLookup());
             if (exports.hasExports()) {
-                final Result[] results = exports.createResults();
-                smooks.filterSource(executionContext, getSource(exchange), 
results);
-                setResultOnBody(exports, results, exchange);
+                final Sink[] sinks = exports.createSinks();
+                smooks.filterSource(executionContext, getSource(exchange, 
executionContext), sinks);
+                setResultOnBody(exports, sinks, exchange);
             } else {
-                smooks.filterSource(executionContext, getSource(exchange));
+                smooks.filterSource(executionContext, getSource(exchange, 
executionContext));
             }
         } finally {
             executionContext.remove(EXCHANGE_TYPED_KEY);
         }
     }
 
-    protected void setResultOnBody(final Exports exports, final Result[] 
results, final Exchange exchange) {
+    protected void setResultOnBody(final Exports exports, final Sink[] sinks, 
final Exchange exchange) {
         final Message message = exchange.getMessage();
-        final List<Object> objects = Exports.extractResults(results, exports);
+        final List<Object> objects = Exports.extractSinks(sinks, exports);
         if (objects.size() == 1) {
             Object value = objects.get(0);
             message.setBody(value);
@@ -144,11 +148,11 @@ public class SmooksProcessor extends ServiceSupport 
implements Processor, CamelC
         }
     }
 
-    private Source getSource(final Exchange exchange) {
+    private Source getSource(final Exchange exchange, ExecutionContext 
executionContext) {
         Object payload = exchange.getIn().getBody();
 
         if (payload instanceof SAXSource) {
-            return new StreamSource((Reader) ((SAXSource) 
payload).getXMLReader());
+            return new ReaderSource<>((Reader) ((SAXSource) 
payload).getXMLReader());
         }
 
         if (payload instanceof Source) {
@@ -160,15 +164,22 @@ public class SmooksProcessor extends ServiceSupport 
implements Processor, CamelC
         }
 
         if (payload instanceof InputStream) {
-            return new StreamSource((InputStream) payload);
+            return new StreamSource<>((InputStream) payload);
         }
 
         if (payload instanceof Reader) {
-            return new StreamSource((Reader) payload);
+            return new ReaderSource<>((Reader) payload);
         }
 
         if (payload instanceof WrappedFile) {
-            return new StreamSource((File) 
exchange.getIn().getBody(WrappedFile.class).getFile());
+            String systemId
+                    = new javax.xml.transform.stream.StreamSource((File) 
exchange.getIn().getBody(WrappedFile.class).getFile())
+                            .getSystemId();
+            try {
+                return new URLSource(new URL(systemId));
+            } catch (MalformedURLException e) {
+                throw new SmooksException(e);
+            }
         }
 
         return exchange.getIn().getBody(Source.class);
diff --git 
a/components/camel-smooks/src/main/java/org/apache/camel/component/smooks/converter/ResultConverter.java
 
b/components/camel-smooks/src/main/java/org/apache/camel/component/smooks/converter/SinkConverter.java
similarity index 63%
rename from 
components/camel-smooks/src/main/java/org/apache/camel/component/smooks/converter/ResultConverter.java
rename to 
components/camel-smooks/src/main/java/org/apache/camel/component/smooks/converter/SinkConverter.java
index c467e81333b..beb66fbd1fe 100644
--- 
a/components/camel-smooks/src/main/java/org/apache/camel/component/smooks/converter/ResultConverter.java
+++ 
b/components/camel-smooks/src/main/java/org/apache/camel/component/smooks/converter/SinkConverter.java
@@ -16,71 +16,68 @@
  */
 package org.apache.camel.component.smooks.converter;
 
-import java.io.StringReader;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 
-import javax.xml.transform.Result;
-import javax.xml.transform.dom.DOMResult;
-import javax.xml.transform.stream.StreamSource;
-
 import org.w3c.dom.Node;
 
 import org.apache.camel.Converter;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.spi.TypeConverterRegistry;
-import org.smooks.io.payload.JavaResult;
-import org.smooks.io.payload.StringResult;
+import org.smooks.io.sink.DOMSink;
+import org.smooks.io.sink.JavaSink;
+import org.smooks.io.sink.StringSink;
+import org.smooks.io.source.StringSource;
 
 /**
- * ResultConverter converts from different {@link Result} types.
+ * Converts from different {@link org.smooks.api.io.Sink} types.
  */
 @Converter(generateLoader = true)
-public class ResultConverter {
+public class SinkConverter {
 
     public static final String SMOOKS_RESULT_KEY = "SmooksResultKeys";
 
-    private ResultConverter() {
+    private SinkConverter() {
     }
 
     @Converter
-    public static Node toDocument(DOMResult domResult) {
-        return domResult.getNode();
+    public static Node toDocument(DOMSink domSink) {
+        return domSink.getNode();
     }
 
     @SuppressWarnings("rawtypes")
     @Converter
-    public static List toList(JavaResult.ResultMap javaResult, Exchange 
exchange) {
+    public static List toList(JavaSink.ResultMap javaResult, Exchange 
exchange) {
         String resultKey = (String) exchange.getProperty(SMOOKS_RESULT_KEY);
         if (resultKey != null) {
-            return (List) getResultsFromJavaResult(javaResult, resultKey);
+            return (List) getResultsFromJavaSink(javaResult, resultKey);
         } else {
-            return (List) getSingleObjectFromJavaResult(javaResult);
+            return (List) getSingleObjectFromJavaSink(javaResult);
         }
     }
 
     @SuppressWarnings("rawtypes")
     @Converter
-    public static Integer toInteger(JavaResult.ResultMap result) {
-        return (Integer) getSingleObjectFromJavaResult(result);
+    public static Integer toInteger(JavaSink.ResultMap result) {
+        return (Integer) getSingleObjectFromJavaSink(result);
     }
 
     @SuppressWarnings("rawtypes")
     @Converter
-    public static Double toDouble(JavaResult.ResultMap result) {
-        return (Double) getSingleObjectFromJavaResult(result);
+    public static Double toDouble(JavaSink.ResultMap result) {
+        return (Double) getSingleObjectFromJavaSink(result);
     }
 
     @Converter
-    public static String toString(StringResult result) {
+    public static String toString(StringSink result) {
         return result.getResult();
     }
 
     @SuppressWarnings("rawtypes")
-    public static Map toMap(JavaResult.ResultMap resultBeans, Exchange 
exchange) {
+    public static Map toMap(JavaSink.ResultMap resultBeans, Exchange exchange) 
{
         Message outMessage = exchange.getOut();
         outMessage.setBody(resultBeans);
 
@@ -93,11 +90,11 @@ public class ResultConverter {
     }
 
     @SuppressWarnings("rawtypes")
-    private static Object getResultsFromJavaResult(JavaResult.ResultMap 
resultMap, String resultKey) {
+    private static Object getResultsFromJavaSink(JavaSink.ResultMap resultMap, 
String resultKey) {
         return resultMap.get(resultKey);
     }
 
-    private static Object 
getSingleObjectFromJavaResult(@SuppressWarnings("rawtypes") 
JavaResult.ResultMap resultMap) {
+    private static Object 
getSingleObjectFromJavaSink(@SuppressWarnings("rawtypes") JavaSink.ResultMap 
resultMap) {
         if (resultMap.size() == 1) {
             return resultMap.values().iterator().next();
         }
@@ -105,20 +102,15 @@ public class ResultConverter {
     }
 
     @Converter
-    public static StreamSource toStreamSource(StringResult stringResult) {
+    public static StringSource toStringSource(StringSink stringResult) {
         String result = stringResult.getResult();
-        if (result != null) {
-            StringReader stringReader = new StringReader(result);
-            return new StreamSource(stringReader);
-        }
-
-        return null;
+        return new StringSource(result);
     }
 
     @SuppressWarnings("rawtypes")
     @Converter(fallback = true)
     public static <T> T convertTo(Class<T> type, Exchange exchange, Object 
value, TypeConverterRegistry registry) {
-        if (value instanceof JavaResult.ResultMap) {
+        if (value instanceof JavaSink.ResultMap) {
             for (Object mapValue : ((Map) value).values()) {
                 if (type.isInstance(mapValue)) {
                     return type.cast(mapValue);
diff --git 
a/components/camel-smooks/src/main/java/org/apache/camel/component/smooks/converter/SourceConverter.java
 
b/components/camel-smooks/src/main/java/org/apache/camel/component/smooks/converter/SourceConverter.java
index 47333c9b63b..773bf4127ed 100644
--- 
a/components/camel-smooks/src/main/java/org/apache/camel/component/smooks/converter/SourceConverter.java
+++ 
b/components/camel-smooks/src/main/java/org/apache/camel/component/smooks/converter/SourceConverter.java
@@ -18,16 +18,19 @@ package org.apache.camel.component.smooks.converter;
 
 import java.io.File;
 import java.io.InputStream;
-
-import javax.xml.transform.Source;
-import javax.xml.transform.stream.StreamSource;
+import java.net.MalformedURLException;
+import java.net.URL;
 
 import org.apache.camel.Converter;
-import org.apache.camel.Exchange;
 import org.apache.camel.WrappedFile;
-import org.smooks.io.payload.JavaResult;
-import org.smooks.io.payload.JavaSource;
-import org.smooks.io.payload.JavaSourceWithoutEventStream;
+import org.smooks.api.SmooksException;
+import org.smooks.api.io.Source;
+import org.smooks.io.sink.JavaSink;
+import org.smooks.io.source.JavaSource;
+import org.smooks.io.source.JavaSourceWithoutEventStream;
+import org.smooks.io.source.StreamSource;
+import org.smooks.io.source.StringSource;
+import org.smooks.io.source.URLSource;
 
 /**
  * SourceConverter is a Camel {@link Converter} that converts from different 
formats to {@link Source} instances.
@@ -35,6 +38,7 @@ import org.smooks.io.payload.JavaSourceWithoutEventStream;
  */
 @Converter(generateLoader = true)
 public class SourceConverter {
+
     private SourceConverter() {
     }
 
@@ -49,24 +53,27 @@ public class SourceConverter {
     }
 
     @Converter
-    public static Source toStreamSource(InputStream in) {
-        return new StreamSource(in);
+    public static StreamSource toStreamSource(InputStream in) {
+        return new StreamSource<>(in);
     }
 
     @Converter
-    public static JavaSource toJavaSource(JavaResult result) {
+    public static JavaSource toJavaSource(JavaSink result) {
         return new JavaSource(result.getResultMap().values());
     }
 
-    @Converter(allowNull = true)
-    public static Source toStreamSource(WrappedFile<?> file, Exchange 
exchange) throws Exception {
-        Object obj = file.getFile();
-        if (obj instanceof File f) {
-            return new StreamSource(f);
-        } else {
-            InputStream is = 
exchange.getContext().getTypeConverter().mandatoryConvertTo(InputStream.class, 
file.getBody());
-            return new StreamSource(is);
-        }
+    @Converter
+    public static StringSource toStringSource(String string) {
+        return new StringSource(string);
     }
 
+    @Converter
+    public static Source toURISource(WrappedFile<File> genericFile) {
+        String systemId = new javax.xml.transform.stream.StreamSource((File) 
genericFile.getBody()).getSystemId();
+        try {
+            return new URLSource(new URL(systemId));
+        } catch (MalformedURLException e) {
+            throw new SmooksException(e);
+        }
+    }
 }
diff --git 
a/components/camel-smooks/src/test/java/org/apache/camel/component/smooks/SmooksProcessorTest.java
 
b/components/camel-smooks/src/test/java/org/apache/camel/component/smooks/SmooksProcessorTest.java
index 503728f1e7f..30fc5ad4cf7 100644
--- 
a/components/camel-smooks/src/test/java/org/apache/camel/component/smooks/SmooksProcessorTest.java
+++ 
b/components/camel-smooks/src/test/java/org/apache/camel/component/smooks/SmooksProcessorTest.java
@@ -27,8 +27,6 @@ import java.util.Map;
 import jakarta.activation.DataHandler;
 import jakarta.activation.DataSource;
 
-import javax.xml.transform.stream.StreamSource;
-
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
 
@@ -45,9 +43,10 @@ import org.smooks.Smooks;
 import org.smooks.cartridges.javabean.Bean;
 import org.smooks.cartridges.javabean.Value;
 import org.smooks.io.payload.Exports;
-import org.smooks.io.payload.JavaResult;
-import org.smooks.io.payload.StringResult;
-import org.smooks.io.payload.StringSource;
+import org.smooks.io.sink.JavaSink;
+import org.smooks.io.sink.StringSink;
+import org.smooks.io.source.StreamSource;
+import org.smooks.io.source.StringSource;
 import org.smooks.support.StreamUtils;
 import org.xmlunit.builder.DiffBuilder;
 
@@ -134,7 +133,7 @@ public class SmooksProcessorTest extends CamelTestSupport {
         context.addRoutes(new RouteBuilder() {
             @Override
             public void configure() {
-                Smooks smooks = new Smooks().setExports(new 
Exports(JavaResult.class));
+                Smooks smooks = new Smooks().setExports(new 
Exports(JavaSink.class));
                 from("direct:a")
                         .process(new SmooksProcessor(smooks, context)
                                 .addVisitor(new Value(
@@ -161,7 +160,7 @@ public class SmooksProcessorTest extends CamelTestSupport {
         context.addRoutes(new RouteBuilder() {
             public void configure() {
                 from("file://target/smooks")
-                        .process(new SmooksProcessor(new 
Smooks().setExports(new Exports(StringResult.class)), context))
+                        .process(new SmooksProcessor(new 
Smooks().setExports(new Exports(StringSink.class)), context))
                         .to("mock:a");
             }
         });
@@ -178,7 +177,7 @@ public class SmooksProcessorTest extends CamelTestSupport {
 
     @Test
     public void 
testProcessWhenSmooksExportIsJavaResultAndBodyIsVisitedByJavaBeanValue() throws 
Exception {
-        Smooks smooks = new Smooks().setExports(new Exports(JavaResult.class));
+        Smooks smooks = new Smooks().setExports(new Exports(JavaSink.class));
         context.addRoutes(new RouteBuilder() {
             @Override
             public void configure() {
@@ -197,7 +196,7 @@ public class SmooksProcessorTest extends CamelTestSupport {
 
     @Test
     public void 
testProcessWhenSmooksExportIsJavaResultAndBodyIsVisitedByMultipleJavaBeanValues()
 throws Exception {
-        Smooks smooks = new Smooks().setExports(new Exports(JavaResult.class));
+        Smooks smooks = new Smooks().setExports(new Exports(JavaSink.class));
         context.addRoutes(new RouteBuilder() {
             @Override
             public void configure() throws Exception {
@@ -218,7 +217,7 @@ public class SmooksProcessorTest extends CamelTestSupport {
 
     @Test
     public void 
testProcessWhenSmooksExportIsJavaResultAndBodyIsVisitedByBean() throws 
Exception {
-        Smooks smooks = new Smooks().setExports(new Exports(JavaResult.class));
+        Smooks smooks = new Smooks().setExports(new Exports(JavaSink.class));
         context.addRoutes(new RouteBuilder() {
             @Override
             public void configure() {
@@ -242,7 +241,7 @@ public class SmooksProcessorTest extends CamelTestSupport {
         context.addRoutes(new RouteBuilder() {
             public void configure() {
                 from("direct:a")
-                        .process(new SmooksProcessor(new 
Smooks().setExports(new Exports(StringResult.class)), context))
+                        .process(new SmooksProcessor(new 
Smooks().setExports(new Exports(StringSink.class)), context))
                         .to("direct:b");
 
                 from("direct:b").convertBodyTo(String.class).process(new 
DirectBProcessor());
diff --git 
a/components/camel-smooks/src/test/java/org/apache/camel/component/smooks/converter/ResultConverterTest.java
 
b/components/camel-smooks/src/test/java/org/apache/camel/component/smooks/converter/SinkConverterTest.java
similarity index 73%
rename from 
components/camel-smooks/src/test/java/org/apache/camel/component/smooks/converter/ResultConverterTest.java
rename to 
components/camel-smooks/src/test/java/org/apache/camel/component/smooks/converter/SinkConverterTest.java
index 08d3e52cb9d..ebb673f9354 100644
--- 
a/components/camel-smooks/src/test/java/org/apache/camel/component/smooks/converter/ResultConverterTest.java
+++ 
b/components/camel-smooks/src/test/java/org/apache/camel/component/smooks/converter/SinkConverterTest.java
@@ -17,19 +17,17 @@
 package org.apache.camel.component.smooks.converter;
 
 import java.io.BufferedReader;
-import java.io.StringWriter;
-
-import javax.xml.transform.stream.StreamSource;
 
 import org.apache.camel.TypeConverter;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
-import org.smooks.io.payload.StringResult;
+import org.smooks.io.sink.StringSink;
+import org.smooks.io.source.ReaderSource;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-public class ResultConverterTest {
+public class SinkConverterTest {
 
     private TypeConverter typeConverter;
 
@@ -41,19 +39,17 @@ public class ResultConverterTest {
 
     @Test
     public void convertStringResultToStreamSource() throws Exception {
-        StringResult stringResult = createStringResult("Bajja");
+        StringSink stringResult = createStringSink("Bajja");
 
-        StreamSource streamSource = 
typeConverter.convertTo(StreamSource.class, stringResult);
+        ReaderSource<?> streamSource = 
typeConverter.convertTo(ReaderSource.class, stringResult);
 
         BufferedReader reader = new BufferedReader(streamSource.getReader());
         assertEquals("Bajja", reader.readLine());
     }
 
-    private StringResult createStringResult(String string) {
-        StringWriter stringWriter = new StringWriter();
-        stringWriter.write(string);
-        StringResult stringResult = new StringResult();
-        stringResult.setWriter(stringWriter);
+    private StringSink createStringSink(String string) {
+        StringSink stringResult = new StringSink();
+        stringResult.getStringWriter().write(string);
         return stringResult;
     }
 
diff --git 
a/components/camel-smooks/src/test/java/org/apache/camel/component/smooks/converter/SourceConverterTest.java
 
b/components/camel-smooks/src/test/java/org/apache/camel/component/smooks/converter/SourceConverterTest.java
index fdc52368d11..ba93c5b2ce8 100644
--- 
a/components/camel-smooks/src/test/java/org/apache/camel/component/smooks/converter/SourceConverterTest.java
+++ 
b/components/camel-smooks/src/test/java/org/apache/camel/component/smooks/converter/SourceConverterTest.java
@@ -23,7 +23,7 @@ import org.apache.camel.TypeConverter;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
-import org.smooks.io.payload.JavaSourceWithoutEventStream;
+import org.smooks.io.source.JavaSourceWithoutEventStream;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
diff --git 
a/components/camel-smooks/src/test/resources/edi-to-xml-smooks-config.xml 
b/components/camel-smooks/src/test/resources/edi-to-xml-smooks-config.xml
index 82a5641a4e2..6d7e90daaa9 100644
--- a/components/camel-smooks/src/test/resources/edi-to-xml-smooks-config.xml
+++ b/components/camel-smooks/src/test/resources/edi-to-xml-smooks-config.xml
@@ -29,7 +29,7 @@
                 compositeDataElementSeparator="^"/>
 
     <core:exports>
-        <core:result type="javax.xml.transform.dom.DOMResult"/>
+        <core:result type="org.smooks.io.sink.DOMSink"/>
     </core:exports>
 
 </smooks-resource-list>
diff --git 
a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_9.adoc 
b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_9.adoc
index 7f63a78c87d..45ba2b3da35 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_9.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_9.adoc
@@ -34,6 +34,11 @@ The `camel-opentelemetry` component has had significant bug 
fixes to handle span
 better when Camel route messages synchronously and asynchronously. This 
component should also work better
 on Spring Boot.
 
+=== camel-smooks
+
+Upgraded Smooks from 2.0.0-RC4 to 2.0.1 which has
+https://www.smooks.org/documentation/#migrating_from_smooks_1_7_to_2_0[API 
breaking changes] in Smooks.
+
 === camel-hashicorp-vault properties function
 
 The syntax for retrieving a single field of a secret has been changed.
@@ -133,9 +138,3 @@ The following modules has been removed:
 
 * camel-kotlin-dsl
 * camel-kotlin-api
-
-=== Deprecated Components
-
-The following components that were marked as deprecated:
-
-* 
diff --git a/parent/pom.xml b/parent/pom.xml
index 0c4a85ad172..91ce169e991 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -450,7 +450,7 @@
         <smallrye-health-version>4.1.0</smallrye-health-version>
         
<smallrye-fault-tolerance-version>6.5.0</smallrye-fault-tolerance-version>
         <smbj-version>0.13.0</smbj-version>
-        <smooks-version>2.0.0-RC4</smooks-version>
+        <smooks-version>2.0.1</smooks-version>
         <snakeyaml-version>2.3</snakeyaml-version>
         <snakeyaml-engine-version>2.8</snakeyaml-engine-version>
         <snmp4j-version>3.8.2</snmp4j-version>

Reply via email to