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:59:46 UTC
[camel] branch camel-2.25.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-2.25.x
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-2.25.x by this push:
new 707b025 Updating to SnakeYaml 1.26
707b025 is described below
commit 707b025aab2560aa1ce28bca63359d2f2f6f8a68
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/SnakeYAMLDoSTest.java | 2 +-
parent/pom.xml | 2 +-
4 files changed, 35 insertions(+), 79 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 2218bc8..96b955c 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,17 +34,17 @@ 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.support.ServiceSupport;
import org.apache.camel.util.IOHelper;
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;
@@ -131,12 +131,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));
@@ -370,6 +374,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;
@@ -378,11 +386,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) {
@@ -421,8 +428,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))) {
@@ -432,13 +439,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))) {
@@ -448,7 +454,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 b6cb6bf..f9e8497 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);
}
}
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 b338419..5acd223 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 a237eb9..ce4dc80 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -627,7 +627,7 @@
<slf4j-api-version>1.7.26</slf4j-api-version>
<slf4j-version>1.7.26</slf4j-version>
<smack-version>4.3.1</smack-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>7.5.0_1</solr-bundle-version>