This is an automated email from the ASF dual-hosted git repository. acosentino pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-kamelets.git
commit 606adff22fe9165d6372d35440640b594e63f3c7 Author: Christoph Deppisch <cdeppi...@redhat.com> AuthorDate: Tue Nov 29 09:53:51 2022 +0100 Move AWS S3 binary output type to generic level --- .../utils/format/DefaultDataTypeConverter.java | 10 +++- .../utils/format/DefaultDataTypeRegistry.java | 15 ++++-- .../converter/aws2/s3/AWS2S3BinaryOutputType.java | 55 ---------------------- .../format/converter/standard/BinaryDataType.java | 38 +++++++++++++++ .../format/converter/standard/StringDataType.java | 38 +++++++++++++++ .../converter/{aws2-s3-binary => camel-binary} | 2 +- .../converter/{aws2-s3-binary => camel-jsonObject} | 2 +- .../converter/{aws2-s3-binary => camel-string} | 2 +- .../utils/format/DefaultDataTypeRegistryTest.java | 8 ++-- .../BinaryDataTypeTest.java} | 41 +++++++++------- .../StringDataTypeTest.java} | 49 +++++++++---------- 11 files changed, 150 insertions(+), 110 deletions(-) diff --git a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/DefaultDataTypeConverter.java b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/DefaultDataTypeConverter.java index 9f2c31ce..b639ceae 100644 --- a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/DefaultDataTypeConverter.java +++ b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/DefaultDataTypeConverter.java @@ -17,9 +17,12 @@ package org.apache.camel.kamelets.utils.format; +import org.apache.camel.CamelExecutionException; import org.apache.camel.Exchange; +import org.apache.camel.InvalidPayloadException; import org.apache.camel.kamelets.utils.format.spi.DataTypeConverter; import org.apache.camel.kamelets.utils.format.spi.annotations.DataType; +import org.apache.camel.util.ObjectHelper; /** * Default data type converter receives a name and a target type in order to use traditional exchange body conversion @@ -53,7 +56,12 @@ public class DefaultDataTypeConverter implements DataTypeConverter { return; } - exchange.getMessage().setBody(exchange.getMessage().getBody(type)); + try { + exchange.getMessage().setBody(exchange.getMessage().getMandatoryBody(type)); + } catch (InvalidPayloadException e) { + throw new CamelExecutionException(String.format("Failed to convert exchange body to '%s' content using type %s", + name, ObjectHelper.name(type)), exchange, e); + } } @Override diff --git a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/DefaultDataTypeRegistry.java b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/DefaultDataTypeRegistry.java index 3d5b514e..1e530468 100644 --- a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/DefaultDataTypeRegistry.java +++ b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/DefaultDataTypeRegistry.java @@ -26,6 +26,9 @@ import java.util.Optional; import org.apache.camel.CamelContext; import org.apache.camel.CamelContextAware; import org.apache.camel.RuntimeCamelException; +import org.apache.camel.kamelets.utils.format.converter.standard.BinaryDataType; +import org.apache.camel.kamelets.utils.format.converter.standard.JsonModelDataType; +import org.apache.camel.kamelets.utils.format.converter.standard.StringDataType; import org.apache.camel.kamelets.utils.format.spi.DataTypeConverter; import org.apache.camel.kamelets.utils.format.spi.DataTypeConverterResolver; import org.apache.camel.kamelets.utils.format.spi.DataTypeLoader; @@ -55,6 +58,7 @@ public class DefaultDataTypeRegistry extends ServiceSupport implements DataTypeR private DataTypeConverterResolver dataTypeConverterResolver; private boolean classpathScan = true; + private boolean useDefaultConverters = true; private final Map<String, List<DataTypeConverter>> dataTypeConverters = new HashMap<>(); @@ -100,11 +104,12 @@ public class DefaultDataTypeRegistry extends ServiceSupport implements DataTypeR if (classpathScan) { dataTypeLoaders.add(new AnnotationDataTypeLoader()); + } else if (useDefaultConverters) { + addDataTypeConverter(new BinaryDataType()); + addDataTypeConverter(new StringDataType()); + addDataTypeConverter(new JsonModelDataType()); } - addDataTypeConverter(new DefaultDataTypeConverter(DataType.DEFAULT_SCHEME, "string", "text/plain", String.class)); - addDataTypeConverter(new DefaultDataTypeConverter(DataType.DEFAULT_SCHEME, "binary", "application/octet-stream", byte[].class)); - for (DataTypeLoader loader : dataTypeLoaders) { CamelContextAware.trySetCamelContext(loader, getCamelContext()); loader.load(this); @@ -180,6 +185,10 @@ public class DefaultDataTypeRegistry extends ServiceSupport implements DataTypeR this.classpathScan = classpathScan; } + public void setUseDefaultConverters(boolean useDefaultConverters) { + this.useDefaultConverters = useDefaultConverters; + } + @Override public CamelContext getCamelContext() { return camelContext; diff --git a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/converter/aws2/s3/AWS2S3BinaryOutputType.java b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/converter/aws2/s3/AWS2S3BinaryOutputType.java deleted file mode 100644 index 5f1fa0b8..00000000 --- a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/converter/aws2/s3/AWS2S3BinaryOutputType.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.camel.kamelets.utils.format.converter.aws2.s3; - -import java.io.IOException; -import java.io.InputStream; - -import org.apache.camel.CamelExecutionException; -import org.apache.camel.Exchange; -import org.apache.camel.InvalidPayloadException; -import org.apache.camel.kamelets.utils.format.spi.DataTypeConverter; -import org.apache.camel.kamelets.utils.format.spi.annotations.DataType; -import software.amazon.awssdk.utils.IoUtils; - -/** - * Binary output type. - */ -@DataType(scheme = "aws2-s3", name = "binary", mediaType = "application/octet-stream") -public class AWS2S3BinaryOutputType implements DataTypeConverter { - - @Override - public void convert(Exchange exchange) { - if (exchange.getMessage().getBody() instanceof byte[]) { - return; - } - - try { - InputStream is = exchange.getMessage().getBody(InputStream.class); - if (is != null) { - exchange.getMessage().setBody(IoUtils.toByteArray(is)); - return; - } - - // Use default Camel converter utils to convert body to byte[] - exchange.getMessage().setBody(exchange.getMessage().getMandatoryBody(byte[].class)); - } catch (IOException | InvalidPayloadException e) { - throw new CamelExecutionException("Failed to convert AWS S3 body to byte[]", exchange, e); - } - } -} diff --git a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/converter/standard/BinaryDataType.java b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/converter/standard/BinaryDataType.java new file mode 100644 index 00000000..532e998b --- /dev/null +++ b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/converter/standard/BinaryDataType.java @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.camel.kamelets.utils.format.converter.standard; + +import org.apache.camel.Exchange; +import org.apache.camel.kamelets.utils.format.DefaultDataTypeConverter; +import org.apache.camel.kamelets.utils.format.spi.DataTypeConverter; +import org.apache.camel.kamelets.utils.format.spi.annotations.DataType; + +/** + * Binary data type. + */ +@DataType(name = "binary", mediaType = "application/octet-stream") +public class BinaryDataType implements DataTypeConverter { + + private static final DataTypeConverter DELEGATE = + new DefaultDataTypeConverter(DataType.DEFAULT_SCHEME, "binary", "application/octet-stream", byte[].class); + + @Override + public void convert(Exchange exchange) { + DELEGATE.convert(exchange); + } +} diff --git a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/converter/standard/StringDataType.java b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/converter/standard/StringDataType.java new file mode 100644 index 00000000..d60b2aaa --- /dev/null +++ b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/converter/standard/StringDataType.java @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.camel.kamelets.utils.format.converter.standard; + +import org.apache.camel.Exchange; +import org.apache.camel.kamelets.utils.format.DefaultDataTypeConverter; +import org.apache.camel.kamelets.utils.format.spi.DataTypeConverter; +import org.apache.camel.kamelets.utils.format.spi.annotations.DataType; + +/** + * String data type. + */ +@DataType(name = "string", mediaType = "text/plain") +public class StringDataType implements DataTypeConverter { + + private static final DataTypeConverter DELEGATE = + new DefaultDataTypeConverter(DataType.DEFAULT_SCHEME, "string", "text/plain", String.class); + + @Override + public void convert(Exchange exchange) { + DELEGATE.convert(exchange); + } +} diff --git a/library/camel-kamelets-utils/src/main/resources/META-INF/services/org/apache/camel/datatype/converter/aws2-s3-binary b/library/camel-kamelets-utils/src/main/resources/META-INF/services/org/apache/camel/datatype/converter/camel-binary similarity index 90% copy from library/camel-kamelets-utils/src/main/resources/META-INF/services/org/apache/camel/datatype/converter/aws2-s3-binary copy to library/camel-kamelets-utils/src/main/resources/META-INF/services/org/apache/camel/datatype/converter/camel-binary index ba9c13f3..edf9a4ca 100644 --- a/library/camel-kamelets-utils/src/main/resources/META-INF/services/org/apache/camel/datatype/converter/aws2-s3-binary +++ b/library/camel-kamelets-utils/src/main/resources/META-INF/services/org/apache/camel/datatype/converter/camel-binary @@ -15,4 +15,4 @@ # limitations under the License. # -class=org.apache.camel.kamelets.utils.format.converter.aws2.s3.AWS2S3BinaryOutputType \ No newline at end of file +class=org.apache.camel.kamelets.utils.format.converter.standard.BinaryDataType \ No newline at end of file diff --git a/library/camel-kamelets-utils/src/main/resources/META-INF/services/org/apache/camel/datatype/converter/aws2-s3-binary b/library/camel-kamelets-utils/src/main/resources/META-INF/services/org/apache/camel/datatype/converter/camel-jsonObject similarity index 90% copy from library/camel-kamelets-utils/src/main/resources/META-INF/services/org/apache/camel/datatype/converter/aws2-s3-binary copy to library/camel-kamelets-utils/src/main/resources/META-INF/services/org/apache/camel/datatype/converter/camel-jsonObject index ba9c13f3..2f725f6a 100644 --- a/library/camel-kamelets-utils/src/main/resources/META-INF/services/org/apache/camel/datatype/converter/aws2-s3-binary +++ b/library/camel-kamelets-utils/src/main/resources/META-INF/services/org/apache/camel/datatype/converter/camel-jsonObject @@ -15,4 +15,4 @@ # limitations under the License. # -class=org.apache.camel.kamelets.utils.format.converter.aws2.s3.AWS2S3BinaryOutputType \ No newline at end of file +class=org.apache.camel.kamelets.utils.format.converter.standard.JsonModelDataType \ No newline at end of file diff --git a/library/camel-kamelets-utils/src/main/resources/META-INF/services/org/apache/camel/datatype/converter/aws2-s3-binary b/library/camel-kamelets-utils/src/main/resources/META-INF/services/org/apache/camel/datatype/converter/camel-string similarity index 90% rename from library/camel-kamelets-utils/src/main/resources/META-INF/services/org/apache/camel/datatype/converter/aws2-s3-binary rename to library/camel-kamelets-utils/src/main/resources/META-INF/services/org/apache/camel/datatype/converter/camel-string index ba9c13f3..8ef25725 100644 --- a/library/camel-kamelets-utils/src/main/resources/META-INF/services/org/apache/camel/datatype/converter/aws2-s3-binary +++ b/library/camel-kamelets-utils/src/main/resources/META-INF/services/org/apache/camel/datatype/converter/camel-string @@ -15,4 +15,4 @@ # limitations under the License. # -class=org.apache.camel.kamelets.utils.format.converter.aws2.s3.AWS2S3BinaryOutputType \ No newline at end of file +class=org.apache.camel.kamelets.utils.format.converter.standard.StringDataType \ No newline at end of file diff --git a/library/camel-kamelets-utils/src/test/java/org/apache/camel/kamelets/utils/format/DefaultDataTypeRegistryTest.java b/library/camel-kamelets-utils/src/test/java/org/apache/camel/kamelets/utils/format/DefaultDataTypeRegistryTest.java index c72e7897..d83c474b 100644 --- a/library/camel-kamelets-utils/src/test/java/org/apache/camel/kamelets/utils/format/DefaultDataTypeRegistryTest.java +++ b/library/camel-kamelets-utils/src/test/java/org/apache/camel/kamelets/utils/format/DefaultDataTypeRegistryTest.java @@ -21,7 +21,9 @@ import java.util.Optional; import org.apache.camel.CamelContextAware; import org.apache.camel.impl.DefaultCamelContext; +import org.apache.camel.kamelets.utils.format.converter.standard.BinaryDataType; import org.apache.camel.kamelets.utils.format.converter.standard.JsonModelDataType; +import org.apache.camel.kamelets.utils.format.converter.standard.StringDataType; import org.apache.camel.kamelets.utils.format.converter.test.UppercaseDataType; import org.apache.camel.kamelets.utils.format.spi.DataTypeConverter; import org.junit.jupiter.api.Assertions; @@ -44,12 +46,10 @@ class DefaultDataTypeRegistryTest { Assertions.assertEquals(JsonModelDataType.class, converter.get().getClass()); converter = dataTypeRegistry.lookup( "string"); Assertions.assertTrue(converter.isPresent()); - Assertions.assertEquals(DefaultDataTypeConverter.class, converter.get().getClass()); - Assertions.assertEquals(String.class, ((DefaultDataTypeConverter) converter.get()).getType()); + Assertions.assertEquals(StringDataType.class, converter.get().getClass()); converter = dataTypeRegistry.lookup( "binary"); Assertions.assertTrue(converter.isPresent()); - Assertions.assertEquals(DefaultDataTypeConverter.class, converter.get().getClass()); - Assertions.assertEquals(byte[].class, ((DefaultDataTypeConverter) converter.get()).getType()); + Assertions.assertEquals(BinaryDataType.class, converter.get().getClass()); converter = dataTypeRegistry.lookup( "lowercase"); Assertions.assertTrue(converter.isPresent()); converter = dataTypeRegistry.lookup( "uppercase"); diff --git a/library/camel-kamelets-utils/src/test/java/org/apache/camel/kamelets/utils/format/converter/aws2/s3/AWS2S3BinaryOutputTypeTest.java b/library/camel-kamelets-utils/src/test/java/org/apache/camel/kamelets/utils/format/converter/standard/BinaryDataTypeTest.java similarity index 72% copy from library/camel-kamelets-utils/src/test/java/org/apache/camel/kamelets/utils/format/converter/aws2/s3/AWS2S3BinaryOutputTypeTest.java copy to library/camel-kamelets-utils/src/test/java/org/apache/camel/kamelets/utils/format/converter/standard/BinaryDataTypeTest.java index 26b359f4..d2dd616a 100644 --- a/library/camel-kamelets-utils/src/test/java/org/apache/camel/kamelets/utils/format/converter/aws2/s3/AWS2S3BinaryOutputTypeTest.java +++ b/library/camel-kamelets-utils/src/test/java/org/apache/camel/kamelets/utils/format/converter/standard/BinaryDataTypeTest.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.kamelets.utils.format.converter.aws2.s3; +package org.apache.camel.kamelets.utils.format.converter.standard; import java.io.ByteArrayInputStream; import java.nio.charset.StandardCharsets; @@ -22,32 +22,40 @@ import java.util.Optional; import org.apache.camel.CamelContextAware; import org.apache.camel.Exchange; -import org.apache.camel.component.aws2.s3.AWS2S3Constants; import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.kamelets.utils.format.DefaultDataTypeRegistry; import org.apache.camel.kamelets.utils.format.spi.DataTypeConverter; import org.apache.camel.support.DefaultExchange; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import software.amazon.awssdk.core.ResponseInputStream; -import software.amazon.awssdk.http.AbortableInputStream; -import software.amazon.awssdk.services.s3.model.GetObjectRequest; import static org.junit.jupiter.api.Assertions.assertEquals; -public class AWS2S3BinaryOutputTypeTest { +public class BinaryDataTypeTest { private final DefaultCamelContext camelContext = new DefaultCamelContext(); - private final AWS2S3BinaryOutputType outputType = new AWS2S3BinaryOutputType(); + private final BinaryDataType dataType = new BinaryDataType(); + + @Test + void shouldRetainBytesModel() throws Exception { + Exchange exchange = new DefaultExchange(camelContext); + + exchange.getMessage().setHeader("file", "test.txt"); + exchange.getMessage().setBody("Test".getBytes(StandardCharsets.UTF_8)); + dataType.convert(exchange); + + Assertions.assertTrue(exchange.getMessage().hasHeaders()); + assertBinaryBody(exchange, "test.txt", "Test"); + } @Test void shouldMapFromStringToBytesModel() throws Exception { Exchange exchange = new DefaultExchange(camelContext); - exchange.getMessage().setHeader(AWS2S3Constants.KEY, "test1.txt"); + exchange.getMessage().setHeader("file", "test1.txt"); exchange.getMessage().setBody("Test1"); - outputType.convert(exchange); + dataType.convert(exchange); Assertions.assertTrue(exchange.getMessage().hasHeaders()); assertBinaryBody(exchange, "test1.txt", "Test1"); @@ -57,9 +65,9 @@ public class AWS2S3BinaryOutputTypeTest { void shouldMapFromBytesToBytesModel() throws Exception { Exchange exchange = new DefaultExchange(camelContext); - exchange.getMessage().setHeader(AWS2S3Constants.KEY, "test2.txt"); + exchange.getMessage().setHeader("file", "test2.txt"); exchange.getMessage().setBody("Test2".getBytes(StandardCharsets.UTF_8)); - outputType.convert(exchange); + dataType.convert(exchange); Assertions.assertTrue(exchange.getMessage().hasHeaders()); assertBinaryBody(exchange, "test2.txt", "Test2"); @@ -69,10 +77,9 @@ public class AWS2S3BinaryOutputTypeTest { void shouldMapFromInputStreamToBytesModel() throws Exception { Exchange exchange = new DefaultExchange(camelContext); - exchange.getMessage().setHeader(AWS2S3Constants.KEY, "test3.txt"); - exchange.getMessage().setBody(new ResponseInputStream<>(GetObjectRequest.builder().bucket("myBucket").key("test3.txt").build(), - AbortableInputStream.create(new ByteArrayInputStream("Test3".getBytes(StandardCharsets.UTF_8))))); - outputType.convert(exchange); + exchange.getMessage().setHeader("file", "test3.txt"); + exchange.getMessage().setBody(new ByteArrayInputStream("Test3".getBytes(StandardCharsets.UTF_8))); + dataType.convert(exchange); Assertions.assertTrue(exchange.getMessage().hasHeaders()); assertBinaryBody(exchange, "test3.txt", "Test3"); @@ -82,12 +89,12 @@ public class AWS2S3BinaryOutputTypeTest { public void shouldLookupDataType() throws Exception { DefaultDataTypeRegistry dataTypeRegistry = new DefaultDataTypeRegistry(); CamelContextAware.trySetCamelContext(dataTypeRegistry, camelContext); - Optional<DataTypeConverter> converter = dataTypeRegistry.lookup("aws2-s3", "binary"); + Optional<DataTypeConverter> converter = dataTypeRegistry.lookup( "binary"); Assertions.assertTrue(converter.isPresent()); } private static void assertBinaryBody(Exchange exchange, String key, String content) { - assertEquals(key, exchange.getMessage().getHeader(AWS2S3Constants.KEY)); + assertEquals(key, exchange.getMessage().getHeader("file")); assertEquals(byte[].class, exchange.getMessage().getBody().getClass()); assertEquals(content, exchange.getMessage().getBody(String.class)); diff --git a/library/camel-kamelets-utils/src/test/java/org/apache/camel/kamelets/utils/format/converter/aws2/s3/AWS2S3BinaryOutputTypeTest.java b/library/camel-kamelets-utils/src/test/java/org/apache/camel/kamelets/utils/format/converter/standard/StringDataTypeTest.java similarity index 58% rename from library/camel-kamelets-utils/src/test/java/org/apache/camel/kamelets/utils/format/converter/aws2/s3/AWS2S3BinaryOutputTypeTest.java rename to library/camel-kamelets-utils/src/test/java/org/apache/camel/kamelets/utils/format/converter/standard/StringDataTypeTest.java index 26b359f4..8ee19cba 100644 --- a/library/camel-kamelets-utils/src/test/java/org/apache/camel/kamelets/utils/format/converter/aws2/s3/AWS2S3BinaryOutputTypeTest.java +++ b/library/camel-kamelets-utils/src/test/java/org/apache/camel/kamelets/utils/format/converter/standard/StringDataTypeTest.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.kamelets.utils.format.converter.aws2.s3; +package org.apache.camel.kamelets.utils.format.converter.standard; import java.io.ByteArrayInputStream; import java.nio.charset.StandardCharsets; @@ -22,74 +22,69 @@ import java.util.Optional; import org.apache.camel.CamelContextAware; import org.apache.camel.Exchange; -import org.apache.camel.component.aws2.s3.AWS2S3Constants; import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.kamelets.utils.format.DefaultDataTypeRegistry; import org.apache.camel.kamelets.utils.format.spi.DataTypeConverter; import org.apache.camel.support.DefaultExchange; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import software.amazon.awssdk.core.ResponseInputStream; -import software.amazon.awssdk.http.AbortableInputStream; -import software.amazon.awssdk.services.s3.model.GetObjectRequest; import static org.junit.jupiter.api.Assertions.assertEquals; -public class AWS2S3BinaryOutputTypeTest { +public class StringDataTypeTest { private final DefaultCamelContext camelContext = new DefaultCamelContext(); - private final AWS2S3BinaryOutputType outputType = new AWS2S3BinaryOutputType(); + private final StringDataType dataType = new StringDataType(); @Test - void shouldMapFromStringToBytesModel() throws Exception { + void shouldRetainStringModel() throws Exception { Exchange exchange = new DefaultExchange(camelContext); - exchange.getMessage().setHeader(AWS2S3Constants.KEY, "test1.txt"); - exchange.getMessage().setBody("Test1"); - outputType.convert(exchange); + exchange.getMessage().setHeader("file", "test.txt"); + exchange.getMessage().setBody("Test"); + dataType.convert(exchange); Assertions.assertTrue(exchange.getMessage().hasHeaders()); - assertBinaryBody(exchange, "test1.txt", "Test1"); + assertStringBody(exchange, "test.txt", "Test"); } @Test - void shouldMapFromBytesToBytesModel() throws Exception { + void shouldMapFromBinaryToStringModel() throws Exception { Exchange exchange = new DefaultExchange(camelContext); - exchange.getMessage().setHeader(AWS2S3Constants.KEY, "test2.txt"); - exchange.getMessage().setBody("Test2".getBytes(StandardCharsets.UTF_8)); - outputType.convert(exchange); + exchange.getMessage().setHeader("file", "test1.txt"); + exchange.getMessage().setBody("Test1".getBytes(StandardCharsets.UTF_8)); + dataType.convert(exchange); Assertions.assertTrue(exchange.getMessage().hasHeaders()); - assertBinaryBody(exchange, "test2.txt", "Test2"); + assertStringBody(exchange, "test1.txt", "Test1"); } @Test - void shouldMapFromInputStreamToBytesModel() throws Exception { + void shouldMapFromInputStreamToStringModel() throws Exception { Exchange exchange = new DefaultExchange(camelContext); - exchange.getMessage().setHeader(AWS2S3Constants.KEY, "test3.txt"); - exchange.getMessage().setBody(new ResponseInputStream<>(GetObjectRequest.builder().bucket("myBucket").key("test3.txt").build(), - AbortableInputStream.create(new ByteArrayInputStream("Test3".getBytes(StandardCharsets.UTF_8))))); - outputType.convert(exchange); + exchange.getMessage().setHeader("file", "test3.txt"); + exchange.getMessage().setBody(new ByteArrayInputStream("Test3".getBytes(StandardCharsets.UTF_8))); + dataType.convert(exchange); Assertions.assertTrue(exchange.getMessage().hasHeaders()); - assertBinaryBody(exchange, "test3.txt", "Test3"); + assertStringBody(exchange, "test3.txt", "Test3"); } @Test public void shouldLookupDataType() throws Exception { DefaultDataTypeRegistry dataTypeRegistry = new DefaultDataTypeRegistry(); CamelContextAware.trySetCamelContext(dataTypeRegistry, camelContext); - Optional<DataTypeConverter> converter = dataTypeRegistry.lookup("aws2-s3", "binary"); + Optional<DataTypeConverter> converter = dataTypeRegistry.lookup( "string"); Assertions.assertTrue(converter.isPresent()); } - private static void assertBinaryBody(Exchange exchange, String key, String content) { - assertEquals(key, exchange.getMessage().getHeader(AWS2S3Constants.KEY)); + private static void assertStringBody(Exchange exchange, String key, String content) { + assertEquals(key, exchange.getMessage().getHeader("file")); - assertEquals(byte[].class, exchange.getMessage().getBody().getClass()); + assertEquals(String.class, exchange.getMessage().getBody().getClass()); assertEquals(content, exchange.getMessage().getBody(String.class)); } }