You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by co...@apache.org on 2020/03/03 07:51:37 UTC

[camel] branch camel-3.0.x updated: Updating to SnakeYaml 1.26

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

coheigea pushed a commit to branch camel-3.0.x
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/camel-3.0.x by this push:
     new 8726cef  Updating to SnakeYaml 1.26
8726cef is described below

commit 8726cefc30ea36c6bda303768fe9d72e28a6cc04
Author: Colm O hEigeartaigh <co...@apache.org>
AuthorDate: Tue Mar 3 07:22:55 2020 +0000

    Updating to SnakeYaml 1.26
---
 .../component/snakeyaml/SnakeYAMLDataFormat.java   |  35 +-
 .../custom/CustomClassLoaderConstructor.java       |  75 +--
 .../component/snakeyaml/custom/CustomComposer.java | 276 --------
 .../snakeyaml/custom/CustomConstructor.java        |  83 ---
 .../snakeyaml/custom/CustomSafeConstructor.java    |  83 ---
 .../camel/component/snakeyaml/custom/Yaml.java     | 715 ---------------------
 .../component/snakeyaml/SnakeYAMLDoSTest.java      |   2 +-
 parent/pom.xml                                     |   2 +-
 8 files changed, 35 insertions(+), 1236 deletions(-)

diff --git a/components/camel-snakeyaml/src/main/java/org/apache/camel/component/snakeyaml/SnakeYAMLDataFormat.java b/components/camel-snakeyaml/src/main/java/org/apache/camel/component/snakeyaml/SnakeYAMLDataFormat.java
index 3e3b598..3c145f2 100644
--- a/components/camel-snakeyaml/src/main/java/org/apache/camel/component/snakeyaml/SnakeYAMLDataFormat.java
+++ b/components/camel-snakeyaml/src/main/java/org/apache/camel/component/snakeyaml/SnakeYAMLDataFormat.java
@@ -34,18 +34,18 @@ import java.util.function.Function;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.component.snakeyaml.custom.CustomClassLoaderConstructor;
-import org.apache.camel.component.snakeyaml.custom.CustomConstructor;
-import org.apache.camel.component.snakeyaml.custom.CustomSafeConstructor;
-import org.apache.camel.component.snakeyaml.custom.Yaml;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.DataFormatName;
 import org.apache.camel.spi.annotations.Dataformat;
 import org.apache.camel.support.ExchangeHelper;
 import org.apache.camel.support.service.ServiceSupport;
 import org.yaml.snakeyaml.DumperOptions;
+import org.yaml.snakeyaml.LoaderOptions;
 import org.yaml.snakeyaml.TypeDescription;
+import org.yaml.snakeyaml.Yaml;
 import org.yaml.snakeyaml.constructor.BaseConstructor;
 import org.yaml.snakeyaml.constructor.Constructor;
+import org.yaml.snakeyaml.constructor.SafeConstructor;
 import org.yaml.snakeyaml.nodes.Tag;
 import org.yaml.snakeyaml.representer.Representer;
 import org.yaml.snakeyaml.resolver.Resolver;
@@ -133,12 +133,16 @@ public final class SnakeYAMLDataFormat extends ServiceSupport implements DataFor
         }
 
         if (yaml == null) {
+            LoaderOptions options = new LoaderOptions();
+            options.setAllowRecursiveKeys(allowRecursiveKeys);
+            options.setMaxAliasesForCollections(maxAliasesForCollections);
+
             yaml = new Yaml(
                 this.constructor.apply(context),
                 this.representer.apply(context),
                 this.dumperOptions.apply(context),
-                this.resolver.apply(context),
-                maxAliasesForCollections
+                options,
+                this.resolver.apply(context)
             );
 
             yamlCache.set(new WeakReference<>(yaml));
@@ -372,6 +376,10 @@ public final class SnakeYAMLDataFormat extends ServiceSupport implements DataFor
             yamlTypeFilters = Collections.singletonList(TypeFilters.allowAll());
         }
 
+        LoaderOptions options = new LoaderOptions();
+        options.setAllowRecursiveKeys(allowRecursiveKeys);
+        options.setMaxAliasesForCollections(maxAliasesForCollections);
+
         BaseConstructor yamlConstructor;
         if (yamlTypeFilters != null) {
             ClassLoader yamlClassLoader = this.classLoader;
@@ -380,11 +388,10 @@ public final class SnakeYAMLDataFormat extends ServiceSupport implements DataFor
             }
 
             yamlConstructor = yamlClassLoader != null
