This is an automated email from the ASF dual-hosted git repository.
ppalaga pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/main by this push:
new 48c8454 Test TypeConverters #2537
48c8454 is described below
commit 48c8454299bfe982c665cd49a9a077682e87d14d
Author: JiriOndrusek <[email protected]>
AuthorDate: Wed May 12 10:13:13 2021 +0200
Test TypeConverters #2537
---
.../deployment/CustomTypeConverterBuildStep.java | 15 ++-
.../custom-type-converter/runtime/pom.xml | 37 ++++++
...portCustomTypeConverterBulkConverterLoader.java | 74 +++++++++++
.../converters/MyLoaderConverterLoader.java | 36 ++++++
.../services/org/apache/camel/TypeConverterLoader | 2 +
.../typeconverter/CustomTypeConverterRecorder.java | 11 ++
.../quarkus/it/support/typeconverter/MyPair.java | 20 +--
...order.java => RegistryPairConverterLoader.java} | 17 ++-
.../typeconverter/converters/MyBulk1Converter.java | 11 +-
.../typeconverter/converters/MyBulk2Converter.java | 11 +-
.../converters/MyLoaderConverter.java | 11 +-
.../{MyPair.java => pairs/AbstractPair.java} | 16 ++-
.../support/typeconverter/pairs/MyBulk1Pair.java | 15 +--
.../support/typeconverter/pairs/MyBulk2Pair.java | 15 +--
.../support/typeconverter/pairs/MyLoaderPair.java | 15 +--
.../typeconverter/pairs/MyRegistryPair.java | 15 +--
integration-tests/core/pom.xml | 4 +
.../camel/quarkus/core/ConverterResource.java | 137 +++++++++++++++++++++
.../apache/camel/quarkus/core/CoreResource.java | 10 --
.../{AnnotatedMyPair.java => MyExchangePair.java} | 16 ++-
...PairConverter.java => MyNotRegisteredPair.java} | 14 ++-
...tedMyPairConverter.java => MyNullablePair.java} | 15 ++-
...notatedMyPairConverter.java => MyTestPair.java} | 14 ++-
...erter.java => NotRegisteredBulkConverters.java} | 8 +-
...Converter.java => NotRegisteredConverters.java} | 8 +-
.../quarkus/core/converter/TestConverters.java | 73 +++++++++++
.../apache/camel/quarkus/core/ConverterIT.java} | 13 +-
.../apache/camel/quarkus/core/ConverterTest.java | 129 +++++++++++++++++++
.../org/apache/camel/quarkus/core/CoreTest.java | 14 ---
29 files changed, 640 insertions(+), 136 deletions(-)
diff --git
a/integration-tests-support/custom-type-converter/deployment/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/deployment/CustomTypeConverterBuildStep.java
b/integration-tests-support/custom-type-converter/deployment/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/deployment/CustomTypeConverterBuildStep.java
index 0fa6664..0efd5d0 100644
---
a/integration-tests-support/custom-type-converter/deployment/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/deployment/CustomTypeConverterBuildStep.java
+++
b/integration-tests-support/custom-type-converter/deployment/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/deployment/CustomTypeConverterBuildStep.java
@@ -16,16 +16,27 @@
*/
package org.apache.camel.quarkus.it.support.typeconverter.deployment;
+import io.quarkus.deployment.annotations.BuildProducer;
import io.quarkus.deployment.annotations.BuildStep;
import io.quarkus.deployment.annotations.ExecutionTime;
import io.quarkus.deployment.annotations.Record;
+import org.apache.camel.quarkus.core.deployment.spi.CamelRegistryBuildItem;
import
org.apache.camel.quarkus.core.deployment.spi.CamelTypeConverterLoaderBuildItem;
import
org.apache.camel.quarkus.it.support.typeconverter.CustomTypeConverterRecorder;
public class CustomTypeConverterBuildStep {
@Record(ExecutionTime.STATIC_INIT)
@BuildStep
- CamelTypeConverterLoaderBuildItem
typeConverterLoader(CustomTypeConverterRecorder recorder) {
- return new
CamelTypeConverterLoaderBuildItem(recorder.createTypeConverterLoader());
+ void typeConverterLoaders(BuildProducer<CamelTypeConverterLoaderBuildItem>
loaders, CustomTypeConverterRecorder recorder) {
+ loaders.produce(new
CamelTypeConverterLoaderBuildItem(recorder.createTypeConverterLoader()));
+ loaders.produce(new
CamelTypeConverterLoaderBuildItem(recorder.getBulkConverterLoader()));
}
+
+ @Record(ExecutionTime.STATIC_INIT)
+ @BuildStep
+ void bindMyStringConverter(CustomTypeConverterRecorder recorder,
+ CamelRegistryBuildItem registryBuildItem) {
+
recorder.bindMyRegistryConverterLoader(registryBuildItem.getRegistry());
+ }
+
}
diff --git a/integration-tests-support/custom-type-converter/runtime/pom.xml
b/integration-tests-support/custom-type-converter/runtime/pom.xml
index 3d6b05d..63ba7b3 100644
--- a/integration-tests-support/custom-type-converter/runtime/pom.xml
+++ b/integration-tests-support/custom-type-converter/runtime/pom.xml
@@ -67,6 +67,43 @@
</annotationProcessorPaths>
</configuration>
</plugin>
+ <plugin>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-package-maven-plugin</artifactId>
+ <version>${camel.version}</version>
+ <executions>
+ <execution>
+ <id>generate</id>
+ <goals>
+ <goal>generate-component</goal>
+ </goals>
+ <phase>process-classes</phase>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>initialize</phase>
+ <goals>
+ <goal>add-source</goal>
+ <goal>add-resource</goal>
+ </goals>
+ <configuration>
+ <sources>
+ <source>src/generated/java</source>
+ </sources>
+ <resources>
+ <resource>
+
<directory>src/generated/resources</directory>
+ </resource>
+ </resources>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
</plugins>
</build>
</project>
diff --git
a/integration-tests-support/custom-type-converter/runtime/src/generated/java/org/apache/camel/quarkus/it/support/typeconverter/converters/CamelQuarkusIntegrationTestsSupportCustomTypeConverterBulkConverterLoader.java
b/integration-tests-support/custom-type-converter/runtime/src/generated/java/org/apache/camel/quarkus/it/support/typeconverter/converters/CamelQuarkusIntegrationTestsSupportCustomTypeConverterBulkConverterLoader.java
new file mode 100644
index 0000000..0e9fea2
--- /dev/null
+++
b/integration-tests-support/custom-type-converter/runtime/src/generated/java/org/apache/camel/quarkus/it/support/typeconverter/converters/CamelQuarkusIntegrationTestsSupportCustomTypeConverterBulkConverterLoader.java
@@ -0,0 +1,74 @@
+/* Generated by camel build tools - do NOT edit this file! */
+package org.apache.camel.quarkus.it.support.typeconverter.converters;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Ordered;
+import org.apache.camel.TypeConversionException;
+import org.apache.camel.TypeConverterLoaderException;
+import org.apache.camel.TypeConverter;
+import org.apache.camel.spi.BulkTypeConverters;
+import org.apache.camel.spi.TypeConverterLoader;
+import org.apache.camel.spi.TypeConverterRegistry;
+
+/**
+ * Generated by camel build tools - do NOT edit this file!
+ */
+@SuppressWarnings("unchecked")
+public final class
CamelQuarkusIntegrationTestsSupportCustomTypeConverterBulkConverterLoader
implements TypeConverterLoader, BulkTypeConverters {
+
+ public
CamelQuarkusIntegrationTestsSupportCustomTypeConverterBulkConverterLoader() {
+ }
+
+ @Override
+ public int size() {
+ return 2;
+ }
+
+ @Override
+ public void load(TypeConverterRegistry registry) throws
TypeConverterLoaderException {
+ registry.addBulkTypeConverters(this);
+ }
+
+ @Override
+ public <T> T convertTo(Class<?> from, Class<T> to, Exchange exchange,
Object value) throws TypeConversionException {
+ try {
+ Object obj = doConvertTo(from, to, exchange, value);
+ if (obj == Void.class) {;
+ return null;
+ } else {
+ return (T) obj;
+ }
+ } catch (TypeConversionException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new TypeConversionException(value, to, e);
+ }
+ }
+
+ private Object doConvertTo(Class<?> from, Class<?> to, Exchange exchange,
Object value) throws Exception {
+ if (to ==
org.apache.camel.quarkus.it.support.typeconverter.pairs.MyBulk1Pair.class) {
+ if (value instanceof java.lang.String) {
+ return
org.apache.camel.quarkus.it.support.typeconverter.converters.MyBulk1Converter.toMyPair((java.lang.String)
value);
+ }
+ } else if (to ==
org.apache.camel.quarkus.it.support.typeconverter.pairs.MyBulk2Pair.class) {
+ if (value instanceof java.lang.String) {
+ return
org.apache.camel.quarkus.it.support.typeconverter.converters.MyBulk2Converter.toMyPair((java.lang.String)
value);
+ }
+ }
+ return null;
+ }
+
+ public TypeConverter lookup(Class<?> to, Class<?> from) {
+ if (to ==
org.apache.camel.quarkus.it.support.typeconverter.pairs.MyBulk1Pair.class) {
+ if (from == java.lang.String.class) {
+ return this;
+ }
+ } else if (to ==
org.apache.camel.quarkus.it.support.typeconverter.pairs.MyBulk2Pair.class) {
+ if (from == java.lang.String.class) {
+ return this;
+ }
+ }
+ return null;
+ }
+
+}
diff --git
a/integration-tests-support/custom-type-converter/runtime/src/generated/java/org/apache/camel/quarkus/it/support/typeconverter/converters/MyLoaderConverterLoader.java
b/integration-tests-support/custom-type-converter/runtime/src/generated/java/org/apache/camel/quarkus/it/support/typeconverter/converters/MyLoaderConverterLoader.java
new file mode 100644
index 0000000..9e7c515
--- /dev/null
+++
b/integration-tests-support/custom-type-converter/runtime/src/generated/java/org/apache/camel/quarkus/it/support/typeconverter/converters/MyLoaderConverterLoader.java
@@ -0,0 +1,36 @@
+/* Generated by camel build tools - do NOT edit this file! */
+package org.apache.camel.quarkus.it.support.typeconverter.converters;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.TypeConversionException;
+import org.apache.camel.TypeConverterLoaderException;
+import org.apache.camel.spi.TypeConverterLoader;
+import org.apache.camel.spi.TypeConverterRegistry;
+import org.apache.camel.support.SimpleTypeConverter;
+import org.apache.camel.support.TypeConverterSupport;
+import org.apache.camel.util.DoubleMap;
+
+/**
+ * Generated by camel build tools - do NOT edit this file!
+ */
+@SuppressWarnings("unchecked")
+public final class MyLoaderConverterLoader implements TypeConverterLoader {
+
+ public MyLoaderConverterLoader() {
+ }
+
+ @Override
+ public void load(TypeConverterRegistry registry) throws
TypeConverterLoaderException {
+ registerConverters(registry);
+ }
+
+ private void registerConverters(TypeConverterRegistry registry) {
+ addTypeConverter(registry,
org.apache.camel.quarkus.it.support.typeconverter.pairs.MyLoaderPair.class,
java.lang.String.class, false,
+ (type, exchange, value) ->
org.apache.camel.quarkus.it.support.typeconverter.converters.MyLoaderConverter.toMyPair((java.lang.String)
value));
+ }
+
+ private static void addTypeConverter(TypeConverterRegistry registry,
Class<?> toType, Class<?> fromType, boolean allowNull,
SimpleTypeConverter.ConversionMethod method) {
+ registry.addTypeConverter(toType, fromType, new
SimpleTypeConverter(allowNull, method));
+ }
+
+}
diff --git
a/integration-tests-support/custom-type-converter/runtime/src/generated/resources/META-INF/services/org/apache/camel/TypeConverterLoader
b/integration-tests-support/custom-type-converter/runtime/src/generated/resources/META-INF/services/org/apache/camel/TypeConverterLoader
new file mode 100644
index 0000000..73c738d
--- /dev/null
+++
b/integration-tests-support/custom-type-converter/runtime/src/generated/resources/META-INF/services/org/apache/camel/TypeConverterLoader
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+org.apache.camel.quarkus.it.support.typeconverter.converters.MyLoaderConverterLoader
diff --git
a/integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/CustomTypeConverterRecorder.java
b/integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/CustomTypeConverterRecorder.java
index cd9256c..ecef5a1 100644
---
a/integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/CustomTypeConverterRecorder.java
+++
b/integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/CustomTypeConverterRecorder.java
@@ -18,6 +18,8 @@ package org.apache.camel.quarkus.it.support.typeconverter;
import io.quarkus.runtime.RuntimeValue;
import io.quarkus.runtime.annotations.Recorder;
+import
org.apache.camel.quarkus.it.support.typeconverter.converters.CamelQuarkusIntegrationTestsSupportCustomTypeConverterBulkConverterLoader;
+import org.apache.camel.spi.Registry;
import org.apache.camel.spi.TypeConverterLoader;
@Recorder
@@ -25,4 +27,13 @@ public class CustomTypeConverterRecorder {
public RuntimeValue<TypeConverterLoader> createTypeConverterLoader() {
return new RuntimeValue<>(new CustomTypeConverterLoader());
}
+
+ public RuntimeValue<TypeConverterLoader> getBulkConverterLoader() {
+ return new RuntimeValue<>(new
CamelQuarkusIntegrationTestsSupportCustomTypeConverterBulkConverterLoader());
+ }
+
+ public void bindMyRegistryConverterLoader(RuntimeValue<Registry> registry)
{
+ registry.getValue().bind("myRegistryPairConverter", new
RegistryPairConverterLoader());
+ }
+
}
diff --git
a/integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/MyPair.java
b/integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/MyPair.java
index 9259cc1..ae687fe 100644
---
a/integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/MyPair.java
+++
b/integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/MyPair.java
@@ -16,17 +16,21 @@
*/
package org.apache.camel.quarkus.it.support.typeconverter;
-public class MyPair {
- public final String key;
- public final String val;
+import org.apache.camel.quarkus.it.support.typeconverter.pairs.AbstractPair;
- public MyPair(String key, String val) {
- this.key = key;
- this.val = val;
+public class MyPair extends AbstractPair {
+
+ public MyPair(String value) {
+ super(value);
+ }
+
+ @Override
+ protected String keyPrefix() {
+ return "";
}
public static MyPair fromString(String input) {
- String[] items = input.split(":");
- return new MyPair(items[0], items[1]);
+ return new MyPair(input);
}
+
}
diff --git
a/integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/CustomTypeConverterRecorder.java
b/integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/RegistryPairConverterLoader.java
similarity index 59%
copy from
integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/CustomTypeConverterRecorder.java
copy to
integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/RegistryPairConverterLoader.java
index cd9256c..c34883e 100644
---
a/integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/CustomTypeConverterRecorder.java
+++
b/integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/RegistryPairConverterLoader.java
@@ -16,13 +16,18 @@
*/
package org.apache.camel.quarkus.it.support.typeconverter;
-import io.quarkus.runtime.RuntimeValue;
-import io.quarkus.runtime.annotations.Recorder;
+import org.apache.camel.TypeConverterLoaderException;
+import org.apache.camel.quarkus.it.support.typeconverter.pairs.MyRegistryPair;
import org.apache.camel.spi.TypeConverterLoader;
+import org.apache.camel.spi.TypeConverterRegistry;
+import org.apache.camel.support.SimpleTypeConverter;
-@Recorder
-public class CustomTypeConverterRecorder {
- public RuntimeValue<TypeConverterLoader> createTypeConverterLoader() {
- return new RuntimeValue<>(new CustomTypeConverterLoader());
+public class RegistryPairConverterLoader implements TypeConverterLoader {
+ @Override
+ public void load(TypeConverterRegistry registry) throws
TypeConverterLoaderException {
+ registry.addTypeConverter(
+ MyRegistryPair.class,
+ String.class,
+ new SimpleTypeConverter(false, (type, exchange, value) -> new
MyRegistryPair((String) value)));
}
}
diff --git
a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
b/integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/converters/MyBulk1Converter.java
similarity index 74%
copy from
integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
copy to
integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/converters/MyBulk1Converter.java
index 187ff91..a19cb51 100644
---
a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
+++
b/integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/converters/MyBulk1Converter.java
@@ -14,15 +14,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.quarkus.core.converter;
+package org.apache.camel.quarkus.it.support.typeconverter.converters;
import org.apache.camel.Converter;
+import org.apache.camel.quarkus.it.support.typeconverter.pairs.MyBulk1Pair;
-@Converter
-public class AnnotatedMyPairConverter {
+@Converter(generateBulkLoader = true)
+public class MyBulk1Converter {
@Converter
- public static AnnotatedMyPair toMyPair(String s) {
- return AnnotatedMyPair.fromString(s);
+ public static MyBulk1Pair toMyPair(String s) {
+ return new MyBulk1Pair(s);
}
}
diff --git
a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
b/integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/converters/MyBulk2Converter.java
similarity index 74%
copy from
integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
copy to
integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/converters/MyBulk2Converter.java
index 187ff91..13749d7 100644
---
a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
+++
b/integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/converters/MyBulk2Converter.java
@@ -14,15 +14,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.quarkus.core.converter;
+package org.apache.camel.quarkus.it.support.typeconverter.converters;
import org.apache.camel.Converter;
+import org.apache.camel.quarkus.it.support.typeconverter.pairs.MyBulk2Pair;
-@Converter
-public class AnnotatedMyPairConverter {
+@Converter(generateBulkLoader = true)
+public class MyBulk2Converter {
@Converter
- public static AnnotatedMyPair toMyPair(String s) {
- return AnnotatedMyPair.fromString(s);
+ public static MyBulk2Pair toMyPair(String s) {
+ return new MyBulk2Pair(s);
}
}
diff --git
a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
b/integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/converters/MyLoaderConverter.java
similarity index 74%
copy from
integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
copy to
integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/converters/MyLoaderConverter.java
index 187ff91..592a4e3 100644
---
a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
+++
b/integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/converters/MyLoaderConverter.java
@@ -14,15 +14,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.quarkus.core.converter;
+package org.apache.camel.quarkus.it.support.typeconverter.converters;
import org.apache.camel.Converter;
+import org.apache.camel.quarkus.it.support.typeconverter.pairs.MyLoaderPair;
-@Converter
-public class AnnotatedMyPairConverter {
+@Converter(generateLoader = true)
+public class MyLoaderConverter {
@Converter
- public static AnnotatedMyPair toMyPair(String s) {
- return AnnotatedMyPair.fromString(s);
+ public static MyLoaderPair toMyPair(String s) {
+ return new MyLoaderPair(s);
}
}
diff --git
a/integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/MyPair.java
b/integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/pairs/AbstractPair.java
similarity index 73%
copy from
integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/MyPair.java
copy to
integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/pairs/AbstractPair.java
index 9259cc1..e27fd60 100644
---
a/integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/MyPair.java
+++
b/integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/pairs/AbstractPair.java
@@ -14,19 +14,17 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.quarkus.it.support.typeconverter;
+package org.apache.camel.quarkus.it.support.typeconverter.pairs;
-public class MyPair {
+public abstract class AbstractPair {
public final String key;
public final String val;
- public MyPair(String key, String val) {
- this.key = key;
- this.val = val;
- }
+ protected abstract String keyPrefix();
- public static MyPair fromString(String input) {
- String[] items = input.split(":");
- return new MyPair(items[0], items[1]);
+ public AbstractPair(String value) {
+ String[] items = value.split(":");
+ key = keyPrefix() + items[0];
+ val = items[1];
}
}
diff --git
a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
b/integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/pairs/MyBulk1Pair.java
similarity index 76%
copy from
integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
copy to
integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/pairs/MyBulk1Pair.java
index 187ff91..5f44417 100644
---
a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
+++
b/integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/pairs/MyBulk1Pair.java
@@ -14,15 +14,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.quarkus.core.converter;
+package org.apache.camel.quarkus.it.support.typeconverter.pairs;
-import org.apache.camel.Converter;
+public class MyBulk1Pair extends AbstractPair {
-@Converter
-public class AnnotatedMyPairConverter {
+ public MyBulk1Pair(String value) {
+ super(value);
+ }
- @Converter
- public static AnnotatedMyPair toMyPair(String s) {
- return AnnotatedMyPair.fromString(s);
+ @Override
+ protected String keyPrefix() {
+ return "bulk1_";
}
}
diff --git
a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
b/integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/pairs/MyBulk2Pair.java
similarity index 76%
copy from
integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
copy to
integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/pairs/MyBulk2Pair.java
index 187ff91..82c59f4 100644
---
a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
+++
b/integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/pairs/MyBulk2Pair.java
@@ -14,15 +14,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.quarkus.core.converter;
+package org.apache.camel.quarkus.it.support.typeconverter.pairs;
-import org.apache.camel.Converter;
+public class MyBulk2Pair extends AbstractPair {
-@Converter
-public class AnnotatedMyPairConverter {
+ public MyBulk2Pair(String value) {
+ super(value);
+ }
- @Converter
- public static AnnotatedMyPair toMyPair(String s) {
- return AnnotatedMyPair.fromString(s);
+ @Override
+ protected String keyPrefix() {
+ return "bulk2_";
}
}
diff --git
a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
b/integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/pairs/MyLoaderPair.java
similarity index 76%
copy from
integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
copy to
integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/pairs/MyLoaderPair.java
index 187ff91..e9b97e1 100644
---
a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
+++
b/integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/pairs/MyLoaderPair.java
@@ -14,15 +14,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.quarkus.core.converter;
+package org.apache.camel.quarkus.it.support.typeconverter.pairs;
-import org.apache.camel.Converter;
+public class MyLoaderPair extends AbstractPair {
-@Converter
-public class AnnotatedMyPairConverter {
+ public MyLoaderPair(String value) {
+ super(value);
+ }
- @Converter
- public static AnnotatedMyPair toMyPair(String s) {
- return AnnotatedMyPair.fromString(s);
+ @Override
+ protected String keyPrefix() {
+ return "loader_";
}
}
diff --git
a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
b/integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/pairs/MyRegistryPair.java
similarity index 75%
copy from
integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
copy to
integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/pairs/MyRegistryPair.java
index 187ff91..cec5352 100644
---
a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
+++
b/integration-tests-support/custom-type-converter/runtime/src/main/java/org/apache/camel/quarkus/it/support/typeconverter/pairs/MyRegistryPair.java
@@ -14,15 +14,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.quarkus.core.converter;
+package org.apache.camel.quarkus.it.support.typeconverter.pairs;
-import org.apache.camel.Converter;
+public class MyRegistryPair extends AbstractPair {
-@Converter
-public class AnnotatedMyPairConverter {
+ public MyRegistryPair(String value) {
+ super(value);
+ }
- @Converter
- public static AnnotatedMyPair toMyPair(String s) {
- return AnnotatedMyPair.fromString(s);
+ @Override
+ protected String keyPrefix() {
+ return "registry_";
}
}
diff --git a/integration-tests/core/pom.xml b/integration-tests/core/pom.xml
index 83fc026..65b6485 100644
--- a/integration-tests/core/pom.xml
+++ b/integration-tests/core/pom.xml
@@ -63,6 +63,10 @@
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+
<artifactId>camel-quarkus-integration-tests-support-custom-type-converter</artifactId>
+ </dependency>
<!-- test dependencies -->
<dependency>
diff --git
a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/ConverterResource.java
b/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/ConverterResource.java
new file mode 100644
index 0000000..ac67654
--- /dev/null
+++
b/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/ConverterResource.java
@@ -0,0 +1,137 @@
+/*
+ * 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.quarkus.core;
+
+import java.util.Map;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Exchange;
+import org.apache.camel.quarkus.core.converter.MyExchangePair;
+import org.apache.camel.quarkus.core.converter.MyNotRegisteredPair;
+import org.apache.camel.quarkus.core.converter.MyNullablePair;
+import org.apache.camel.quarkus.core.converter.MyTestPair;
+import org.apache.camel.quarkus.core.converter.TestConverters;
+import org.apache.camel.quarkus.it.support.typeconverter.pairs.MyBulk1Pair;
+import org.apache.camel.quarkus.it.support.typeconverter.pairs.MyBulk2Pair;
+import org.apache.camel.quarkus.it.support.typeconverter.pairs.MyLoaderPair;
+import org.apache.camel.quarkus.it.support.typeconverter.pairs.MyRegistryPair;
+import org.apache.camel.spi.Registry;
+import org.apache.camel.support.DefaultExchange;
+import org.apache.camel.util.CollectionHelper;
+
+@Path("/converter")
+@ApplicationScoped
+public class ConverterResource {
+ @Inject
+ Registry registry;
+ @Inject
+ CamelContext context;
+
+ @Path("/myRegistryPair")
+ @POST
+ @Produces(MediaType.APPLICATION_JSON)
+ public MyRegistryPair converterMyRegistrPair(String input) {
+ return context.getTypeConverter().convertTo(MyRegistryPair.class,
input);
+ }
+
+ @Path("/myTestPair")
+ @POST
+ @Produces(MediaType.APPLICATION_JSON)
+ public MyTestPair fromStringToMyTestPair(String input) {
+ return context.getTypeConverter().convertTo(MyTestPair.class, input);
+ }
+
+ @Path("/myLoaderPair")
+ @POST
+ @Produces(MediaType.APPLICATION_JSON)
+ public MyLoaderPair fromMyLoaderPair(String input) {
+ return context.getTypeConverter().convertTo(MyLoaderPair.class, input);
+ }
+
+ @Path("/myBulk1Pair")
+ @POST
+ @Produces(MediaType.APPLICATION_JSON)
+ public MyBulk1Pair convertMyBulk1Pair(String input) {
+ return context.getTypeConverter().convertTo(MyBulk1Pair.class, input);
+ }
+
+ @Path("/myBulk2Pair")
+ @POST
+ @Produces(MediaType.APPLICATION_JSON)
+ public MyBulk2Pair convertMyBulk2Pair(String input) {
+ return context.getTypeConverter().convertTo(MyBulk2Pair.class, input);
+ }
+
+ @Path("/myNullablePair")
+ @POST
+ @Produces(MediaType.APPLICATION_JSON)
+ public MyNullablePair convertMyNullablePair(String input) {
+ return context.getTypeConverter().convertTo(MyNullablePair.class,
input);
+ }
+
+ @Path("/setStatisticsEnabled")
+ @POST
+ @Produces(MediaType.TEXT_PLAIN)
+ public void cnverterSetStatisticsEnabled(boolean value) {
+
context.getTypeConverterRegistry().getStatistics().setStatisticsEnabled(value);
+ if (value) {
+ context.getTypeConverterRegistry().getStatistics().reset();
+ }
+ }
+
+ @Path("/getStatisticsHit")
+ @GET
+ @Produces(MediaType.APPLICATION_JSON)
+ public Map<String, Long> converterGetStatistics() {
+ long hit =
context.getTypeConverterRegistry().getStatistics().getHitCounter();
+ long miss =
context.getTypeConverterRegistry().getStatistics().getMissCounter();
+ return CollectionHelper.mapOf("hit", hit, "miss", miss);
+ }
+
+ @Path("/fallback")
+ @POST
+ @Produces(MediaType.APPLICATION_JSON)
+ public MyTestPair convertFallback(String input) {
+ return context.getTypeConverter().convertTo(MyTestPair.class,
+ "org.apache.camel.quarkus.core.converter.MyTestPair:" + input);
+ }
+
+ @Path("/myExchangePair")
+ @POST
+ @Produces(MediaType.APPLICATION_JSON)
+ public MyExchangePair convertMyExchangePair(String input,
@QueryParam("converterValue") String converterValue) {
+ Exchange e = new DefaultExchange(context);
+ e.setProperty(TestConverters.CONVERTER_VALUE, converterValue);
+ return context.getTypeConverter().convertTo(MyExchangePair.class, e,
input);
+ }
+
+ @Path("/myNotRegisteredPair")
+ @POST
+ @Produces(MediaType.APPLICATION_JSON)
+ public MyNotRegisteredPair convertNotRegisteredPair(String input,
@QueryParam("converterValue") String converterValue) {
+ return context.getTypeConverter().convertTo(MyNotRegisteredPair.class,
input);
+ }
+}
diff --git
a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/CoreResource.java
b/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/CoreResource.java
index 9d57144..00a951c 100644
---
a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/CoreResource.java
+++
b/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/CoreResource.java
@@ -29,7 +29,6 @@ import javax.inject.Inject;
import javax.json.Json;
import javax.json.JsonObject;
import javax.ws.rs.GET;
-import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
@@ -47,7 +46,6 @@ import org.apache.camel.catalog.RuntimeCamelCatalog;
import org.apache.camel.component.log.LogComponent;
import org.apache.camel.impl.engine.DefaultHeadersMapFactory;
import org.apache.camel.model.ModelCamelContext;
-import org.apache.camel.quarkus.core.converter.AnnotatedMyPair;
import org.apache.camel.spi.Registry;
import org.apache.camel.support.LRUCacheFactory;
import org.apache.camel.support.processor.DefaultExchangeFormatter;
@@ -271,12 +269,4 @@ public class CoreResource {
public boolean startupStepRecorder() {
return
context.adapt(ExtendedCamelContext.class).getStartupStepRecorder() instanceof
DefaultStartupStepRecorder;
}
-
- @Path("/converter/annotatedMyPair")
- @POST
- @Produces(MediaType.APPLICATION_JSON)
- public AnnotatedMyPair fromStringToAnnotatedMyPair(String input) {
- return context.getTypeConverter().convertTo(AnnotatedMyPair.class,
input);
- }
-
}
diff --git
a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPair.java
b/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/MyExchangePair.java
similarity index 68%
rename from
integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPair.java
rename to
integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/MyExchangePair.java
index 1d9daca..15a86fc 100644
---
a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPair.java
+++
b/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/MyExchangePair.java
@@ -16,17 +16,15 @@
*/
package org.apache.camel.quarkus.core.converter;
-public class AnnotatedMyPair {
- public final String key;
- public final String annotatedValue;
+import org.apache.camel.quarkus.it.support.typeconverter.pairs.AbstractPair;
- public AnnotatedMyPair(String key, String annotatedValue) {
- this.key = key;
- this.annotatedValue = annotatedValue;
+public class MyExchangePair extends AbstractPair {
+ public MyExchangePair(String value) {
+ super(value);
}
- public static AnnotatedMyPair fromString(String input) {
- String[] items = input.split(":");
- return new AnnotatedMyPair(items[0], items[1]);
+ @Override
+ protected String keyPrefix() {
+ return "exchange_";
}
}
diff --git
a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
b/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/MyNotRegisteredPair.java
similarity index 74%
copy from
integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
copy to
integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/MyNotRegisteredPair.java
index 187ff91..cb8dcf6 100644
---
a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
+++
b/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/MyNotRegisteredPair.java
@@ -16,13 +16,15 @@
*/
package org.apache.camel.quarkus.core.converter;
-import org.apache.camel.Converter;
+import org.apache.camel.quarkus.it.support.typeconverter.pairs.AbstractPair;
-@Converter
-public class AnnotatedMyPairConverter {
+public class MyNotRegisteredPair extends AbstractPair {
+ public MyNotRegisteredPair(String value) {
+ super(value);
+ }
- @Converter
- public static AnnotatedMyPair toMyPair(String s) {
- return AnnotatedMyPair.fromString(s);
+ @Override
+ protected String keyPrefix() {
+ return "not_registered_";
}
}
diff --git
a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
b/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/MyNullablePair.java
similarity index 76%
copy from
integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
copy to
integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/MyNullablePair.java
index 187ff91..ad64bcc 100644
---
a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
+++
b/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/MyNullablePair.java
@@ -16,13 +16,16 @@
*/
package org.apache.camel.quarkus.core.converter;
-import org.apache.camel.Converter;
+import org.apache.camel.quarkus.it.support.typeconverter.pairs.AbstractPair;
-@Converter
-public class AnnotatedMyPairConverter {
+public class MyNullablePair extends AbstractPair {
- @Converter
- public static AnnotatedMyPair toMyPair(String s) {
- return AnnotatedMyPair.fromString(s);
+ public MyNullablePair(String value) {
+ super(value);
+ }
+
+ @Override
+ protected String keyPrefix() {
+ return "test_";
}
}
diff --git
a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
b/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/MyTestPair.java
similarity index 76%
copy from
integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
copy to
integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/MyTestPair.java
index 187ff91..842a071 100644
---
a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
+++
b/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/MyTestPair.java
@@ -16,13 +16,15 @@
*/
package org.apache.camel.quarkus.core.converter;
-import org.apache.camel.Converter;
+import org.apache.camel.quarkus.it.support.typeconverter.pairs.AbstractPair;
-@Converter
-public class AnnotatedMyPairConverter {
+public class MyTestPair extends AbstractPair {
+ public MyTestPair(String value) {
+ super(value);
+ }
- @Converter
- public static AnnotatedMyPair toMyPair(String s) {
- return AnnotatedMyPair.fromString(s);
+ @Override
+ protected String keyPrefix() {
+ return "test_";
}
}
diff --git
a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
b/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/NotRegisteredBulkConverters.java
similarity index 82%
copy from
integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
copy to
integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/NotRegisteredBulkConverters.java
index 187ff91..ce8040b 100644
---
a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
+++
b/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/NotRegisteredBulkConverters.java
@@ -18,11 +18,11 @@ package org.apache.camel.quarkus.core.converter;
import org.apache.camel.Converter;
-@Converter
-public class AnnotatedMyPairConverter {
+@Converter(generateBulkLoader = true)
+public class NotRegisteredBulkConverters {
@Converter
- public static AnnotatedMyPair toMyPair(String s) {
- return AnnotatedMyPair.fromString(s);
+ public static MyNotRegisteredPair toNotRegisteredPair(String s) {
+ return new MyNotRegisteredPair(s);
}
}
diff --git
a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
b/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/NotRegisteredConverters.java
similarity index 83%
copy from
integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
copy to
integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/NotRegisteredConverters.java
index 187ff91..067461d 100644
---
a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
+++
b/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/NotRegisteredConverters.java
@@ -18,11 +18,11 @@ package org.apache.camel.quarkus.core.converter;
import org.apache.camel.Converter;
-@Converter
-public class AnnotatedMyPairConverter {
+@Converter(generateLoader = true)
+public class NotRegisteredConverters {
@Converter
- public static AnnotatedMyPair toMyPair(String s) {
- return AnnotatedMyPair.fromString(s);
+ public static MyNotRegisteredPair toNotRegisteredPair(String s) {
+ return new MyNotRegisteredPair(s);
}
}
diff --git
a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/TestConverters.java
b/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/TestConverters.java
new file mode 100644
index 0000000..6e76677
--- /dev/null
+++
b/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/TestConverters.java
@@ -0,0 +1,73 @@
+/*
+ * 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.quarkus.core.converter;
+
+import org.apache.camel.Converter;
+import org.apache.camel.Exchange;
+import org.apache.camel.TypeConverter;
+import org.apache.camel.spi.TypeConverterRegistry;
+
+@Converter
+public class TestConverters {
+
+ public static final String CONVERTER_VALUE = "converter_value";
+
+ @Converter(allowNull = true)
+ public static MyNullablePair toNullablePair(String s) {
+ if ("null".equals(s)) {
+ return null;
+ }
+ return new MyNullablePair(s);
+ }
+
+ @Converter
+ public static MyTestPair toMyPair(String s) {
+ if (s.split(":").length != 2) {
+ return null;
+ }
+ return new MyTestPair(s);
+ }
+
+ @Converter
+ public static MyExchangePair toMyPair(String s, Exchange exchange) {
+ String converter_value = exchange.getProperty(CONVERTER_VALUE,
String.class);
+ if (converter_value != null && converter_value.split(":").length == 2)
{
+ return new MyExchangePair(converter_value);
+ }
+ if (s.split(":").length != 2) {
+ return null;
+ }
+ return new MyExchangePair(s);
+ }
+
+ @Converter(fallback = true)
+ public static Object convertTo(Class type, Exchange exchange, Object
value, TypeConverterRegistry registry)
+ throws ClassNotFoundException {
+ if (value instanceof String) {
+ String s = (String) value;
+ String[] tokens = s.split(":");
+ if (tokens.length == 3) {
+ Class convertTo = Class.forName(tokens[0]);
+ TypeConverter tc = registry.lookup(convertTo, String.class);
+ if (tc != null) {
+ return tc.convertTo(convertTo, s.replaceFirst(tokens[0] +
":", ""));
+ }
+ }
+ }
+ return null;
+ }
+}
diff --git
a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
b/integration-tests/core/src/test/java/org/apache/camel/quarkus/core/ConverterIT.java
similarity index 75%
rename from
integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
rename to
integration-tests/core/src/test/java/org/apache/camel/quarkus/core/ConverterIT.java
index 187ff91..5400e13 100644
---
a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/converter/AnnotatedMyPairConverter.java
+++
b/integration-tests/core/src/test/java/org/apache/camel/quarkus/core/ConverterIT.java
@@ -14,15 +14,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.quarkus.core.converter;
+package org.apache.camel.quarkus.core;
-import org.apache.camel.Converter;
+import io.quarkus.test.junit.NativeImageTest;
-@Converter
-public class AnnotatedMyPairConverter {
-
- @Converter
- public static AnnotatedMyPair toMyPair(String s) {
- return AnnotatedMyPair.fromString(s);
- }
+@NativeImageTest
+public class ConverterIT extends ConverterTest {
}
diff --git
a/integration-tests/core/src/test/java/org/apache/camel/quarkus/core/ConverterTest.java
b/integration-tests/core/src/test/java/org/apache/camel/quarkus/core/ConverterTest.java
new file mode 100644
index 0000000..5c22781
--- /dev/null
+++
b/integration-tests/core/src/test/java/org/apache/camel/quarkus/core/ConverterTest.java
@@ -0,0 +1,129 @@
+/*
+ * 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.quarkus.core;
+
+import javax.ws.rs.core.MediaType;
+
+import io.quarkus.test.junit.QuarkusTest;
+import io.restassured.RestAssured;
+import io.restassured.http.ContentType;
+import io.restassured.response.ValidatableResponse;
+import org.junit.jupiter.api.Test;
+
+import static org.hamcrest.Matchers.*;
+
+@QuarkusTest
+public class ConverterTest {
+
+ @Test
+ void testConverterFromRegistry() {
+ //converter from loader which is present in registry
+ testConverter("/converter/myRegistryPair", "a:b", "registry_a", "b");
+ }
+
+ @Test
+ void testConverterFromAnnotation() {
+ //converter with annotation present in this module
+ testConverter("/converter/myTestPair", "a:b", "test_a", "b");
+ }
+
+ @Test
+ void testConverterToNull() {
+ enableStatistics(true);
+
+ testConverterReturningNull("/converter/myNullablePair", "null");
+
+
RestAssured.when().get("/converter/getStatisticsHit").then().body("hit", is(1),
"miss", is(0));
+
+ enableStatistics(false);
+ }
+
+ @Test
+ void testNotRegisteredConverter() {
+ enableStatistics(true);
+
+ testConverterReturningNull("/converter/myNotRegisteredPair", "a:b");
+
+
RestAssured.when().get("/converter/getStatisticsHit").then().body("hit", is(0),
"miss", is(1));
+
+ enableStatistics(false);
+ }
+
+ @Test
+ void testBulkConverters() {
+ //converters generated with @Converter(generateBulkLoader = true)
+ testConverter("/converter/myBulk1Pair", "a:b", "bulk1_a", "b");
+ testConverter("/converter/myBulk2Pair", "a:b", "bulk2_a", "b");
+ }
+
+ @Test
+ void testLoaderConverters() {
+ //converters generated with @Converter(generateLoader = true)
+ testConverter("/converter/myLoaderPair", "a:b", "loader_a", "b");
+ }
+
+ @Test
+ void testFallback() {
+ testConverter("/converter/fallback", "a:b", "test_a", "b");
+ }
+
+ @Test
+ void testExchangeConverter() {
+ testConverter("/converter/fallback", "c:d", "test_c", "d");
+ }
+
+ @Test
+ void testConverterGetStatistics() {
+ enableStatistics(true);
+
+ //cause 1 hit
+ testConverterFromAnnotation();
+
+
RestAssured.when().get("/converter/getStatisticsHit").then().body("hit", is(1),
"miss", is(0));
+
+ enableStatistics(false);
+ }
+
+ private void enableStatistics(boolean b) {
+ RestAssured.given()
+ .contentType(ContentType.TEXT).body(b)
+ .post("/converter/setStatisticsEnabled")
+ .then()
+ .statusCode(204);
+ }
+
+ private void testConverterReturningNull(String url, String body) {
+ testConverter(url, body, 204, null, null);
+ }
+
+ private void testConverter(String url, String body, String expectedKey,
String expectedValue) {
+ testConverter(url, body, 200, expectedKey, expectedValue);
+ }
+
+ private void testConverter(String url, String body, int expectedResutCode,
String expectedKey, String expectedValue) {
+ ValidatableResponse response = RestAssured.given()
+ .contentType(ContentType.TEXT).body(body)
+ .accept(MediaType.APPLICATION_JSON)
+ .post(url)
+ .then()
+ .statusCode(expectedResutCode);
+
+ if (expectedKey != null) {
+ response.body("key", is(expectedKey), "val", is(expectedValue));
+ }
+ }
+}
diff --git
a/integration-tests/core/src/test/java/org/apache/camel/quarkus/core/CoreTest.java
b/integration-tests/core/src/test/java/org/apache/camel/quarkus/core/CoreTest.java
index f94e9fc..82f9874 100644
---
a/integration-tests/core/src/test/java/org/apache/camel/quarkus/core/CoreTest.java
+++
b/integration-tests/core/src/test/java/org/apache/camel/quarkus/core/CoreTest.java
@@ -19,11 +19,8 @@ package org.apache.camel.quarkus.core;
import java.io.IOException;
import java.net.HttpURLConnection;
-import javax.ws.rs.core.MediaType;
-
import io.quarkus.test.junit.QuarkusTest;
import io.restassured.RestAssured;
-import io.restassured.http.ContentType;
import io.restassured.response.Response;
import org.apache.camel.support.DefaultLRUCacheFactory;
import org.junit.jupiter.api.Test;
@@ -131,15 +128,4 @@ public class CoreTest {
void testStartupStepRecorder() {
RestAssured.when().get("/core/startup-step-recorder").then().body(is("true"));
}
-
- @Test
- void testConverterFromAnnotation() {
- RestAssured.given()
- .contentType(ContentType.TEXT).body("a:b")
- .accept(MediaType.APPLICATION_JSON)
- .post("/core/converter/annotatedMyPair")
- .then()
- .statusCode(200)
- .body("key", is("a"), "annotatedValue", is("b"));
- }
}