This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 09663a95a91b6b244d25929354f102627bb33f1e
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Tue Nov 3 20:23:21 2020 +0100

    CAMEL-15796: camel-core - Optimize reifier to not use lambda classes and 
reduce memory by not using map as registry.
---
 .../camel/reifier/CircuitBreakerReifier.java       |   3 +-
 .../org/apache/camel/reifier/ProcessorReifier.java | 225 ++++++++++++++-------
 .../reifier/dataformat/DataFormatReifier.java      | 156 +++++++++-----
 .../reifier/errorhandler/ErrorHandlerReifier.java  |  52 ++---
 .../camel/reifier/language/ExpressionReifier.java  |  87 +++++---
 .../reifier/loadbalancer/LoadBalancerReifier.java  |  52 +++--
 .../reifier/transformer/TransformerReifier.java    |  39 +++-
 .../camel/reifier/validator/ValidatorReifier.java  |  39 +++-
 .../apache/camel/reifier/ProcessorReifierTest.java |  17 +-
 .../{ => dataformat}/DataFormatReifierTest.java    |  19 +-
 10 files changed, 461 insertions(+), 228 deletions(-)

diff --git 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/CircuitBreakerReifier.java
 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/CircuitBreakerReifier.java
index 2b454d4..14ba51f9 100644
--- 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/CircuitBreakerReifier.java
+++ 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/CircuitBreakerReifier.java
@@ -29,7 +29,8 @@ public class CircuitBreakerReifier extends 
ProcessorReifier<CircuitBreakerDefini
 
     @Override
     public Processor createProcessor() throws Exception {
-        throw new IllegalStateException("Cannot find camel-hystrix or 
camel-microprofile-fault-tolerance on the classpath.");
+        throw new IllegalStateException(
+                "Cannot find camel-hystrix, camel-resilience4j or 
camel-microprofile-fault-tolerance on the classpath.");
     }
 
 }
diff --git 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ProcessorReifier.java
 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ProcessorReifier.java
index f7a0546..72df0e05 100644
--- 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ProcessorReifier.java
+++ 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ProcessorReifier.java
@@ -118,74 +118,9 @@ public abstract class ProcessorReifier<T extends 
ProcessorDefinition<?>> extends
 
     private static final Map<Class<?>, BiFunction<Route, 
ProcessorDefinition<?>, ProcessorReifier<? extends ProcessorDefinition<?>>>> 
PROCESSORS;
     static {
-        // NOTE: if adding a new class then update the initial capacity of the
-        // HashMap
+        // for custom reifiers
         Map<Class<?>, BiFunction<Route, ProcessorDefinition<?>, 
ProcessorReifier<? extends ProcessorDefinition<?>>>> map
-                = new HashMap<>(65);
-        map.put(AggregateDefinition.class, AggregateReifier::new);
-        map.put(BeanDefinition.class, BeanReifier::new);
-        map.put(CatchDefinition.class, CatchReifier::new);
-        map.put(ChoiceDefinition.class, ChoiceReifier::new);
-        map.put(CircuitBreakerDefinition.class, CircuitBreakerReifier::new);
-        map.put(ClaimCheckDefinition.class, ClaimCheckReifier::new);
-        map.put(ConvertBodyDefinition.class, ConvertBodyReifier::new);
-        map.put(DelayDefinition.class, DelayReifier::new);
-        map.put(DynamicRouterDefinition.class, DynamicRouterReifier::new);
-        map.put(EnrichDefinition.class, EnrichReifier::new);
-        map.put(FilterDefinition.class, FilterReifier::new);
-        map.put(FinallyDefinition.class, FinallyReifier::new);
-        map.put(IdempotentConsumerDefinition.class, 
IdempotentConsumerReifier::new);
-        map.put(InOnlyDefinition.class, SendReifier::new);
-        map.put(InOutDefinition.class, SendReifier::new);
-        map.put(InterceptDefinition.class, InterceptReifier::new);
-        map.put(InterceptFromDefinition.class, InterceptFromReifier::new);
-        map.put(InterceptSendToEndpointDefinition.class, 
InterceptSendToEndpointReifier::new);
-        map.put(LoadBalanceDefinition.class, LoadBalanceReifier::new);
-        map.put(LogDefinition.class, LogReifier::new);
-        map.put(LoopDefinition.class, LoopReifier::new);
-        map.put(MarshalDefinition.class, MarshalReifier::new);
-        map.put(MulticastDefinition.class, MulticastReifier::new);
-        map.put(OnCompletionDefinition.class, OnCompletionReifier::new);
-        map.put(OnExceptionDefinition.class, OnExceptionReifier::new);
-        map.put(OnFallbackDefinition.class, OnFallbackReifier::new);
-        map.put(OtherwiseDefinition.class, OtherwiseReifier::new);
-        map.put(PipelineDefinition.class, PipelineReifier::new);
-        map.put(PolicyDefinition.class, PolicyReifier::new);
-        map.put(PollEnrichDefinition.class, PollEnrichReifier::new);
-        map.put(ProcessDefinition.class, ProcessReifier::new);
-        map.put(RecipientListDefinition.class, RecipientListReifier::new);
-        map.put(RemoveHeaderDefinition.class, RemoveHeaderReifier::new);
-        map.put(RemoveHeadersDefinition.class, RemoveHeadersReifier::new);
-        map.put(RemovePropertiesDefinition.class, 
RemovePropertiesReifier::new);
-        map.put(RemovePropertyDefinition.class, RemovePropertyReifier::new);
-        map.put(ResequenceDefinition.class, ResequenceReifier::new);
-        map.put(RollbackDefinition.class, RollbackReifier::new);
-        map.put(RoutingSlipDefinition.class, RoutingSlipReifier::new);
-        map.put(SagaDefinition.class, SagaReifier::new);
-        map.put(SamplingDefinition.class, SamplingReifier::new);
-        map.put(ScriptDefinition.class, ScriptReifier::new);
-        map.put(ServiceCallDefinition.class, ServiceCallReifier::new);
-        map.put(SetBodyDefinition.class, SetBodyReifier::new);
-        map.put(SetExchangePatternDefinition.class, 
SetExchangePatternReifier::new);
-        map.put(SetHeaderDefinition.class, SetHeaderReifier::new);
-        map.put(SetPropertyDefinition.class, SetPropertyReifier::new);
-        map.put(SortDefinition.class, SortReifier::new);
-        map.put(SplitDefinition.class, SplitReifier::new);
-        map.put(StepDefinition.class, StepReifier::new);
-        map.put(StopDefinition.class, StopReifier::new);
-        map.put(ThreadsDefinition.class, ThreadsReifier::new);
-        map.put(ThrottleDefinition.class, ThrottleReifier::new);
-        map.put(ThrowExceptionDefinition.class, ThrowExceptionReifier::new);
-        map.put(ToDefinition.class, SendReifier::new);
-        map.put(ToDynamicDefinition.class, ToDynamicReifier::new);
-        map.put(TransactedDefinition.class, TransactedReifier::new);
-        map.put(TransformDefinition.class, TransformReifier::new);
-        map.put(TryDefinition.class, TryReifier::new);
-        map.put(UnmarshalDefinition.class, UnmarshalReifier::new);
-        map.put(ValidateDefinition.class, ValidateReifier::new);
-        map.put(WireTapDefinition.class, WireTapReifier::new);
-        map.put(WhenSkipSendToEndpointDefinition.class, 
WhenSkipSendToEndpointReifier::new);
-        map.put(WhenDefinition.class, WhenReifier::new);
+                = new HashMap<>(0);
         PROCESSORS = map;
         ReifierStrategy.addReifierClearer(ProcessorReifier::clearReifiers);
     }
@@ -214,12 +149,158 @@ public abstract class ProcessorReifier<T extends 
ProcessorDefinition<?>> extends
     }
 
     public static ProcessorReifier<? extends ProcessorDefinition<?>> 
