You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2020/10/02 05:08:07 UTC
[camel] branch master updated: [CAMEL-15610] avoid NPE in
CamelXmlTreeParserHelper.parseCamelRouteTree (#4339)
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
The following commit(s) were added to refs/heads/master by this push:
new 01f7fae [CAMEL-15610] avoid NPE in CamelXmlTreeParserHelper.parseCamelRouteTree (#4339)
01f7fae is described below
commit 01f7faec503e31a03ae905f256827001b830d7be
Author: Aurélien Pupier <ap...@redhat.com>
AuthorDate: Fri Oct 2 07:07:53 2020 +0200
[CAMEL-15610] avoid NPE in CamelXmlTreeParserHelper.parseCamelRouteTree (#4339)
when routes are empty
Signed-off-by: Aurélien Pupier <ap...@redhat.com>
---
.../parser/helper/CamelXmlTreeParserHelper.java | 35 ++++++++++++----------
.../camel/parser/model/CamelNodeDetails.java | 4 +++
.../apache/camel/parser/xml/XmlParseTreeTest.java | 21 +++++++++++++
3 files changed, 44 insertions(+), 16 deletions(-)
diff --git a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelXmlTreeParserHelper.java b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelXmlTreeParserHelper.java
index 34aaca8..382f950 100644
--- a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelXmlTreeParserHelper.java
+++ b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/helper/CamelXmlTreeParserHelper.java
@@ -44,22 +44,25 @@ public final class CamelXmlTreeParserHelper {
// now parse the route node and build the correct model/tree structure of the EIPs
// re-create factory as we rebuild the tree
nodeFactory = CamelNodeDetailsFactory.newInstance();
- CamelNodeDetails parent = route.getOutputs().get(0);
-
- // we dont want the route element and only start with from
- for (int i = 0; i < route.getOutputs().size(); i++) {
- CamelNodeDetails node = route.getOutputs().get(i);
- String name = node.getName();
-
- if ("from".equals(name)) {
- CamelNodeDetails from = nodeFactory.copyNode(null, "from", node);
- from.setFileName(fullyQualifiedFileName);
- answer.add(from);
- parent = from;
- } else {
- // add straight to parent
- parent.addOutput(node);
- node.setFileName(fullyQualifiedFileName);
+ List<CamelNodeDetails> outputs = route.getOutputs();
+ if (outputs != null && !outputs.isEmpty()) {
+ CamelNodeDetails parent = outputs.get(0);
+
+ // we dont want the route element and only start with from
+ for (int i = 0; i < outputs.size(); i++) {
+ CamelNodeDetails node = outputs.get(i);
+ String name = node.getName();
+
+ if ("from".equals(name)) {
+ CamelNodeDetails from = nodeFactory.copyNode(null, "from", node);
+ from.setFileName(fullyQualifiedFileName);
+ answer.add(from);
+ parent = from;
+ } else {
+ // add straight to parent
+ parent.addOutput(node);
+ node.setFileName(fullyQualifiedFileName);
+ }
}
}
diff --git a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/model/CamelNodeDetails.java b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/model/CamelNodeDetails.java
index ad98a57..2f5d8fa 100644
--- a/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/model/CamelNodeDetails.java
+++ b/catalog/camel-route-parser/src/main/java/org/apache/camel/parser/model/CamelNodeDetails.java
@@ -17,6 +17,7 @@
package org.apache.camel.parser.model;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
public class CamelNodeDetails {
@@ -84,6 +85,9 @@ public class CamelNodeDetails {
}
public List<CamelNodeDetails> getOutputs() {
+ if (outputs == null) {
+ return Collections.emptyList();
+ }
return outputs;
}
diff --git a/catalog/camel-route-parser/src/test/java/org/apache/camel/parser/xml/XmlParseTreeTest.java b/catalog/camel-route-parser/src/test/java/org/apache/camel/parser/xml/XmlParseTreeTest.java
index 904e4d1..62d0220 100644
--- a/catalog/camel-route-parser/src/test/java/org/apache/camel/parser/xml/XmlParseTreeTest.java
+++ b/catalog/camel-route-parser/src/test/java/org/apache/camel/parser/xml/XmlParseTreeTest.java
@@ -16,13 +16,17 @@
*/
package org.apache.camel.parser.xml;
+import java.io.ByteArrayInputStream;
+import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
+import java.nio.file.Files;
import java.util.List;
import org.apache.camel.parser.XmlRouteParser;
import org.apache.camel.parser.model.CamelNodeDetails;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.TempDir;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -33,6 +37,9 @@ public class XmlParseTreeTest {
private static final Logger LOG = LoggerFactory.getLogger(XmlParseTreeTest.class);
+ @TempDir
+ File tempDir;
+
@Test
void testXmlTree() throws Exception {
InputStream is = new FileInputStream("src/test/resources/org/apache/camel/parser/xml/mycamel.xml");
@@ -55,4 +62,18 @@ public class XmlParseTreeTest {
assertTrue(tree.contains("39\t to"));
}
+ @Test
+ void testXmlTreeWithEmptyRoute() throws Exception {
+ String textTotest = "<camelContext id=\"camel\" xmlns=\"http://camel.apache.org/schema/spring\">\r\n" +
+ " <route id=\"a route\">\r\n" +
+ " </route>\r\n" +
+ "</camelContext>\n";
+ File camelFile = new File(tempDir, "testXmlTreeWithEmptyRoute.xml");
+ Files.copy(new ByteArrayInputStream(textTotest.getBytes()), camelFile.toPath());
+ List<CamelNodeDetails> list = XmlRouteParser.parseXmlRouteTree(new ByteArrayInputStream(textTotest.getBytes()), "",
+ camelFile.getAbsolutePath());
+
+ assertEquals(0, list.size());
+ }
+
}