squakez commented on a change in pull request #5508:
URL: https://github.com/apache/camel/pull/5508#discussion_r626647109



##########
File path: 
dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/ErrorHandlerBuilderDeserializer.java
##########
@@ -16,44 +16,101 @@
  */
 package org.apache.camel.dsl.yaml.deserializers;
 
+import org.apache.camel.CamelContext;
+import org.apache.camel.ExtendedCamelContext;
+import org.apache.camel.builder.DeadLetterChannelBuilder;
+import org.apache.camel.builder.DefaultErrorHandlerBuilder;
+import org.apache.camel.builder.ErrorHandlerBuilder;
 import org.apache.camel.builder.ErrorHandlerBuilderRef;
-import org.apache.camel.dsl.yaml.common.YamlDeserializerBase;
+import org.apache.camel.builder.NoErrorHandlerBuilder;
+import org.apache.camel.dsl.yaml.common.YamlDeserializationContext;
 import org.apache.camel.dsl.yaml.common.YamlDeserializerResolver;
+import org.apache.camel.dsl.yaml.common.exception.UnsupportedFieldException;
+import org.apache.camel.dsl.yaml.common.exception.YamlDeserializationException;
+import org.apache.camel.spi.CamelContextCustomizer;
 import org.apache.camel.spi.annotations.YamlIn;
 import org.apache.camel.spi.annotations.YamlProperty;
 import org.apache.camel.spi.annotations.YamlType;
+import org.snakeyaml.engine.v2.api.ConstructNode;
+import org.snakeyaml.engine.v2.nodes.MappingNode;
 import org.snakeyaml.engine.v2.nodes.Node;
+import org.snakeyaml.engine.v2.nodes.NodeTuple;
+
+import static 
org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.asMappingNode;
+import static org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.asText;
+import static org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.asType;
+import static 
org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.getDeserializationContext;
+import static 
org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.setDeserializationContext;
 
 @YamlIn
 @YamlType(
           nodes = "error-handler",
           types = ErrorHandlerBuilderRef.class,
           order = YamlDeserializerResolver.ORDER_DEFAULT,
           properties = {
-                  @YamlProperty(name = "ref", type = "string")
+                  @YamlProperty(name = "ref",
+                                type = "string"),
+                  @YamlProperty(name = "none",
+                                type = 
"object:org.apache.camel.builder.NoErrorHandlerBuilder"),
+                  @YamlProperty(name = "log",
+                                type = 
"object:org.apache.camel.builder.DefaultErrorHandlerBuilder"),
+                  @YamlProperty(name = "dead-letter-channel",
+                                type = 
"object:org.apache.camel.builder.DeadLetterChannelBuilder"),
           })
-public class ErrorHandlerBuilderDeserializer extends 
YamlDeserializerBase<ErrorHandlerBuilderRef> {
-    public ErrorHandlerBuilderDeserializer() {
-        super(ErrorHandlerBuilderRef.class);
-    }
-
+public class ErrorHandlerBuilderDeserializer implements ConstructNode {
     @Override
-    protected ErrorHandlerBuilderRef newInstance() {
-        return new ErrorHandlerBuilderRef();
-    }
+    public Object construct(Node node) {
+        final MappingNode bn = asMappingNode(node);
+        final YamlDeserializationContext dc = getDeserializationContext(node);
 
-    @Override
-    protected ErrorHandlerBuilderRef newInstance(String value) {
-        return new ErrorHandlerBuilderRef(value);
-    }
+        for (NodeTuple tuple : bn.getValue()) {
+            final String key = asText(tuple.getKeyNode());
+            final Node val = tuple.getValueNode();
 
-    @Override
-    protected boolean setProperty(ErrorHandlerBuilderRef target, String 
propertyKey, String propertyName, Node value) {
-        if ("ref".equals(propertyKey)) {
-            target.setRef(asText(value));
-            return true;
+            setDeserializationContext(val, dc);
+
+            switch (key) {
+                case "ref": {
+                    final ErrorHandlerBuilder builder = new 
ErrorHandlerBuilderRef(asText(val));
+                    return new CamelContextCustomizer() {

Review comment:
       Maybe a static factory method here as you're reusing the same piece of 
code many times




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


Reply via email to