reifier(Route route, ProcessorDefinition<?> definition) {
-        BiFunction<Route, ProcessorDefinition<?>, ProcessorReifier<? extends 
ProcessorDefinition<?>>> reifier
-                = PROCESSORS.get(definition.getClass());
-        if (reifier != null) {
-            return reifier.apply(route, definition);
+        ProcessorReifier<? extends ProcessorDefinition<?>> answer = null;
+        if (!PROCESSORS.isEmpty()) {
+            // custom take precedence
+            BiFunction<Route, ProcessorDefinition<?>, ProcessorReifier<? 
extends ProcessorDefinition<?>>> reifier
+                    = PROCESSORS.get(definition.getClass());
+            if (reifier != null) {
+                answer = reifier.apply(route, definition);
+            }
+        }
+        if (answer == null) {
+            answer = coreReifier(route, definition);
+        }
+        if (answer == null) {
+            throw new IllegalStateException("Unsupported definition: " + 
definition);
+        }
+        return answer;
+    }
+
+    public static ProcessorReifier<? extends ProcessorDefinition<?>> 
coreReifier(
+            Route route, ProcessorDefinition<?> definition) {
+
+        if (definition instanceof AggregateDefinition) {
+            return new AggregateReifier(route, definition);
+        } else if (definition instanceof BeanDefinition) {
+            return new BeanReifier(route, definition);
+        } else if (definition instanceof CatchDefinition) {
+            return new CatchReifier(route, definition);
+        } else if (definition instanceof ChoiceDefinition) {
+            return new ChoiceReifier(route, definition);
+        } else if (definition instanceof CircuitBreakerDefinition) {
+            return new CircuitBreakerReifier(route, definition);
+        } else if (definition instanceof ClaimCheckDefinition) {
+            return new ClaimCheckReifier(route, definition);
+        } else if (definition instanceof ConvertBodyDefinition) {
+            return new ConvertBodyReifier(route, definition);
+        } else if (definition instanceof DelayDefinition) {
+            return new DelayReifier(route, definition);
+        } else if (definition instanceof DynamicRouterDefinition) {
+            return new DynamicRouterReifier(route, definition);
+        } else if (definition instanceof EnrichDefinition) {
+            return new EnrichReifier(route, definition);
+        } else if (definition instanceof FilterDefinition) {
+            return new FilterReifier(route, definition);
+        } else if (definition instanceof FinallyDefinition) {
+            return new FinallyReifier(route, definition);
+        } else if (definition instanceof IdempotentConsumerDefinition) {
+            return new IdempotentConsumerReifier(route, definition);
+        } else if (definition instanceof InOnlyDefinition) {
+            return new SendReifier(route, definition);
+        } else if (definition instanceof InOutDefinition) {
+            return new SendReifier(route, definition);
+        } else if (definition instanceof InterceptFromDefinition) {
+            return new InterceptFromReifier(route, definition);
+        } else if (definition instanceof InterceptDefinition) {
+            return new InterceptReifier<>(route, definition);
+        } else if (definition instanceof InterceptSendToEndpointDefinition) {
+            return new InterceptSendToEndpointReifier(route, definition);
+        } else if (definition instanceof LoadBalanceDefinition) {
+            return new LoadBalanceReifier(route, definition);
+        } else if (definition instanceof LogDefinition) {
+            return new LogReifier(route, definition);
+        } else if (definition instanceof LoopDefinition) {
+            return new LoopReifier(route, definition);
+        } else if (definition instanceof MarshalDefinition) {
+            return new MarshalReifier(route, definition);
+        } else if (definition instanceof MulticastDefinition) {
+            return new MulticastReifier(route, definition);
+        } else if (definition instanceof OnCompletionDefinition) {
+            return new OnCompletionReifier(route, definition);
+        } else if (definition instanceof OnExceptionDefinition) {
+            return new OnExceptionReifier(route, definition);
+        } else if (definition instanceof OnFallbackDefinition) {
+            return new OnFallbackReifier(route, definition);
+        } else if (definition instanceof OtherwiseDefinition) {
+            return new OtherwiseReifier(route, definition);
+        } else if (definition instanceof PipelineDefinition) {
+            return new PipelineReifier(route, definition);
+        } else if (definition instanceof PolicyDefinition) {
+            return new PolicyReifier(route, definition);
+        } else if (definition instanceof PollEnrichDefinition) {
+            return new PollEnrichReifier(route, definition);
+        } else if (definition instanceof ProcessDefinition) {
+            return new ProcessReifier(route, definition);
+        } else if (definition instanceof RecipientListDefinition) {
+            return new RecipientListReifier(route, definition);
+        } else if (definition instanceof RemoveHeaderDefinition) {
+            return new RemoveHeaderReifier(route, definition);
+        } else if (definition instanceof RemoveHeadersDefinition) {
+            return new RemoveHeadersReifier(route, definition);
+        } else if (definition instanceof RemovePropertyDefinition) {
+            return new RemovePropertyReifier(route, definition);
+        } else if (definition instanceof RemovePropertiesDefinition) {
+            return new RemovePropertiesReifier(route, definition);
+        } else if (definition instanceof ResequenceDefinition) {
+            return new ResequenceReifier(route, definition);
+        } else if (definition instanceof RollbackDefinition) {
+            return new RollbackReifier(route, definition);
+        } else if (definition instanceof RoutingSlipDefinition) {
+            return new RoutingSlipReifier(route, definition);
+        } else if (definition instanceof SagaDefinition) {
+            return new SagaReifier(route, definition);
+        } else if (definition instanceof SamplingDefinition) {
+            return new SamplingReifier(route, definition);
+        } else if (definition instanceof ScriptDefinition) {
+            return new ScriptReifier(route, definition);
+        } else if (definition instanceof ServiceCallDefinition) {
+            return new ServiceCallReifier(route, definition);
+        } else if (definition instanceof SetBodyDefinition) {
+            return new SetBodyReifier(route, definition);
+        } else if (definition instanceof SetExchangePatternDefinition) {
+            return new SetExchangePatternReifier(route, definition);
+        } else if (definition instanceof SetHeaderDefinition) {
+            return new SetHeaderReifier(route, definition);
+        } else if (definition instanceof SetPropertyDefinition) {
+            return new SetPropertyReifier(route, definition);
+        } else if (definition instanceof SortDefinition) {
+            return new SortReifier<>(route, definition);
+        } else if (definition instanceof SplitDefinition) {
+            return new SplitReifier(route, definition);
+        } else if (definition instanceof StepDefinition) {
+            return new StepReifier(route, definition);
+        } else if (definition instanceof StopDefinition) {
+            return new StopReifier(route, definition);
+        } else if (definition instanceof ThreadsDefinition) {
+            return new ThreadsReifier(route, definition);
+        } else if (definition instanceof ThrottleDefinition) {
+            return new ThrottleReifier(route, definition);
+        } else if (definition instanceof ThrowExceptionDefinition) {
+            return new ThrowExceptionReifier(route, definition);
+        } else if (definition instanceof ToDefinition) {
+            return new SendReifier(route, definition);
+        } else if (definition instanceof WireTapDefinition) {
+            return new WireTapReifier(route, definition);
+        } else if (definition instanceof ToDynamicDefinition) {
+            return new ToDynamicReifier<>(route, definition);
+        } else if (definition instanceof TransactedDefinition) {
+            return new TransactedReifier(route, definition);
+        } else if (definition instanceof TransformDefinition) {
+            return new TransformReifier(route, definition);
+        } else if (definition instanceof TryDefinition) {
+            return new TryReifier(route, definition);
+        } else if (definition instanceof UnmarshalDefinition) {
+            return new UnmarshalReifier(route, definition);
+        } else if (definition instanceof ValidateDefinition) {
+            return new ValidateReifier(route, definition);
+        } else if (definition instanceof WhenSkipSendToEndpointDefinition) {
+            return new WhenSkipSendToEndpointReifier(route, definition);
+        } else if (definition instanceof WhenDefinition) {
+            return new WhenReifier(route, definition);
         }
-        throw new IllegalStateException("Unsupported definition: " + 
definition);
+
+        return null;
     }
 
     /**
diff --git 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/dataformat/DataFormatReifier.java
 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/dataformat/DataFormatReifier.java
index 72e0cb8..6ffc2ce86 100644
--- 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/dataformat/DataFormatReifier.java
+++ 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/dataformat/DataFormatReifier.java
@@ -85,50 +85,9 @@ public abstract class DataFormatReifier<T extends 
DataFormatDefinition> extends
 
     private static final Map<Class<? extends DataFormatDefinition>, 
BiFunction<CamelContext, DataFormatDefinition, DataFormatReifier<? extends 
DataFormatDefinition>>> DATAFORMATS;
     static {
+        // for custom reifiers
         Map<Class<? extends DataFormatDefinition>, BiFunction<CamelContext, 
DataFormatDefinition, DataFormatReifier<? extends DataFormatDefinition>>> map
-                = new HashMap<>();
-        map.put(Any23DataFormat.class, Any23DataFormatReifier::new);
-        map.put(ASN1DataFormat.class, ASN1DataFormatReifier::new);
-        map.put(AvroDataFormat.class, AvroDataFormatReifier::new);
-        map.put(BarcodeDataFormat.class, BarcodeDataFormatReifier::new);
-        map.put(Base64DataFormat.class, Base64DataFormatReifier::new);
-        map.put(BeanioDataFormat.class, BeanioDataFormatReifier::new);
-        map.put(BindyDataFormat.class, BindyDataFormatReifier::new);
-        map.put(CBORDataFormat.class, CBORDataFormatReifier::new);
-        map.put(CryptoDataFormat.class, CryptoDataFormatReifier::new);
-        map.put(CsvDataFormat.class, CsvDataFormatReifier::new);
-        map.put(CustomDataFormat.class, CustomDataFormatReifier::new);
-        map.put(FhirDataformat.class, FhirDataFormatReifier::new);
-        map.put(FhirJsonDataFormat.class, FhirJsonDataFormatReifier::new);
-        map.put(FhirXmlDataFormat.class, FhirXmlDataFormatReifier::new);
-        map.put(FlatpackDataFormat.class, FlatpackDataFormatReifier::new);
-        map.put(GrokDataFormat.class, GrokDataFormatReifier::new);
-        map.put(GzipDataFormat.class, GzipDataFormatReifier::new);
-        map.put(HL7DataFormat.class, HL7DataFormatReifier::new);
-        map.put(IcalDataFormat.class, IcalDataFormatReifier::new);
-        map.put(JacksonXMLDataFormat.class, JacksonXMLDataFormatReifier::new);
-        map.put(JaxbDataFormat.class, JaxbDataFormatReifier::new);
-        map.put(JsonApiDataFormat.class, JsonApiDataFormatReifier::new);
-        map.put(JsonDataFormat.class, JsonDataFormatReifier::new);
-        map.put(LZFDataFormat.class, LZFDataFormatReifier::new);
-        map.put(MimeMultipartDataFormat.class, 
MimeMultipartDataFormatReifier::new);
-        map.put(PGPDataFormat.class, PGPDataFormatReifier::new);
-        map.put(ProtobufDataFormat.class, ProtobufDataFormatReifier::new);
-        map.put(RssDataFormat.class, RssDataFormatReifier::new);
-        map.put(SoapJaxbDataFormat.class, SoapJaxbDataFormatReifier::new);
-        map.put(SyslogDataFormat.class, SyslogDataFormatReifier::new);
-        map.put(TarFileDataFormat.class, TarFileDataFormatReifier::new);
-        map.put(ThriftDataFormat.class, ThriftDataFormatReifier::new);
-        map.put(TidyMarkupDataFormat.class, TidyMarkupDataFormatReifier::new);
-        map.put(UniVocityCsvDataFormat.class, 
UniVocityCsvDataFormatReifier::new);
-        map.put(UniVocityFixedWidthDataFormat.class, 
UniVocityFixedWidthDataFormatReifier::new);
-        map.put(UniVocityTsvDataFormat.class, 
UniVocityTsvDataFormatReifier::new);
-        map.put(XmlRpcDataFormat.class, XmlRpcDataFormatReifier::new);
-        map.put(XMLSecurityDataFormat.class, 
XMLSecurityDataFormatReifier::new);
-        map.put(XStreamDataFormat.class, XStreamDataFormatReifier::new);
-        map.put(YAMLDataFormat.class, YAMLDataFormatReifier::new);
-        map.put(ZipDeflaterDataFormat.class, ZipDataFormatReifier::new);
-        map.put(ZipFileDataFormat.class, ZipFileDataFormatReifier::new);
+                = new HashMap<>(0);
         DATAFORMATS = map;
         ReifierStrategy.addReifierClearer(DataFormatReifier::clearReifiers);
     }
@@ -196,12 +155,113 @@ public abstract class DataFormatReifier<T extends 
DataFormatDefinition> extends
 
     public static DataFormatReifier<? extends DataFormatDefinition> reifier(
             CamelContext camelContext, DataFormatDefinition definition) {
-        BiFunction<CamelContext, DataFormatDefinition, DataFormatReifier<? 
extends DataFormatDefinition>> reifier
-                = DATAFORMATS.get(definition.getClass());
-        if (reifier != null) {
-            return reifier.apply(camelContext, definition);
+
+        DataFormatReifier<? extends DataFormatDefinition> answer = null;
+        if (!DATAFORMATS.isEmpty()) {
+            // custom take precedence
+            BiFunction<CamelContext, DataFormatDefinition, DataFormatReifier<? 
extends DataFormatDefinition>> reifier
+                    = DATAFORMATS.get(definition.getClass());
+            if (reifier != null) {
+                answer = reifier.apply(camelContext, definition);
+            }
+        }
+        if (answer == null) {
+            answer = coreReifier(camelContext, definition);
         }
-        throw new IllegalStateException("Unsupported definition: " + 
definition);
+        if (answer == null) {
+            throw new IllegalStateException("Unsupported definition: " + 
definition);
+        }
+        return answer;
+    }
+
+    private static DataFormatReifier<? extends DataFormatDefinition> 
coreReifier(
+            CamelContext camelContext, DataFormatDefinition definition) {
+        if (definition instanceof Any23DataFormat) {
+            return new Any23DataFormatReifier(camelContext, definition);
+        } else if (definition instanceof ASN1DataFormat) {
+            return new ASN1DataFormatReifier(camelContext, definition);
+        } else if (definition instanceof AvroDataFormat) {
+            return new AvroDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof BarcodeDataFormat) {
+            return new BarcodeDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof Base64DataFormat) {
+            return new Base64DataFormatReifier(camelContext, definition);
+        } else if (definition instanceof BeanioDataFormat) {
+            return new BeanioDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof BindyDataFormat) {
+            return new BindyDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof CBORDataFormat) {
+            return new CBORDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof CryptoDataFormat) {
+            return new CryptoDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof CsvDataFormat) {
+            return new CsvDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof CustomDataFormat) {
+            return new CustomDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof FhirJsonDataFormat) {
+            return new FhirJsonDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof FhirXmlDataFormat) {
+            return new FhirXmlDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof FhirDataformat) {
+            return new FhirDataFormatReifier<>(camelContext, definition);
+        } else if (definition instanceof FlatpackDataFormat) {
+            return new FlatpackDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof GrokDataFormat) {
+            return new GrokDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof GzipDataFormat) {
+            return new GzipDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof HL7DataFormat) {
+            return new HL7DataFormatReifier(camelContext, definition);
+        } else if (definition instanceof IcalDataFormat) {
+            return new IcalDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof JacksonXMLDataFormat) {
+            return new JacksonXMLDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof JaxbDataFormat) {
+            return new JaxbDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof JsonApiDataFormat) {
+            return new JsonApiDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof JsonDataFormat) {
+            return new JsonDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof LZFDataFormat) {
+            return new LZFDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof MimeMultipartDataFormat) {
+            return new MimeMultipartDataFormatReifier(camelContext, 
definition);
+        } else if (definition instanceof PGPDataFormat) {
+            return new PGPDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof ProtobufDataFormat) {
+            return new ProtobufDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof RssDataFormat) {
+            return new RssDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof SoapJaxbDataFormat) {
+            return new SoapJaxbDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof SyslogDataFormat) {
+            return new SyslogDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof TarFileDataFormat) {
+            return new TarFileDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof ThriftDataFormat) {
+            return new ThriftDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof TidyMarkupDataFormat) {
+            return new TidyMarkupDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof UniVocityCsvDataFormat) {
+            return new UniVocityCsvDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof UniVocityFixedWidthDataFormat) {
+            return new UniVocityFixedWidthDataFormatReifier(camelContext, 
definition);
+        } else if (definition instanceof UniVocityTsvDataFormat) {
+            return new UniVocityTsvDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof XmlRpcDataFormat) {
+            return new XmlRpcDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof XMLSecurityDataFormat) {
+            return new XMLSecurityDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof XStreamDataFormat) {
+            return new XStreamDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof YAMLDataFormat) {
+            return new YAMLDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof ZipDeflaterDataFormat) {
+            return new ZipDataFormatReifier(camelContext, definition);
+        } else if (definition instanceof ZipFileDataFormat) {
+            return new ZipFileDataFormatReifier(camelContext, definition);
+        }
+        return null;
     }
 
     public DataFormat createDataFormat() {
diff --git 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/errorhandler/ErrorHandlerReifier.java
 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/errorhandler/ErrorHandlerReifier.java
index fb0b83b..2c0e0e9 100644
--- 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/errorhandler/ErrorHandlerReifier.java
+++ 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/errorhandler/ErrorHandlerReifier.java
@@ -52,13 +52,11 @@ import org.apache.camel.util.ObjectHelper;
 public abstract class ErrorHandlerReifier<T extends ErrorHandlerFactory> 
extends AbstractReifier {
 
     private static final Map<Class<?>, BiFunction<Route, ErrorHandlerFactory, 
ErrorHandlerReifier<? extends ErrorHandlerFactory>>> ERROR_HANDLERS;
+
     static {
+        // for custom reifiers
         Map<Class<?>, BiFunction<Route, ErrorHandlerFactory, 
ErrorHandlerReifier<? extends ErrorHandlerFactory>>> map
-                = new HashMap<>();
-        map.put(DeadLetterChannelConfiguration.class, 
DeadLetterChannelReifier::new);
-        map.put(DefaultErrorHandlerConfiguration.class, 
DefaultErrorHandlerReifier::new);
-        map.put(ErrorHandlerRefConfiguration.class, 
ErrorHandlerRefReifier::new);
-        map.put(NoErrorHandlerConfiguraiton.class, NoErrorHandlerReifier::new);
+                = new HashMap<>(0);
         ERROR_HANDLERS = map;
     }
 
@@ -79,27 +77,35 @@ public abstract class ErrorHandlerReifier<T extends 
ErrorHandlerFactory> extends
     }
 
     public static ErrorHandlerReifier<? extends ErrorHandlerFactory> 
reifier(Route route, ErrorHandlerFactory definition) {
-        BiFunction<Route, ErrorHandlerFactory, ErrorHandlerReifier<? extends 
ErrorHandlerFactory>> reifier = null;
-
-        // custom error handlers is registered by class
-        reifier = ERROR_HANDLERS.get(definition.getClass());
-
-        if (reifier == null) {
-            // out of the box error handlers from camel-core
-            if (definition instanceof DeadLetterChannelConfiguration) {
-                reifier = 
ERROR_HANDLERS.get(DeadLetterChannelConfiguration.class);
-            } else if (definition instanceof DefaultErrorHandlerConfiguration) 
{
-                reifier = 
ERROR_HANDLERS.get(DefaultErrorHandlerConfiguration.class);
-            } else if (definition instanceof ErrorHandlerRefConfiguration) {
-                reifier = 
ERROR_HANDLERS.get(ErrorHandlerRefConfiguration.class);
-            } else if (definition instanceof NoErrorHandlerConfiguraiton) {
-                reifier = 
ERROR_HANDLERS.get(NoErrorHandlerConfiguraiton.class);
+        ErrorHandlerReifier<? extends ErrorHandlerFactory> answer = null;
+        if (!ERROR_HANDLERS.isEmpty()) {
+            // custom take precedence
+            BiFunction<Route, ErrorHandlerFactory, ErrorHandlerReifier<? 
extends ErrorHandlerFactory>> reifier
+                    = ERROR_HANDLERS.get(definition.getClass());
+            if (reifier != null) {
+                answer = reifier.apply(route, definition);
             }
         }
-        if (reifier != null) {
-            return reifier.apply(route, definition);
+        if (answer == null) {
+            answer = coreReifier(route, definition);
+        }
+        if (answer == null) {
+            throw new IllegalStateException("Unsupported definition: " + 
definition);
+        }
+        return answer;
+    }
+
+    private static ErrorHandlerReifier<? extends ErrorHandlerFactory> 
coreReifier(Route route, ErrorHandlerFactory definition) {
+        if (definition instanceof DeadLetterChannelConfiguration) {
+            return new DeadLetterChannelReifier(route, definition);
+        } else if (definition instanceof DefaultErrorHandlerConfiguration) {
+            return new DefaultErrorHandlerReifier<>(route, definition);
+        } else if (definition instanceof ErrorHandlerRefConfiguration) {
+            return new ErrorHandlerRefReifier(route, definition);
+        } else if (definition instanceof NoErrorHandlerConfiguraiton) {
+            return new NoErrorHandlerReifier(route, definition);
         }
-        throw new IllegalStateException("Unsupported definition: " + 
definition);
+        return null;
     }
 
     public ExceptionPolicy createExceptionPolicy(OnExceptionDefinition def) {
diff --git 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/ExpressionReifier.java
 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/ExpressionReifier.java
index 38d08f6..a60d840 100644
--- 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/ExpressionReifier.java
+++ 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/ExpressionReifier.java
@@ -61,27 +61,9 @@ public class ExpressionReifier<T extends 
ExpressionDefinition> extends AbstractR
     private static final Map<Class<?>, BiFunction<CamelContext, 
ExpressionDefinition, ExpressionReifier<? extends ExpressionDefinition>>> 
EXPRESSIONS;
 
     static {
+        // for custom reifiers
         Map<Class<?>, BiFunction<CamelContext, ExpressionDefinition, 
ExpressionReifier<? extends ExpressionDefinition>>> map
-                = new LinkedHashMap<>(18);
-        map.put(ConstantExpression.class, ExpressionReifier::new);
-        map.put(ExchangePropertyExpression.class, ExpressionReifier::new);
-        map.put(ExpressionDefinition.class, ExpressionReifier::new);
-        map.put(GroovyExpression.class, ExpressionReifier::new);
-        map.put(HeaderExpression.class, ExpressionReifier::new);
-        map.put(Hl7TerserExpression.class, ExpressionReifier::new);
-        map.put(JoorExpression.class, JoorExpressionReifier::new);
-        map.put(JsonPathExpression.class, JsonPathExpressionReifier::new);
-        map.put(LanguageExpression.class, ExpressionReifier::new);
-        map.put(MethodCallExpression.class, MethodCallExpressionReifier::new);
-        map.put(MvelExpression.class, ExpressionReifier::new);
-        map.put(OgnlExpression.class, ExpressionReifier::new);
-        map.put(RefExpression.class, ExpressionReifier::new);
-        map.put(SimpleExpression.class, SimpleExpressionReifier::new);
-        map.put(SpELExpression.class, ExpressionReifier::new);
-        map.put(TokenizerExpression.class, TokenizerExpressionReifier::new);
-        map.put(XMLTokenizerExpression.class, 
XMLTokenizerExpressionReifier::new);
-        map.put(XPathExpression.class, XPathExpressionReifier::new);
-        map.put(XQueryExpression.class, XQueryExpressionReifier::new);
+                = new LinkedHashMap<>(0);
         EXPRESSIONS = map;
         ReifierStrategy.addReifierClearer(ExpressionReifier::clearReifiers);
     }
@@ -100,12 +82,67 @@ public class ExpressionReifier<T extends 
ExpressionDefinition> extends AbstractR
 
     public static ExpressionReifier<? extends ExpressionDefinition> reifier(
             CamelContext camelContext, ExpressionDefinition definition) {
-        BiFunction<CamelContext, ExpressionDefinition, ExpressionReifier<? 
extends ExpressionDefinition>> reifier
-                = EXPRESSIONS.get(definition.getClass());
-        if (reifier != null) {
-            return reifier.apply(camelContext, definition);
+
+        ExpressionReifier<? extends ExpressionDefinition> answer = null;
+        if (!EXPRESSIONS.isEmpty()) {
+            // custom take precedence
+            BiFunction<CamelContext, ExpressionDefinition, ExpressionReifier<? 
extends ExpressionDefinition>> reifier
+                    = EXPRESSIONS.get(definition.getClass());
+            if (reifier != null) {
+                answer = reifier.apply(camelContext, definition);
+            }
+        }
+        if (answer == null) {
+            answer = coreReifier(camelContext, definition);
+        }
+        if (answer == null) {
+            throw new IllegalStateException("Unsupported definition: " + 
definition);
+        }
+        return answer;
+    }
+
+    private static ExpressionReifier<? extends ExpressionDefinition> 
coreReifier(
+            CamelContext camelContext, ExpressionDefinition definition) {
+        if (definition instanceof ConstantExpression) {
+            return new ExpressionReifier<>(camelContext, definition);
+        } else if (definition instanceof ExchangePropertyExpression) {
+            return new ExpressionReifier<>(camelContext, definition);
+        } else if (definition instanceof GroovyExpression) {
+            return new ExpressionReifier<>(camelContext, definition);
+        } else if (definition instanceof HeaderExpression) {
+            return new ExpressionReifier<>(camelContext, definition);
+        } else if (definition instanceof Hl7TerserExpression) {
+            return new ExpressionReifier<>(camelContext, definition);
+        } else if (definition instanceof JoorExpression) {
+            return new JoorExpressionReifier(camelContext, definition);
+        } else if (definition instanceof JsonPathExpression) {
+            return new JsonPathExpressionReifier(camelContext, definition);
+        } else if (definition instanceof LanguageExpression) {
+            return new ExpressionReifier<>(camelContext, definition);
+        } else if (definition instanceof MethodCallExpression) {
+            return new MethodCallExpressionReifier(camelContext, definition);
+        } else if (definition instanceof MvelExpression) {
+            return new ExpressionReifier<>(camelContext, definition);
+        } else if (definition instanceof OgnlExpression) {
+            return new ExpressionReifier<>(camelContext, definition);
+        } else if (definition instanceof RefExpression) {
+            return new ExpressionReifier<>(camelContext, definition);
+        } else if (definition instanceof SimpleExpression) {
+            return new SimpleExpressionReifier(camelContext, definition);
+        } else if (definition instanceof SpELExpression) {
+            return new ExpressionReifier<>(camelContext, definition);
+        } else if (definition instanceof TokenizerExpression) {
+            return new TokenizerExpressionReifier(camelContext, definition);
+        } else if (definition instanceof XMLTokenizerExpression) {
+            return new XMLTokenizerExpressionReifier(camelContext, definition);
+        } else if (definition instanceof XPathExpression) {
+            return new XPathExpressionReifier(camelContext, definition);
+        } else if (definition instanceof XQueryExpression) {
+            return new XQueryExpressionReifier(camelContext, definition);
+        } else if (definition instanceof ExpressionDefinition) {
+            return new ExpressionReifier<>(camelContext, definition);
         }
-        throw new IllegalStateException("Unsupported definition: " + 
definition);
+        return null;
     }
 
     public static void clearReifiers() {
diff --git 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/loadbalancer/LoadBalancerReifier.java
 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/loadbalancer/LoadBalancerReifier.java
index da04db9..2cd27a1 100644
--- 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/loadbalancer/LoadBalancerReifier.java
+++ 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/loadbalancer/LoadBalancerReifier.java
@@ -38,16 +38,9 @@ public class LoadBalancerReifier<T extends 
LoadBalancerDefinition> extends Abstr
 
     private static final Map<Class<?>, BiFunction<Route, 
LoadBalancerDefinition, LoadBalancerReifier<? extends LoadBalancerDefinition>>> 
LOAD_BALANCERS;
     static {
+        // for custom reifiers
         Map<Class<?>, BiFunction<Route, LoadBalancerDefinition, 
LoadBalancerReifier<? extends LoadBalancerDefinition>>> map
-                = new HashMap<>();
-        map.put(LoadBalancerDefinition.class, LoadBalancerReifier::new);
-        map.put(CustomLoadBalancerDefinition.class, 
CustomLoadBalancerReifier::new);
-        map.put(FailoverLoadBalancerDefinition.class, 
FailoverLoadBalancerReifier::new);
-        map.put(RandomLoadBalancerDefinition.class, 
RandomLoadBalancerReifier::new);
-        map.put(RoundRobinLoadBalancerDefinition.class, 
RoundRobinLoadBalancerReifier::new);
-        map.put(StickyLoadBalancerDefinition.class, 
StickyLoadBalancerReifier::new);
-        map.put(TopicLoadBalancerDefinition.class, 
TopicLoadBalancerReifier::new);
-        map.put(WeightedLoadBalancerDefinition.class, 
WeightedLoadBalancerReifier::new);
+                = new HashMap<>(0);
         LOAD_BALANCERS = map;
         ReifierStrategy.addReifierClearer(LoadBalancerReifier::clearReifiers);
     }
@@ -61,12 +54,43 @@ public class LoadBalancerReifier<T extends 
LoadBalancerDefinition> extends Abstr
 
     public static LoadBalancerReifier<? extends LoadBalancerDefinition> 
reifier(
             Route route, LoadBalancerDefinition definition) {
-        BiFunction<Route, LoadBalancerDefinition, LoadBalancerReifier<? 
extends LoadBalancerDefinition>> reifier
-                = LOAD_BALANCERS.get(definition.getClass());
-        if (reifier != null) {
-            return reifier.apply(route, definition);
+
+        LoadBalancerReifier<? extends LoadBalancerDefinition> answer = null;
+        if (!LOAD_BALANCERS.isEmpty()) {
+            // custom take precedence
+            BiFunction<Route, LoadBalancerDefinition, LoadBalancerReifier<? 
extends LoadBalancerDefinition>> reifier
+                    = LOAD_BALANCERS.get(definition.getClass());
+            if (reifier != null) {
+                answer = reifier.apply(route, definition);
+            }
+        }
+        if (answer == null) {
+            answer = coreReifier(route, definition);
+        }
+        if (answer == null) {
+            throw new IllegalStateException("Unsupported definition: " + 
definition);
+        }
+        return answer;
+    }
+
+    private static LoadBalancerReifier<? extends LoadBalancerDefinition> 
coreReifier(
+            Route route, LoadBalancerDefinition definition) {
+        if (definition instanceof CustomLoadBalancerDefinition) {
+            return new CustomLoadBalancerReifier(route, definition);
+        } else if (definition instanceof FailoverLoadBalancerDefinition) {
+            return new FailoverLoadBalancerReifier(route, definition);
+        } else if (definition instanceof RandomLoadBalancerDefinition) {
+            return new RandomLoadBalancerReifier(route, definition);
+        } else if (definition instanceof RoundRobinLoadBalancerDefinition) {
+            return new RoundRobinLoadBalancerReifier(route, definition);
+        } else if (definition instanceof StickyLoadBalancerDefinition) {
+            return new StickyLoadBalancerReifier(route, definition);
+        } else if (definition instanceof TopicLoadBalancerDefinition) {
+            return new TopicLoadBalancerReifier(route, definition);
+        } else if (definition instanceof WeightedLoadBalancerDefinition) {
+            return new WeightedLoadBalancerReifier(route, definition);
         }
-        throw new IllegalStateException("Unsupported definition: " + 
definition);
+        return null;
     }
 
     public static void clearReifiers() {
diff --git 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/transformer/TransformerReifier.java
 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/transformer/TransformerReifier.java
index 8b9531e..6776783 100644
--- 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/transformer/TransformerReifier.java
+++ 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/transformer/TransformerReifier.java
@@ -33,11 +33,9 @@ public abstract class TransformerReifier<T> extends 
AbstractReifier {
 
     private static final Map<Class<?>, BiFunction<CamelContext, 
TransformerDefinition, TransformerReifier<? extends TransformerDefinition>>> 
TRANSFORMERS;
     static {
+        // for custom reifiers
         Map<Class<?>, BiFunction<CamelContext, TransformerDefinition, 
TransformerReifier<? extends TransformerDefinition>>> map
-                = new HashMap<>();
-        map.put(CustomTransformerDefinition.class, 
CustomTransformeReifier::new);
-        map.put(DataFormatTransformerDefinition.class, 
DataFormatTransformerReifier::new);
-        map.put(EndpointTransformerDefinition.class, 
EndpointTransformeReifier::new);
+                = new HashMap<>(0);
         TRANSFORMERS = map;
         ReifierStrategy.addReifierClearer(TransformerReifier::clearReifiers);
     }
@@ -51,12 +49,35 @@ public abstract class TransformerReifier<T> extends 
AbstractReifier {
 
     public static TransformerReifier<? extends TransformerDefinition> reifier(
             CamelContext camelContext, TransformerDefinition definition) {
-        BiFunction<CamelContext, TransformerDefinition, TransformerReifier<? 
extends TransformerDefinition>> reifier
-                = TRANSFORMERS.get(definition.getClass());
-        if (reifier != null) {
-            return reifier.apply(camelContext, definition);
+
+        TransformerReifier<? extends TransformerDefinition> answer = null;
+        if (!TRANSFORMERS.isEmpty()) {
+            // custom take precedence
+            BiFunction<CamelContext, TransformerDefinition, 
TransformerReifier<? extends TransformerDefinition>> reifier
+                    = TRANSFORMERS.get(definition.getClass());
+            if (reifier != null) {
+                answer = reifier.apply(camelContext, definition);
+            }
+        }
+        if (answer == null) {
+            answer = coreReifier(camelContext, definition);
+        }
+        if (answer == null) {
+            throw new IllegalStateException("Unsupported definition: " + 
definition);
+        }
+        return answer;
+    }
+
+    private static TransformerReifier<? extends TransformerDefinition> 
coreReifier(
+            CamelContext camelContext, TransformerDefinition definition) {
+        if (definition instanceof CustomTransformerDefinition) {
+            return new CustomTransformeReifier(camelContext, definition);
+        } else if (definition instanceof DataFormatTransformerDefinition) {
+            return new DataFormatTransformerReifier(camelContext, definition);
+        } else if (definition instanceof EndpointTransformerDefinition) {
+            return new EndpointTransformeReifier(camelContext, definition);
         }
-        throw new IllegalStateException("Unsupported definition: " + 
definition);
+        return null;
     }
 
     public static void clearReifiers() {
diff --git 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/validator/ValidatorReifier.java
 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/validator/ValidatorReifier.java
index da0d1d4..04a469e 100644
--- 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/validator/ValidatorReifier.java
+++ 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/validator/ValidatorReifier.java
@@ -33,11 +33,9 @@ public abstract class ValidatorReifier<T> extends 
AbstractReifier {
 
     private static final Map<Class<?>, BiFunction<CamelContext, 
ValidatorDefinition, ValidatorReifier<? extends ValidatorDefinition>>> 
VALIDATORS;
     static {
+        // for custom reifiers
         Map<Class<?>, BiFunction<CamelContext, ValidatorDefinition, 
ValidatorReifier<? extends ValidatorDefinition>>> map
-                = new HashMap<>();
-        map.put(CustomValidatorDefinition.class, CustomValidatorReifier::new);
-        map.put(EndpointValidatorDefinition.class, 
EndpointValidatorReifier::new);
-        map.put(PredicateValidatorDefinition.class, 
PredicateValidatorReifier::new);
+                = new HashMap<>(0);
         VALIDATORS = map;
         ReifierStrategy.addReifierClearer(ValidatorReifier::clearReifiers);
     }
@@ -57,12 +55,35 @@ public abstract class ValidatorReifier<T> extends 
AbstractReifier {
 
     public static ValidatorReifier<? extends ValidatorDefinition> reifier(
             CamelContext camelContext, ValidatorDefinition definition) {
-        BiFunction<CamelContext, ValidatorDefinition, ValidatorReifier<? 
extends ValidatorDefinition>> reifier
-                = VALIDATORS.get(definition.getClass());
-        if (reifier != null) {
-            return reifier.apply(camelContext, definition);
+
+        ValidatorReifier<? extends ValidatorDefinition> answer = null;
+        if (!VALIDATORS.isEmpty()) {
+            // custom take precedence
+            BiFunction<CamelContext, ValidatorDefinition, ValidatorReifier<? 
extends ValidatorDefinition>> reifier
+                    = VALIDATORS.get(definition.getClass());
+            if (reifier != null) {
+                answer = reifier.apply(camelContext, definition);
+            }
+        }
+        if (answer == null) {
+            answer = coreReifier(camelContext, definition);
+        }
+        if (answer == null) {
+            throw new IllegalStateException("Unsupported definition: " + 
definition);
+        }
+        return answer;
+    }
+
+    private static ValidatorReifier<? extends ValidatorDefinition> coreReifier(
+            CamelContext camelContext, ValidatorDefinition definition) {
+        if (definition instanceof CustomValidatorDefinition) {
+            return new CustomValidatorReifier(camelContext, definition);
+        } else if (definition instanceof EndpointValidatorDefinition) {
+            return new EndpointValidatorReifier(camelContext, definition);
+        } else if (definition instanceof PredicateValidatorDefinition) {
+            return new PredicateValidatorReifier(camelContext, definition);
         }
-        throw new IllegalStateException("Unsupported definition: " + 
definition);
+        return null;
     }
 
     public static void clearReifiers() {
diff --git 
a/core/camel-core/src/test/java/org/apache/camel/reifier/ProcessorReifierTest.java
 
b/core/camel-core/src/test/java/org/apache/camel/reifier/ProcessorReifierTest.java
index c13b9fe..22f8af0 100644
--- 
a/core/camel-core/src/test/java/org/apache/camel/reifier/ProcessorReifierTest.java
+++ 
b/core/camel-core/src/test/java/org/apache/camel/reifier/ProcessorReifierTest.java
@@ -19,25 +19,18 @@ package org.apache.camel.reifier;
 import org.apache.camel.Route;
 import org.apache.camel.impl.engine.DefaultRoute;
 import org.apache.camel.model.ProcessDefinition;
+import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.fail;
-
 public class ProcessorReifierTest {
     @Test
     public void testHandleCustomProcessorDefinition() {
         Route ctx = new DefaultRoute(null, null, null, null, null);
-        try {
-            ProcessorReifier.reifier(ctx, new MyProcessor());
-
-            fail("Should throw IllegalStateException instead");
-        } catch (IllegalStateException e) {
-        }
-
-        ProcessorReifier.registerReifier(MyProcessor.class, 
ProcessReifier::new);
-        ProcessorReifier.reifier(ctx, new ProcessDefinition());
+        ProcessorReifier.registerReifier(MyProcessorDefinition.class, 
ProcessReifier::new);
+        ProcessReifier ref = (ProcessReifier) ProcessorReifier.reifier(ctx, 
new MyProcessorDefinition());
+        Assertions.assertTrue(ref.definition instanceof MyProcessorDefinition);
     }
 
-    public static class MyProcessor extends ProcessDefinition {
+    public static class MyProcessorDefinition extends ProcessDefinition {
     }
 }
diff --git 
a/core/camel-core/src/test/java/org/apache/camel/reifier/DataFormatReifierTest.java
 
b/core/camel-core/src/test/java/org/apache/camel/reifier/dataformat/DataFormatReifierTest.java
similarity index 67%
rename from 
core/camel-core/src/test/java/org/apache/camel/reifier/DataFormatReifierTest.java
rename to 
core/camel-core/src/test/java/org/apache/camel/reifier/dataformat/DataFormatReifierTest.java
index f02f533..3e7f074 100644
--- 
a/core/camel-core/src/test/java/org/apache/camel/reifier/DataFormatReifierTest.java
+++ 
b/core/camel-core/src/test/java/org/apache/camel/reifier/dataformat/DataFormatReifierTest.java
@@ -14,32 +14,21 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.reifier;
+package org.apache.camel.reifier.dataformat;
 
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.model.dataformat.CustomDataFormat;
-import org.apache.camel.reifier.dataformat.CustomDataFormatReifier;
-import org.apache.camel.reifier.dataformat.DataFormatReifier;
-import org.junit.jupiter.api.MethodOrderer;
+import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.TestMethodOrder;
 
-import static org.junit.jupiter.api.Assertions.fail;
-
-@TestMethodOrder(MethodOrderer.Alphanumeric.class)
 public class DataFormatReifierTest {
 
     @Test
     public void testHandleCustomDataFormat() {
         DefaultCamelContext context = new DefaultCamelContext();
-        try {
-            DataFormatReifier.reifier(context, new MyDataFormat());
-            fail("Should throw IllegalStateException instead");
-        } catch (IllegalStateException e) {
-        }
-
         DataFormatReifier.registerReifier(MyDataFormat.class, 
CustomDataFormatReifier::new);
-        DataFormatReifier.reifier(context, new MyDataFormat());
+        DataFormatReifier<?> ref = DataFormatReifier.reifier(context, new 
MyDataFormat());
+        Assertions.assertTrue(ref.definition instanceof MyDataFormat);
     }
 
     public static class MyDataFormat extends CustomDataFormat {

Reply via email to