-                ? typeFilterConstructor(yamlClassLoader, yamlTypeFilters, allowRecursiveKeys)
-                : typeFilterConstructor(yamlTypeFilters, allowRecursiveKeys);
+                ? typeFilterConstructor(yamlClassLoader, yamlTypeFilters, options)
+                : typeFilterConstructor(yamlTypeFilters, options);
         } else {
-            yamlConstructor = new CustomSafeConstructor();
-            ((CustomSafeConstructor)yamlConstructor).setAllowRecursiveKeys(allowRecursiveKeys);
+            yamlConstructor = new SafeConstructor(options);
         }
 
         if (typeDescriptions != null && yamlConstructor instanceof Constructor) {
@@ -423,8 +430,8 @@ public final class SnakeYAMLDataFormat extends ServiceSupport implements DataFor
     // Constructors
     // ***************************
 
-    private static Constructor typeFilterConstructor(final Collection<TypeFilter> typeFilters, boolean allowRecursiveKeys) {
-        CustomConstructor constructor = new CustomConstructor() {
+    private static Constructor typeFilterConstructor(final Collection<TypeFilter> typeFilters, LoaderOptions options) {
+        Constructor constructor = new Constructor(options) {
             @Override
             protected Class<?> getClassForName(String name) throws ClassNotFoundException {
                 if (typeFilters.stream().noneMatch(f -> f.test(name))) {
@@ -434,13 +441,12 @@ public final class SnakeYAMLDataFormat extends ServiceSupport implements DataFor
                 return super.getClassForName(name);
             }
         };
-        constructor.setAllowRecursiveKeys(allowRecursiveKeys);
         return constructor;
     }
 
     private static Constructor typeFilterConstructor(final ClassLoader classLoader, final Collection<TypeFilter> typeFilters,
-                                                     boolean allowRecursiveKeys) {
-        CustomClassLoaderConstructor constructor = new CustomClassLoaderConstructor(classLoader) {
+                                                     LoaderOptions options) {
+        CustomClassLoaderConstructor constructor = new CustomClassLoaderConstructor(classLoader, options) {
             @Override
             protected Class<?> getClassForName(String name) throws ClassNotFoundException {
                 if (typeFilters.stream().noneMatch(f -> f.test(name))) {
@@ -450,7 +456,6 @@ public final class SnakeYAMLDataFormat extends ServiceSupport implements DataFor
                 return super.getClassForName(name);
             }
         };
-        constructor.setAllowRecursiveKeys(allowRecursiveKeys);
         return constructor;
     }
 }
diff --git a/components/camel-snakeyaml/src/main/java/org/apache/camel/component/snakeyaml/custom/CustomClassLoaderConstructor.java b/components/camel-snakeyaml/src/main/java/org/apache/camel/component/snakeyaml/custom/CustomClassLoaderConstructor.java
index 163ebdf..2038c81 100644
--- a/components/camel-snakeyaml/src/main/java/org/apache/camel/component/snakeyaml/custom/CustomClassLoaderConstructor.java
+++ b/components/camel-snakeyaml/src/main/java/org/apache/camel/component/snakeyaml/custom/CustomClassLoaderConstructor.java
@@ -16,75 +16,26 @@
  */
 package org.apache.camel.component.snakeyaml.custom;
 
-import java.util.List;
-import java.util.Map;
-
-import org.yaml.snakeyaml.constructor.ConstructorException;
-import org.yaml.snakeyaml.error.Mark;
-import org.yaml.snakeyaml.error.YAMLException;
-import org.yaml.snakeyaml.nodes.MappingNode;
-import org.yaml.snakeyaml.nodes.Node;
-import org.yaml.snakeyaml.nodes.NodeTuple;
+import org.yaml.snakeyaml.LoaderOptions;
+import org.yaml.snakeyaml.constructor.Constructor;
 
 /**
- * A CustomClassLoaderConstructor which picks up the options to disallow recursive keys
- *
- * NOTE - If this PR gets applied then we can remove it:
- * https://bitbucket.org/asomov/snakeyaml/pull-requests/55/allow-configuration-for-preventing-billion/diff
+ * A CustomClassLoaderConstructor which allows to set the LoaderOptions
  */
-public class CustomClassLoaderConstructor extends org.yaml.snakeyaml.constructor.CustomClassLoaderConstructor {
+public class CustomClassLoaderConstructor extends Constructor {
 
-    private boolean allowRecursiveKeys;
-
-    public CustomClassLoaderConstructor(ClassLoader cLoader) {
-        super(cLoader);
-    }
+    private ClassLoader loader = this.getClass().getClassLoader();
 
-    public CustomClassLoaderConstructor(Class<? extends Object> theRoot, ClassLoader theLoader) {
-        super(theRoot, theLoader);
-    }
-
-    @Override
-    protected void constructMapping2ndStep(MappingNode node, Map<Object, Object> mapping) {
-        List<NodeTuple> nodeValue = node.getValue();
-        for (NodeTuple tuple : nodeValue) {
-            Node keyNode = tuple.getKeyNode();
-            Node valueNode = tuple.getValueNode();
-            Object key = constructObject(keyNode);
-            if (key != null) {
-                try {
-                    key.hashCode(); // check circular dependencies
-                } catch (Exception e) {
-                    throw new CustomConstructorException("while constructing a mapping",
-                            node.getStartMark(), "found unacceptable key " + key,
-                            tuple.getKeyNode().getStartMark(), e);
-                }
-            }
-            Object value = constructObject(valueNode);
-            if (keyNode.isTwoStepsConstruction()) {
-                if (allowRecursiveKeys) {
-                    postponeMapFilling(mapping, key, value);
-                } else {
-                    throw new YAMLException("Recursive key for mapping is detected but it is not configured to be allowed.");
-                }
-            } else {
-                mapping.put(key, value);
-            }
+    public CustomClassLoaderConstructor(ClassLoader theLoader, LoaderOptions options) {
+        super(Object.class, options);
+        if (theLoader == null) {
+            throw new NullPointerException("Loader must be provided.");
         }
+        this.loader = theLoader;
     }
 
-    public boolean isAllowRecursiveKeys() {
-        return allowRecursiveKeys;
-    }
-
-    public void setAllowRecursiveKeys(boolean allowRecursiveKeys) {
-        this.allowRecursiveKeys = allowRecursiveKeys;
-    }
-
-    private static class CustomConstructorException extends ConstructorException {
-        public CustomConstructorException(String context, Mark contextMark, String problem,
-                                       Mark problemMark, Throwable cause) {
-            super(context, contextMark, problem, problemMark, cause);
-        }
+    @Override
+    protected Class<?> getClassForName(String name) throws ClassNotFoundException {
+        return Class.forName(name, true, loader);
     }
 }
\ No newline at end of file
diff --git a/components/camel-snakeyaml/src/main/java/org/apache/camel/component/snakeyaml/custom/CustomComposer.java b/components/camel-snakeyaml/src/main/java/org/apache/camel/component/snakeyaml/custom/CustomComposer.java
deleted file mode 100644
index b97bcdf..0000000
--- a/components/camel-snakeyaml/src/main/java/org/apache/camel/component/snakeyaml/custom/CustomComposer.java
+++ /dev/null
@@ -1,276 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.component.snakeyaml.custom;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.yaml.snakeyaml.composer.Composer;
-import org.yaml.snakeyaml.composer.ComposerException;
-import org.yaml.snakeyaml.error.Mark;
-import org.yaml.snakeyaml.error.YAMLException;
-import org.yaml.snakeyaml.events.AliasEvent;
-import org.yaml.snakeyaml.events.Event;
-import org.yaml.snakeyaml.events.MappingStartEvent;
-import org.yaml.snakeyaml.events.NodeEvent;
-import org.yaml.snakeyaml.events.ScalarEvent;
-import org.yaml.snakeyaml.events.SequenceStartEvent;
-import org.yaml.snakeyaml.nodes.MappingNode;
-import org.yaml.snakeyaml.nodes.Node;
-import org.yaml.snakeyaml.nodes.NodeId;
-import org.yaml.snakeyaml.nodes.NodeTuple;
-import org.yaml.snakeyaml.nodes.ScalarNode;
-import org.yaml.snakeyaml.nodes.SequenceNode;
-import org.yaml.snakeyaml.nodes.Tag;
-import org.yaml.snakeyaml.parser.Parser;
-import org.yaml.snakeyaml.resolver.Resolver;
-
-/**
- * Creates a node graph from parser events.
- * <p>
- * Corresponds to the 'Compose' step as described in chapter 3.1 of the
- * <a href="http://yaml.org/spec/1.1/">YAML Specification</a>.
- * </p>
- *
- * NOTE - This is a slight port of the Composer class in SnakeYaml to specify the maxAliasesForCollections
- * and also use CustomComposer + CustomConstructor. If this PR gets applied then we can remove it:
- * https://bitbucket.org/asomov/snakeyaml/pull-requests/55/allow-configuration-for-preventing-billion/diff
- */
-public class CustomComposer extends Composer {
-    private final Resolver resolver;
-    private final Map<String, Node> anchors;
-    private final Set<Node> recursiveNodes;
-    private int nonScalarAliasesCount;
-    private final int maxAliasesForCollections;
-
-    public CustomComposer(Parser parser, Resolver resolver) {
-        this(parser, resolver, 50);
-    }
-
-    public CustomComposer(Parser parser, Resolver resolver, int maxAliasesForCollections) {
-        super(parser, resolver);
-        this.resolver = resolver;
-        this.anchors = new HashMap<String, Node>();
-        this.recursiveNodes = new HashSet<Node>();
-        this.maxAliasesForCollections = maxAliasesForCollections;
-    }
-
-    /**
-     * Checks if further documents are available.
-     *
-     * @return <code>true</code> if there is at least one more document.
-     */
-    public boolean checkNode() {
-        // Drop the STREAM-START event.
-        if (parser.checkEvent(Event.ID.StreamStart)) {
-            parser.getEvent();
-        }
-        // If there are more documents available?
-        return !parser.checkEvent(Event.ID.StreamEnd);
-    }
-
-    /**
-     * Reads and composes the next document.
-     *
-     * @return The root node of the document or <code>null</code> if no more
-     * documents are available.
-     */
-    public Node getNode() {
-        // Drop the DOCUMENT-START event.
-        parser.getEvent();
-        // Compose the root node.
-        Node node = composeNode(null);
-        // Drop the DOCUMENT-END event.
-        parser.getEvent();
-        //clean up resources
-        this.anchors.clear();
-        this.recursiveNodes.clear();
-        return node;
-    }
-
-    /**
-     * Reads a document from a source that contains only one document.
-     * <p>
-     * If the stream contains more than one document an exception is thrown.
-     * </p>
-     *
-     * @return The root node of the document or <code>null</code> if no document
-     * is available.
-     */
-    public Node getSingleNode() {
-        // Drop the STREAM-START event.
-        parser.getEvent();
-        // Compose a document if the stream is not empty.
-        Node document = null;
-        if (!parser.checkEvent(Event.ID.StreamEnd)) {
-            document = getNode();
-        }
-        // Ensure that the stream contains no more documents.
-        if (!parser.checkEvent(Event.ID.StreamEnd)) {
-            Event event = parser.getEvent();
-            Mark contextMark = document != null ? document.getStartMark() : null;
-            throw new CustomComposerException("expected a single document in the stream",
-                    contextMark, "but found another document", event.getStartMark());
-        }
-        // Drop the STREAM-END event.
-        parser.getEvent();
-        return document;
-    }
-
-    private Node composeNode(Node parent) {
-        if (parent != null) {
-            recursiveNodes.add(parent);
-        }
-        final Node node;
-        if (parser.checkEvent(Event.ID.Alias)) {
-            AliasEvent event = (AliasEvent) parser.getEvent();
-            String anchor = event.getAnchor();
-            if (!anchors.containsKey(anchor)) {
-                throw new CustomComposerException(null, null, "found undefined alias " + anchor,
-                        event.getStartMark());
-            }
-            node = anchors.get(anchor);
-            if (!(node instanceof ScalarNode)) {
-                this.nonScalarAliasesCount++;
-                if (this.nonScalarAliasesCount > maxAliasesForCollections) {
-                    throw new YAMLException("Number of aliases for non-scalar nodes exceeds the specified max=" + maxAliasesForCollections);
-                }
-            }
-            if (recursiveNodes.remove(node)) {
-                node.setTwoStepsConstruction(true);
-            }
-        } else {
-            NodeEvent event = (NodeEvent) parser.peekEvent();
-            String anchor = event.getAnchor();
-            // the check for duplicate anchors has been removed (issue 174)
-            if (parser.checkEvent(Event.ID.Scalar)) {
-                node = composeScalarNode(anchor);
-            } else if (parser.checkEvent(Event.ID.SequenceStart)) {
-                node = composeSequenceNode(anchor);
-            } else {
-                node = composeMappingNode(anchor);
-            }
-        }
-        recursiveNodes.remove(parent);
-        return node;
-    }
-
-    protected Node composeScalarNode(String anchor) {
-        ScalarEvent ev = (ScalarEvent) parser.getEvent();
-        String tag = ev.getTag();
-        boolean resolved = false;
-        Tag nodeTag;
-        if (tag == null || tag.equals("!")) {
-            nodeTag = resolver.resolve(NodeId.scalar, ev.getValue(),
-                    ev.getImplicit().canOmitTagInPlainScalar());
-            resolved = true;
-        } else {
-            nodeTag = new Tag(tag);
-        }
-        Node node = new ScalarNode(nodeTag, resolved, ev.getValue(), ev.getStartMark(),
-                ev.getEndMark(), ev.getScalarStyle());
-        if (anchor != null) {
-            node.setAnchor(anchor);
-            anchors.put(anchor, node);
-        }
-        return node;
-    }
-
-    protected Node composeSequenceNode(String anchor) {
-        SequenceStartEvent startEvent = (SequenceStartEvent) parser.getEvent();
-        String tag = startEvent.getTag();
-        Tag nodeTag;
-        boolean resolved = false;
-        if (tag == null || tag.equals("!")) {
-            nodeTag = resolver.resolve(NodeId.sequence, null, startEvent.getImplicit());
-            resolved = true;
-        } else {
-            nodeTag = new Tag(tag);
-        }
-        final ArrayList<Node> children = new ArrayList<Node>();
-        SequenceNode node = new SequenceNode(nodeTag, resolved, children, startEvent.getStartMark(),
-                null, startEvent.getFlowStyle());
-        if (anchor != null) {
-            node.setAnchor(anchor);
-            anchors.put(anchor, node);
-        }
-        while (!parser.checkEvent(Event.ID.SequenceEnd)) {
-            children.add(composeNode(node));
-        }
-        Event endEvent = parser.getEvent();
-        node.setEndMark(endEvent.getEndMark());
-        return node;
-    }
-
-    protected Node composeMappingNode(String anchor) {
-        MappingStartEvent startEvent = (MappingStartEvent) parser.getEvent();
-        String tag = startEvent.getTag();
-        Tag nodeTag;
-        boolean resolved = false;
-        if (tag == null || tag.equals("!")) {
-            nodeTag = resolver.resolve(NodeId.mapping, null, startEvent.getImplicit());
-            resolved = true;
-        } else {
-            nodeTag = new Tag(tag);
-        }
-
-        final List<NodeTuple> children = new ArrayList<NodeTuple>();
-        MappingNode node = new MappingNode(nodeTag, resolved, children, startEvent.getStartMark(),
-                null, startEvent.getFlowStyle());
-        if (anchor != null) {
-            node.setAnchor(anchor);
-            anchors.put(anchor, node);
-        }
-        while (!parser.checkEvent(Event.ID.MappingEnd)) {
-            composeMappingChildren(children, node);
-        }
-        Event endEvent = parser.getEvent();
-        node.setEndMark(endEvent.getEndMark());
-        return node;
-    }
-
-    protected void composeMappingChildren(List<NodeTuple> children, MappingNode node) {
-        Node itemKey = composeKeyNode(node);
-        if (itemKey.getTag().equals(Tag.MERGE)) {
-            node.setMerged(true);
-        }
-        Node itemValue = composeValueNode(node);
-        children.add(new NodeTuple(itemKey, itemValue));
-    }
-
-    protected Node composeKeyNode(MappingNode node) {
-        return composeNode(node);
-    }
-
-    protected Node composeValueNode(MappingNode node) {
-        return composeNode(node);
-    }
-
-    private static class CustomComposerException extends ComposerException {
-
-        protected CustomComposerException(String context, Mark contextMark, String problem,
-                                          Mark problemMark) {
-            super(context, contextMark, problem, problemMark);
-            // TODO Auto-generated constructor stub
-        }
-
-    }
-}
diff --git a/components/camel-snakeyaml/src/main/java/org/apache/camel/component/snakeyaml/custom/CustomConstructor.java b/components/camel-snakeyaml/src/main/java/org/apache/camel/component/snakeyaml/custom/CustomConstructor.java
deleted file mode 100644
index 47aa4e7..0000000
--- a/components/camel-snakeyaml/src/main/java/org/apache/camel/component/snakeyaml/custom/CustomConstructor.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.component.snakeyaml.custom;
-
-import java.util.List;
-import java.util.Map;
-
-import org.yaml.snakeyaml.constructor.Constructor;
-import org.yaml.snakeyaml.constructor.ConstructorException;
-import org.yaml.snakeyaml.error.Mark;
-import org.yaml.snakeyaml.error.YAMLException;
-import org.yaml.snakeyaml.nodes.MappingNode;
-import org.yaml.snakeyaml.nodes.Node;
-import org.yaml.snakeyaml.nodes.NodeTuple;
-
-/**
- * A CustomConstructor which picks up the options to disallow recursive keys
- *
- * NOTE - If this PR gets applied then we can remove it:
- * https://bitbucket.org/asomov/snakeyaml/pull-requests/55/allow-configuration-for-preventing-billion/diff
- */
-public class CustomConstructor extends Constructor {
-
-    private boolean allowRecursiveKeys;
-
-    @Override
-    protected void constructMapping2ndStep(MappingNode node, Map<Object, Object> mapping) {
-        List<NodeTuple> nodeValue = node.getValue();
-        for (NodeTuple tuple : nodeValue) {
-            Node keyNode = tuple.getKeyNode();
-            Node valueNode = tuple.getValueNode();
-            Object key = constructObject(keyNode);
-            if (key != null) {
-                try {
-                    key.hashCode(); // check circular dependencies
-                } catch (Exception e) {
-                    throw new CustomConstructorException("while constructing a mapping",
-                            node.getStartMark(), "found unacceptable key " + key,
-                            tuple.getKeyNode().getStartMark(), e);
-                }
-            }
-            Object value = constructObject(valueNode);
-            if (keyNode.isTwoStepsConstruction()) {
-                if (allowRecursiveKeys) {
-                    postponeMapFilling(mapping, key, value);
-                } else {
-                    throw new YAMLException("Recursive key for mapping is detected but it is not configured to be allowed.");
-                }
-            } else {
-                mapping.put(key, value);
-            }
-        }
-    }
-
-    public boolean isAllowRecursiveKeys() {
-        return allowRecursiveKeys;
-    }
-
-    public void setAllowRecursiveKeys(boolean allowRecursiveKeys) {
-        this.allowRecursiveKeys = allowRecursiveKeys;
-    }
-
-    private static class CustomConstructorException extends ConstructorException {
-        public CustomConstructorException(String context, Mark contextMark, String problem,
-                                       Mark problemMark, Throwable cause) {
-            super(context, contextMark, problem, problemMark, cause);
-        }
-    }
-}
\ No newline at end of file
diff --git a/components/camel-snakeyaml/src/main/java/org/apache/camel/component/snakeyaml/custom/CustomSafeConstructor.java b/components/camel-snakeyaml/src/main/java/org/apache/camel/component/snakeyaml/custom/CustomSafeConstructor.java
deleted file mode 100644
index 129718a..0000000
--- a/components/camel-snakeyaml/src/main/java/org/apache/camel/component/snakeyaml/custom/CustomSafeConstructor.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.component.snakeyaml.custom;
-
-import java.util.List;
-import java.util.Map;
-
-import org.yaml.snakeyaml.constructor.ConstructorException;
-import org.yaml.snakeyaml.constructor.SafeConstructor;
-import org.yaml.snakeyaml.error.Mark;
-import org.yaml.snakeyaml.error.YAMLException;
-import org.yaml.snakeyaml.nodes.MappingNode;
-import org.yaml.snakeyaml.nodes.Node;
-import org.yaml.snakeyaml.nodes.NodeTuple;
-
-/**
- * A CustomSafeConstructor which picks up the options to disallow recursive keys
- *
- * NOTE - If this PR gets applied then we can remove it:
- * https://bitbucket.org/asomov/snakeyaml/pull-requests/55/allow-configuration-for-preventing-billion/diff
- */
-public class CustomSafeConstructor extends SafeConstructor {
-
-    private boolean allowRecursiveKeys;
-
-    @Override
-    protected void constructMapping2ndStep(MappingNode node, Map<Object, Object> mapping) {
-        List<NodeTuple> nodeValue = node.getValue();
-        for (NodeTuple tuple : nodeValue) {
-            Node keyNode = tuple.getKeyNode();
-            Node valueNode = tuple.getValueNode();
-            Object key = constructObject(keyNode);
-            if (key != null) {
-                try {
-                    key.hashCode(); // check circular dependencies
-                } catch (Exception e) {
-                    throw new CustomConstructorException("while constructing a mapping",
-                            node.getStartMark(), "found unacceptable key " + key,
-                            tuple.getKeyNode().getStartMark(), e);
-                }
-            }
-            Object value = constructObject(valueNode);
-            if (keyNode.isTwoStepsConstruction()) {
-                if (allowRecursiveKeys) {
-                    postponeMapFilling(mapping, key, value);
-                } else {
-                    throw new YAMLException("Recursive key for mapping is detected but it is not configured to be allowed.");
-                }
-            } else {
-                mapping.put(key, value);
-            }
-        }
-    }
-
-    public boolean isAllowRecursiveKeys() {
-        return allowRecursiveKeys;
-    }
-
-    public void setAllowRecursiveKeys(boolean allowRecursiveKeys) {
-        this.allowRecursiveKeys = allowRecursiveKeys;
-    }
-
-    private static class CustomConstructorException extends ConstructorException {
-        public CustomConstructorException(String context, Mark contextMark, String problem,
-                                       Mark problemMark, Throwable cause) {
-            super(context, contextMark, problem, problemMark, cause);
-        }
-    }
-}
\ No newline at end of file
diff --git a/components/camel-snakeyaml/src/main/java/org/apache/camel/component/snakeyaml/custom/Yaml.java b/components/camel-snakeyaml/src/main/java/org/apache/camel/component/snakeyaml/custom/Yaml.java
deleted file mode 100644
index 983e730..0000000
--- a/components/camel-snakeyaml/src/main/java/org/apache/camel/component/snakeyaml/custom/Yaml.java
+++ /dev/null
@@ -1,715 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * Copyright (c) 2008, http://www.snakeyaml.org
- */
-package org.apache.camel.component.snakeyaml.custom;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Reader;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.NoSuchElementException;
-import java.util.regex.Pattern;
-
-import org.yaml.snakeyaml.DumperOptions;
-import org.yaml.snakeyaml.DumperOptions.FlowStyle;
-import org.yaml.snakeyaml.LoaderOptions;
-import org.yaml.snakeyaml.TypeDescription;
-import org.yaml.snakeyaml.composer.Composer;
-import org.yaml.snakeyaml.constructor.BaseConstructor;
-import org.yaml.snakeyaml.emitter.Emitable;
-import org.yaml.snakeyaml.emitter.Emitter;
-import org.yaml.snakeyaml.error.YAMLException;
-import org.yaml.snakeyaml.events.Event;
-import org.yaml.snakeyaml.introspector.BeanAccess;
-import org.yaml.snakeyaml.nodes.Node;
-import org.yaml.snakeyaml.nodes.Tag;
-import org.yaml.snakeyaml.parser.Parser;
-import org.yaml.snakeyaml.parser.ParserImpl;
-import org.yaml.snakeyaml.reader.StreamReader;
-import org.yaml.snakeyaml.reader.UnicodeReader;
-import org.yaml.snakeyaml.representer.Representer;
-import org.yaml.snakeyaml.resolver.Resolver;
-import org.yaml.snakeyaml.serializer.Serializer;
-
-/**
- * Public YAML interface. This class is not thread-safe. Which means that all the methods of the same
- * instance can be called only by one thread.
- * It is better to create an instance for every YAML stream.
- *
- * NOTE - This is a slight port of the Yaml class in SnakeYaml to specify the maxAliasesForCollections
- * and also use CustomComposer + CustomConstructor. If this PR gets applied then we can remove it:
- * https://bitbucket.org/asomov/snakeyaml/pull-requests/55/allow-configuration-for-preventing-billion/diff
- */
-public class Yaml {
-    protected final Resolver resolver;
-    protected BaseConstructor constructor;
-    protected Representer representer;
-    protected DumperOptions dumperOptions;
-    protected LoaderOptions loadingConfig;
-    private String name;
-    private int maxAliasesForCollections = 50;
-
-
-    /**
-     * Create Yaml instance.
-     */
-    public Yaml() {
-        this(new CustomConstructor(), new Representer(), new DumperOptions(), new LoaderOptions(),
-                new Resolver());
-    }
-
-    /**
-     * Create Yaml instance.
-     *
-     * @param dumperOptions DumperOptions to configure outgoing objects
-     */
-    public Yaml(DumperOptions dumperOptions) {
-        this(new CustomConstructor(), new Representer(dumperOptions), dumperOptions);
-    }
-
-    /**
-     * Create Yaml instance.
-     *
-     * @param loadingConfig LoadingConfig to control load behavior
-     */
-    public Yaml(LoaderOptions loadingConfig) {
-        this(new CustomConstructor(), new Representer(), new DumperOptions(), loadingConfig);
-    }
-
-    /**
-     * Create Yaml instance.
-     *
-     * @param representer Representer to emit outgoing objects
-     */
-    public Yaml(Representer representer) {
-        this(new CustomConstructor(), representer);
-    }
-
-    /**
-     * Create Yaml instance.
-     *
-     * @param constructor BaseConstructor to construct incoming documents
-     */
-    public Yaml(BaseConstructor constructor) {
-        this(constructor, new Representer());
-    }
-
-    /**
-     * Create Yaml instance.
-     *
-     * @param constructor BaseConstructor to construct incoming documents
-     * @param representer Representer to emit outgoing objects
-     */
-    public Yaml(BaseConstructor constructor, Representer representer) {
-        this(constructor, representer, initDumperOptions(representer));
-    }
-
-    /**
-     * Create Yaml instance. It is safe to create a few instances and use them
-     * in different Threads.
-     *
-     * @param representer   Representer to emit outgoing objects
-     * @param dumperOptions DumperOptions to configure outgoing objects
-     */
-    public Yaml(Representer representer, DumperOptions dumperOptions) {
-        this(new CustomConstructor(), representer, dumperOptions, new LoaderOptions(), new Resolver());
-    }
-
-    /**
-     * Create Yaml instance. It is safe to create a few instances and use them
-     * in different Threads.
-     *
-     * @param constructor   BaseConstructor to construct incoming documents
-     * @param representer   Representer to emit outgoing objects
-     * @param dumperOptions DumperOptions to configure outgoing objects
-     */
-    public Yaml(BaseConstructor constructor, Representer representer, DumperOptions dumperOptions) {
-        this(constructor, representer, dumperOptions, new LoaderOptions(), new Resolver());
-    }
-
-    /**
-     * Create Yaml instance. It is safe to create a few instances and use them
-     * in different Threads.
-     *
-     * @param constructor   BaseConstructor to construct incoming documents
-     * @param representer   Representer to emit outgoing objects
-     * @param dumperOptions DumperOptions to configure outgoing objects
-     * @param loadingConfig LoadingConfig to control load behavior
-     */
-    public Yaml(BaseConstructor constructor, Representer representer, DumperOptions dumperOptions,
-                LoaderOptions loadingConfig) {
-        this(constructor, representer, dumperOptions, loadingConfig, new Resolver());
-    }
-
-    /**
-     * Create Yaml instance. It is safe to create a few instances and use them
-     * in different Threads.
-     *
-     * @param constructor   BaseConstructor to construct incoming documents
-     * @param representer   Representer to emit outgoing objects
-     * @param dumperOptions DumperOptions to configure outgoing objects
-     * @param resolver      Resolver to detect implicit type
-     */
-    public Yaml(BaseConstructor constructor, Representer representer, DumperOptions dumperOptions,
-                Resolver resolver) {
-        this(constructor, representer, dumperOptions, new LoaderOptions(), resolver);
-    }
-
-    public Yaml(BaseConstructor constructor, Representer representer, DumperOptions dumperOptions,
-                Resolver resolver, int maxAliasesForCollections) {
-        this(constructor, representer, dumperOptions, new LoaderOptions(), resolver);
-        this.maxAliasesForCollections = maxAliasesForCollections;
-    }
-
-    /**
-     * Create Yaml instance. It is safe to create a few instances and use them
-     * in different Threads.
-     *
-     * @param constructor   BaseConstructor to construct incoming documents
-     * @param representer   Representer to emit outgoing objects
-     * @param dumperOptions DumperOptions to configure outgoing objects
-     * @param loadingConfig LoadingConfig to control load behavior
-     * @param resolver      Resolver to detect implicit type
-     */
-    public Yaml(BaseConstructor constructor, Representer representer, DumperOptions dumperOptions,
-                LoaderOptions loadingConfig, Resolver resolver) {
-        if (!constructor.isExplicitPropertyUtils()) {
-            constructor.setPropertyUtils(representer.getPropertyUtils());
-        } else if (!representer.isExplicitPropertyUtils()) {
-            representer.setPropertyUtils(constructor.getPropertyUtils());
-        }
-        this.constructor = constructor;
-        this.constructor.setAllowDuplicateKeys(loadingConfig.isAllowDuplicateKeys());
-        this.constructor.setWrappedToRootException(loadingConfig.isWrappedToRootException());
-        if (dumperOptions.getIndent() <= dumperOptions.getIndicatorIndent()) {
-            throw new YAMLException("Indicator indent must be smaller then indent.");
-        }
-        representer.setDefaultFlowStyle(dumperOptions.getDefaultFlowStyle());
-        representer.setDefaultScalarStyle(dumperOptions.getDefaultScalarStyle());
-        representer.getPropertyUtils()
-                .setAllowReadOnlyProperties(dumperOptions.isAllowReadOnlyProperties());
-        representer.setTimeZone(dumperOptions.getTimeZone());
-        this.representer = representer;
-        this.dumperOptions = dumperOptions;
-        this.loadingConfig = loadingConfig;
-        this.resolver = resolver;
-        this.name = "Yaml:" + System.identityHashCode(this);
-    }
-
-    private static DumperOptions initDumperOptions(Representer representer) {
-        DumperOptions dumperOptions = new DumperOptions();
-        dumperOptions.setDefaultFlowStyle(representer.getDefaultFlowStyle());
-        dumperOptions.setDefaultScalarStyle(representer.getDefaultScalarStyle());
-        dumperOptions.setAllowReadOnlyProperties(representer.getPropertyUtils().isAllowReadOnlyProperties());
-        dumperOptions.setTimeZone(representer.getTimeZone());
-        return dumperOptions;
-    }
-
-    /**
-     * Serialize a Java object into a YAML String.
-     *
-     * @param data Java object to be Serialized to YAML
-     * @return YAML String
-     */
-    public String dump(Object data) {
-        List<Object> list = new ArrayList<Object>(1);
-        list.add(data);
-        return dumpAll(list.iterator());
-    }
-
-    /**
-     * Produce the corresponding representation tree for a given Object.
-     *
-     * @param data instance to build the representation tree for
-     * @return representation tree
-     * @see <a href="http://yaml.org/spec/1.1/#id859333">Figure 3.1. Processing
-     * Overview</a>
-     */
-    public Node represent(Object data) {
-        return representer.represent(data);
-    }
-
-    /**
-     * Serialize a sequence of Java objects into a YAML String.
-     *
-     * @param data Iterator with Objects
-     * @return YAML String with all the objects in proper sequence
-     */
-    public String dumpAll(Iterator<? extends Object> data) {
-        StringWriter buffer = new StringWriter();
-        dumpAll(data, buffer, null);
-        return buffer.toString();
-    }
-
-    /**
-     * Serialize a Java object into a YAML stream.
-     *
-     * @param data   Java object to be serialized to YAML
-     * @param output stream to write to
-     */
-    public void dump(Object data, Writer output) {
-        List<Object> list = new ArrayList<Object>(1);
-        list.add(data);
-        dumpAll(list.iterator(), output, null);
-    }
-
-    /**
-     * Serialize a sequence of Java objects into a YAML stream.
-     *
-     * @param data   Iterator with Objects
-     * @param output stream to write to
-     */
-    public void dumpAll(Iterator<? extends Object> data, Writer output) {
-        dumpAll(data, output, null);
-    }
-
-    private void dumpAll(Iterator<? extends Object> data, Writer output, Tag rootTag) {
-        Serializer serializer = new Serializer(new Emitter(output, dumperOptions), resolver,
-                dumperOptions, rootTag);
-        try {
-            serializer.open();
-            while (data.hasNext()) {
-                Node node = representer.represent(data.next());
-                serializer.serialize(node);
-            }
-            serializer.close();
-        } catch (IOException e) {
-            throw new YAMLException(e);
-        }
-    }
-
-    /**
-     * <p>
-     * Serialize a Java object into a YAML string. Override the default root tag
-     * with <code>rootTag</code>.
-     * </p>
-     *
-     * <p>
-     * This method is similar to <code>Yaml.dump(data)</code> except that the
-     * root tag for the whole document is replaced with the given tag. This has
-     * two main uses.
-     * </p>
-     *
-     * <p>
-     * First, if the root tag is replaced with a standard YAML tag, such as
-     * <code>Tag.MAP</code>, then the object will be dumped as a map. The root
-     * tag will appear as <code>!!map</code>, or blank (implicit !!map).
-     * </p>
-     *
-     * <p>
-     * Second, if the root tag is replaced by a different custom tag, then the
-     * document appears to be a different type when loaded. For example, if an
-     * instance of MyClass is dumped with the tag !!YourClass, then it will be
-     * handled as an instance of YourClass when loaded.
-     * </p>
-     *
-     * @param data      Java object to be serialized to YAML
-     * @param rootTag   the tag for the whole YAML document. The tag should be Tag.MAP
-     *                  for a JavaBean to make the tag disappear (to use implicit tag
-     *                  !!map). If <code>null</code> is provided then the standard tag
-     *                  with the full class name is used.
-     * @param flowStyle flow style for the whole document. See Chapter 10. Collection
-     *                  Styles http://yaml.org/spec/1.1/#id930798. If
-     *                  <code>null</code> is provided then the flow style from
-     *                  DumperOptions is used.
-     * @return YAML String
-     */
-    public String dumpAs(Object data, Tag rootTag, FlowStyle flowStyle) {
-        FlowStyle oldStyle = representer.getDefaultFlowStyle();
-        if (flowStyle != null) {
-            representer.setDefaultFlowStyle(flowStyle);
-        }
-        List<Object> list = new ArrayList<Object>(1);
-        list.add(data);
-        StringWriter buffer = new StringWriter();
-        dumpAll(list.iterator(), buffer, rootTag);
-        representer.setDefaultFlowStyle(oldStyle);
-        return buffer.toString();
-    }
-
-    /**
-     * <p>
-     * Serialize a Java object into a YAML string. Override the default root tag
-     * with <code>Tag.MAP</code>.
-     * </p>
-     * <p>
-     * This method is similar to <code>Yaml.dump(data)</code> except that the
-     * root tag for the whole document is replaced with <code>Tag.MAP</code> tag
-     * (implicit !!map).
-     * </p>
-     * <p>
-     * Block Mapping is used as the collection style. See 10.2.2. Block Mappings
-     * (http://yaml.org/spec/1.1/#id934537)
-     * </p>
-     *
-     * @param data Java object to be serialized to YAML
-     * @return YAML String
-     */
-    public String dumpAsMap(Object data) {
-        return dumpAs(data, Tag.MAP, FlowStyle.BLOCK);
-    }
-
-    /**
-     * Serialize the representation tree into Events.
-     *
-     * @param data representation tree
-     * @return Event list
-     * @see <a href="http://yaml.org/spec/1.1/#id859333">Processing Overview</a>
-     */
-    public List<Event> serialize(Node data) {
-        SilentEmitter emitter = new SilentEmitter();
-        Serializer serializer = new Serializer(emitter, resolver, dumperOptions, null);
-        try {
-            serializer.open();
-            serializer.serialize(data);
-            serializer.close();
-        } catch (IOException e) {
-            throw new YAMLException(e);
-        }
-        return emitter.getEvents();
-    }
-
-    private static class SilentEmitter implements Emitable {
-        private List<Event> events = new ArrayList<Event>(100);
-
-        public List<Event> getEvents() {
-            return events;
-        }
-
-        @Override
-        public void emit(Event event) throws IOException {
-            events.add(event);
-        }
-    }
-
-    /**
-     * Parse the only YAML document in a String and produce the corresponding
-     * Java object. (Because the encoding in known BOM is not respected.)
-     *
-     * @param yaml YAML data to load from (BOM must not be present)
-     * @param <T>  the class of the instance to be created
-     * @return parsed object
-     */
-    @SuppressWarnings("unchecked")
-    public <T> T load(String yaml) {
-        return (T) loadFromReader(new StreamReader(yaml), Object.class);
-    }
-
-    /**
-     * Parse the only YAML document in a stream and produce the corresponding
-     * Java object.
-     *
-     * @param io  data to load from (BOM is respected to detect encoding and removed from the data)
-     * @param <T> the class of the instance to be created
-     * @return parsed object
-     */
-    @SuppressWarnings("unchecked")
-    public <T> T load(InputStream io) {
-        return (T) loadFromReader(new StreamReader(new UnicodeReader(io)), Object.class);
-    }
-
-    /**
-     * Parse the only YAML document in a stream and produce the corresponding
-     * Java object.
-     *
-     * @param io  data to load from (BOM must not be present)
-     * @param <T> the class of the instance to be created
-     * @return parsed object
-     */
-    @SuppressWarnings("unchecked")
-    public <T> T load(Reader io) {
-        return (T) loadFromReader(new StreamReader(io), Object.class);
-    }
-
-    /**
-     * Parse the only YAML document in a stream and produce the corresponding
-     * Java object.
-     *
-     * @param <T>  Class is defined by the second argument
-     * @param io   data to load from (BOM must not be present)
-     * @param type Class of the object to be created
-     * @return parsed object
-     */
-    @SuppressWarnings("unchecked")
-    public <T> T loadAs(Reader io, Class<T> type) {
-        return (T) loadFromReader(new StreamReader(io), type);
-    }
-
-    /**
-     * Parse the only YAML document in a String and produce the corresponding
-     * Java object. (Because the encoding in known BOM is not respected.)
-     *
-     * @param <T>  Class is defined by the second argument
-     * @param yaml YAML data to load from (BOM must not be present)
-     * @param type Class of the object to be created
-     * @return parsed object
-     */
-    @SuppressWarnings("unchecked")
-    public <T> T loadAs(String yaml, Class<T> type) {
-        return (T) loadFromReader(new StreamReader(yaml), type);
-    }
-
-    /**
-     * Parse the only YAML document in a stream and produce the corresponding
-     * Java object.
-     *
-     * @param <T>   Class is defined by the second argument
-     * @param input data to load from (BOM is respected to detect encoding and removed from the data)
-     * @param type  Class of the object to be created
-     * @return parsed object
-     */
-    @SuppressWarnings("unchecked")
-    public <T> T loadAs(InputStream input, Class<T> type) {
-        return (T) loadFromReader(new StreamReader(new UnicodeReader(input)), type);
-    }
-
-    private Object loadFromReader(StreamReader sreader, Class<?> type) {
-        Composer composer = new CustomComposer(new ParserImpl(sreader), resolver, maxAliasesForCollections);
-        constructor.setComposer(composer);
-        return constructor.getSingleData(type);
-    }
-
-    /**
-     * Parse all YAML documents in the Reader and produce corresponding Java
-     * objects. The documents are parsed only when the iterator is invoked.
-     *
-     * @param yaml YAML data to load from (BOM must not be present)
-     * @return an Iterable over the parsed Java objects in this String in proper
-     * sequence
-     */
-    public Iterable<Object> loadAll(Reader yaml) {
-        Composer composer = new CustomComposer(new ParserImpl(new StreamReader(yaml)), resolver, maxAliasesForCollections);
-        constructor.setComposer(composer);
-        Iterator<Object> result = new Iterator<Object>() {
-            @Override
-            public boolean hasNext() {
-                return constructor.checkData();
-            }
-
-            @Override
-            public Object next() {
-                return constructor.getData();
-            }
-
-            @Override
-            public void remove() {
-                throw new UnsupportedOperationException();
-            }
-        };
-        return new YamlIterable(result);
-    }
-
-    private static class YamlIterable implements Iterable<Object> {
-        private Iterator<Object> iterator;
-
-        public YamlIterable(Iterator<Object> iterator) {
-            this.iterator = iterator;
-        }
-
-        @Override
-        public Iterator<Object> iterator() {
-            return iterator;
-        }
-    }
-
-    /**
-     * Parse all YAML documents in a String and produce corresponding Java
-     * objects. (Because the encoding in known BOM is not respected.) The
-     * documents are parsed only when the iterator is invoked.
-     *
-     * @param yaml YAML data to load from (BOM must not be present)
-     * @return an Iterable over the parsed Java objects in this String in proper
-     * sequence
-     */
-    public Iterable<Object> loadAll(String yaml) {
-        return loadAll(new StringReader(yaml));
-    }
-
-    /**
-     * Parse all YAML documents in a stream and produce corresponding Java
-     * objects. The documents are parsed only when the iterator is invoked.
-     *
-     * @param yaml YAML data to load from (BOM is respected to detect encoding and removed from the data)
-     * @return an Iterable over the parsed Java objects in this stream in proper
-     * sequence
-     */
-    public Iterable<Object> loadAll(InputStream yaml) {
-        return loadAll(new UnicodeReader(yaml));
-    }
-
-    /**
-     * Parse the first YAML document in a stream and produce the corresponding
-     * representation tree. (This is the opposite of the represent() method)
-     *
-     * @param yaml YAML document
-     * @return parsed root Node for the specified YAML document
-     * @see <a href="http://yaml.org/spec/1.1/#id859333">Figure 3.1. Processing
-     * Overview</a>
-     */
-    public Node compose(Reader yaml) {
-        Composer composer = new CustomComposer(new ParserImpl(new StreamReader(yaml)), resolver, maxAliasesForCollections);
-        return composer.getSingleNode();
-    }
-
-    /**
-     * Parse all YAML documents in a stream and produce corresponding
-     * representation trees.
-     *
-     * @param yaml stream of YAML documents
-     * @return parsed root Nodes for all the specified YAML documents
-     * @see <a href="http://yaml.org/spec/1.1/#id859333">Processing Overview</a>
-     */
-    public Iterable<Node> composeAll(Reader yaml) {
-        final Composer composer = new CustomComposer(new ParserImpl(new StreamReader(yaml)), resolver, maxAliasesForCollections);
-        Iterator<Node> result = new Iterator<Node>() {
-            @Override
-            public boolean hasNext() {
-                return composer.checkNode();
-            }
-
-            @Override
-            public Node next() {
-                Node node = composer.getNode();
-                if (node != null) {
-                    return node;
-                } else {
-                    throw new NoSuchElementException("No Node is available.");
-                }
-            }
-
-            @Override
-            public void remove() {
-                throw new UnsupportedOperationException();
-            }
-        };
-        return new NodeIterable(result);
-    }
-
-    private static class NodeIterable implements Iterable<Node> {
-        private Iterator<Node> iterator;
-
-        public NodeIterable(Iterator<Node> iterator) {
-            this.iterator = iterator;
-        }
-
-        @Override
-        public Iterator<Node> iterator() {
-            return iterator;
-        }
-    }
-
-    /**
-     * Add an implicit scalar detector. If an implicit scalar value matches the
-     * given regexp, the corresponding tag is assigned to the scalar.
-     *
-     * @param tag    tag to assign to the node
-     * @param regexp regular expression to match against
-     * @param first  a sequence of possible initial characters or null (which means
-     *               any).
-     */
-    public void addImplicitResolver(Tag tag, Pattern regexp, String first) {
-        resolver.addImplicitResolver(tag, regexp, first);
-    }
-
-    @Override
-    public String toString() {
-        return name;
-    }
-
-    /**
-     * Get a meaningful name. It simplifies debugging in a multi-threaded
-     * environment. If nothing is set explicitly the address of the instance is
-     * returned.
-     *
-     * @return human readable name
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * Set a meaningful name to be shown in toString()
-     *
-     * @param name human readable name
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    /**
-     * Parse a YAML stream and produce parsing events.
-     *
-     * @param yaml YAML document(s)
-     * @return parsed events
-     * @see <a href="http://yaml.org/spec/1.1/#id859333">Processing Overview</a>
-     */
-    public Iterable<Event> parse(Reader yaml) {
-        final Parser parser = new ParserImpl(new StreamReader(yaml));
-        Iterator<Event> result = new Iterator<Event>() {
-            @Override
-            public boolean hasNext() {
-                return parser.peekEvent() != null;
-            }
-
-            @Override
-            public Event next() {
-                Event event = parser.getEvent();
-                if (event != null) {
-                    return event;
-                } else {
-                    throw new NoSuchElementException("No Event is available.");
-                }
-            }
-
-            @Override
-            public void remove() {
-                throw new UnsupportedOperationException();
-            }
-        };
-        return new EventIterable(result);
-    }
-
-    private static class EventIterable implements Iterable<Event> {
-        private Iterator<Event> iterator;
-
-        public EventIterable(Iterator<Event> iterator) {
-            this.iterator = iterator;
-        }
-
-        @Override
-        public Iterator<Event> iterator() {
-            return iterator;
-        }
-    }
-
-    public void setBeanAccess(BeanAccess beanAccess) {
-        constructor.getPropertyUtils().setBeanAccess(beanAccess);
-        representer.getPropertyUtils().setBeanAccess(beanAccess);
-    }
-
-    public void addTypeDescription(TypeDescription td) {
-        constructor.addTypeDescription(td);
-        representer.addTypeDescription(td);
-    }
-}
diff --git a/components/camel-snakeyaml/src/test/java/org/apache/camel/component/snakeyaml/SnakeYAMLDoSTest.java b/components/camel-snakeyaml/src/test/java/org/apache/camel/component/snakeyaml/SnakeYAMLDoSTest.java
index 6df32a6..e2a41aa 100644
--- a/components/camel-snakeyaml/src/test/java/org/apache/camel/component/snakeyaml/SnakeYAMLDoSTest.java
+++ b/components/camel-snakeyaml/src/test/java/org/apache/camel/component/snakeyaml/SnakeYAMLDoSTest.java
@@ -24,9 +24,9 @@ import org.apache.camel.CamelExecutionException;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.component.snakeyaml.custom.Yaml;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
+import org.yaml.snakeyaml.Yaml;
 import org.yaml.snakeyaml.constructor.SafeConstructor;
 
 public class SnakeYAMLDoSTest extends CamelTestSupport {
diff --git a/parent/pom.xml b/parent/pom.xml
index 5ba19ed..58d00c9 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -570,7 +570,7 @@
         <smallrye-config-version>1.0.0</smallrye-config-version>
         <smallrye-metrics-version>2.3.1</smallrye-metrics-version>
         <smallrye-health-version>2.1.0</smallrye-health-version>
-        <snakeyaml-version>1.25</snakeyaml-version>
+        <snakeyaml-version>1.26</snakeyaml-version>
         <snappy-version>1.1.4</snappy-version>
         <snmp4j-version>2.6.3_1</snmp4j-version>
         <solr-bundle-version>8.1.1_1</solr-bundle-version>