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 72634d22720 fix: allow byte array in body to be processed in Smooks
component (#16147)
72634d22720 is described below
commit 72634d22720335bf5610b6af8ad8ca4d0658dba6
Author: cjmamo <[email protected]>
AuthorDate: Sat Nov 9 08:40:07 2024 +0100
fix: allow byte array in body to be processed in Smooks component (#16147)
require body to be source
---
.../camel/component/smooks/SmooksProcessor.java | 24 ++++++++------
.../component/smooks/SmooksProcessorTest.java | 37 +++++++++++++++++++---
2 files changed, 47 insertions(+), 14 deletions(-)
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 605ac7f78aa..efab7f17602 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
@@ -39,6 +39,7 @@ import org.xml.sax.SAXException;
import org.apache.camel.CamelContext;
import org.apache.camel.CamelContextAware;
import org.apache.camel.Exchange;
+import org.apache.camel.InvalidPayloadException;
import org.apache.camel.Message;
import org.apache.camel.Processor;
import org.apache.camel.RuntimeCamelException;
@@ -63,6 +64,7 @@ import org.smooks.engine.lookup.ExportsLookup;
import org.smooks.engine.report.HtmlReportGenerator;
import org.smooks.io.payload.Exports;
import org.smooks.io.sink.StreamSink;
+import org.smooks.io.source.ByteSource;
import org.smooks.io.source.DOMSource;
import org.smooks.io.source.ReaderSource;
import org.smooks.io.source.StreamSource;
@@ -147,7 +149,7 @@ public class SmooksProcessor extends ServiceSupport
implements Processor, CamelC
new StreamSink<>(outputStreamBuilder));
exchange.getMessage().setBody(outputStreamBuilder.build());
}
- } catch (IOException e) {
+ } catch (IOException | InvalidPayloadException e) {
throw new RuntimeCamelException(e);
} finally {
executionContext.remove(EXCHANGE_TYPED_KEY);
@@ -177,17 +179,17 @@ public class SmooksProcessor extends ServiceSupport
implements Processor, CamelC
}
}
- private Source getSource(final Exchange exchange) {
- Object payload = exchange.getIn().getBody();
-
- if (payload instanceof SAXSource) {
- return new ReaderSource<>((Reader) ((SAXSource)
payload).getXMLReader());
- }
+ private Source getSource(final Exchange exchange) throws
InvalidPayloadException {
+ final Object payload = exchange.getIn().getBody();
if (payload instanceof Source) {
return (Source) payload;
}
+ if (payload instanceof byte[]) {
+ return new ByteSource((byte[]) payload);
+ }
+
if (payload instanceof Node) {
return new DOMSource((Node) payload);
}
@@ -201,7 +203,7 @@ public class SmooksProcessor extends ServiceSupport
implements Processor, CamelC
}
if (payload instanceof WrappedFile) {
- String systemId
+ final String systemId
= new javax.xml.transform.stream.StreamSource((File)
exchange.getIn().getBody(WrappedFile.class).getFile())
.getSystemId();
try {
@@ -211,7 +213,11 @@ public class SmooksProcessor extends ServiceSupport
implements Processor, CamelC
}
}
- return exchange.getIn().getBody(Source.class);
+ if (payload instanceof SAXSource) {
+ return new ReaderSource<>((Reader) ((SAXSource)
payload).getXMLReader());
+ }
+
+ return exchange.getIn().getMandatoryBody(Source.class);
}
public String getSmooksConfig() {
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 79cd2633780..562560d3982 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
@@ -29,6 +29,7 @@ import jakarta.activation.DataSource;
import org.apache.camel.EndpointInject;
import org.apache.camel.Exchange;
+import org.apache.camel.InvalidPayloadException;
import org.apache.camel.Processor;
import org.apache.camel.attachment.AttachmentMessage;
import org.apache.camel.builder.RouteBuilder;
@@ -62,6 +63,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class SmooksProcessorTest extends CamelTestSupport {
@@ -79,6 +81,10 @@ public class SmooksProcessorTest extends CamelTestSupport {
result.expectedMessageCount(1);
template.sendBody("direct://input", getOrderEdi());
+ assertPostCondition();
+ }
+
+ private void assertPostCondition() throws InterruptedException,
IOException {
assertIsSatisfied();
Exchange exchange = result.assertExchangeReceived(0);
@@ -242,7 +248,28 @@ public class SmooksProcessorTest extends CamelTestSupport {
}
@Test
- public void testProcessGivenFileWhenSmooksExportIsStringResult() throws
Exception {
+ public void testProcessWhenBodyIsByteArray() throws Exception {
+ context.addRoutes(createEdiToXmlRouteBuilder());
+ context.start();
+
+ result.expectedMessageCount(1);
+ template.sendBody("direct://input", getOrderEdi().getBytes());
+
+ assertPostCondition();
+ }
+
+ @Test
+ public void testProcessWhenBodyIsNotSource() throws Exception {
+ context.addRoutes(createEdiToXmlRouteBuilder());
+ context.start();
+
+ RuntimeException runtimeException
+ = assertThrows(RuntimeException.class, () ->
template.sendBody("direct://input", new Object()));
+ assertEquals(InvalidPayloadException.class,
runtimeException.getCause().getCause().getClass());
+ }
+
+ @Test
+ public void testProcessWhenBodyIsFileAndSmooksExportIsStringSink() throws
Exception {
deleteDirectory("target/smooks");
context.addRoutes(new RouteBuilder() {
public void configure() {
@@ -263,7 +290,7 @@ public class SmooksProcessorTest extends CamelTestSupport {
}
@Test
- public void
testProcessWhenSmooksExportIsJavaResultAndBodyIsVisitedByJavaBeanValue() throws
Exception {
+ public void
testProcessWhenSmooksExportIsJavaSinkAndBodyIsVisitedByJavaBeanValue() throws
Exception {
Smooks smooks = new Smooks().setExports(new Exports(JavaSink.class));
context.addRoutes(new RouteBuilder() {
@Override
@@ -282,7 +309,7 @@ public class SmooksProcessorTest extends CamelTestSupport {
}
@Test
- public void
testProcessWhenSmooksExportIsJavaResultAndBodyIsVisitedByMultipleJavaBeanValues()
throws Exception {
+ public void
testProcessWhenSmooksExportIsJavaSinkAndBodyIsVisitedByMultipleJavaBeanValues()
throws Exception {
Smooks smooks = new Smooks().setExports(new Exports(JavaSink.class));
context.addRoutes(new RouteBuilder() {
@Override
@@ -303,7 +330,7 @@ public class SmooksProcessorTest extends CamelTestSupport {
}
@Test
- public void
testProcessWhenSmooksExportIsJavaResultAndBodyIsVisitedByBean() throws
Exception {
+ public void testProcessWhenSmooksExportIsJavaSinkAndBodyIsVisitedByBean()
throws Exception {
Smooks smooks = new Smooks().setExports(new Exports(JavaSink.class));
context.addRoutes(new RouteBuilder() {
@Override
@@ -324,7 +351,7 @@ public class SmooksProcessorTest extends CamelTestSupport {
}
@Test
- public void testProcessWhenSmooksExportIsStringResult() throws Exception {
+ public void testProcessWhenSmooksExportIsStringSink() throws Exception {
context.addRoutes(new RouteBuilder() {
public void configure() {
from("direct:a")