From 590ecabb7dac38069747538a8e49e9122d50a620 Mon Sep 17 00:00:00 2001 From: Tomas Cere Date: Wed, 15 Jul 2020 10:43:57 +0200 Subject: [PATCH] Clean up predicates prior to xpath normalization Path splitting is not equipped to ignore step predicates, which leads it to do arrive at the wrong path. Remove any predicates before embarking on resolving the reference. JIRA: YANGTOOLS-1126 Change-Id: Ia32836ad1acec0762d9baa7ded5f65fa72f39b93 Signed-off-by: Tomas Cere (cherry picked from commit 76fac8f8464bd072d9b26dccddb5450d3716dd51) --- .../yangtools/yang/model/util/SchemaContextUtil.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/SchemaContextUtil.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/SchemaContextUtil.java index 58ae056503..e2006446dc 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/SchemaContextUtil.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/SchemaContextUtil.java @@ -78,6 +78,7 @@ public final class SchemaContextUtil { private static final Logger LOG = LoggerFactory.getLogger(SchemaContextUtil.class); private static final Splitter COLON_SPLITTER = Splitter.on(':'); private static final Splitter SLASH_SPLITTER = Splitter.on('/').omitEmptyStrings(); + private static final Pattern GROUPS_PATTERN = Pattern.compile("\\[(.*?)\\]"); private SchemaContextUtil() { // Hidden on purpose @@ -265,7 +266,12 @@ public final class SchemaContextUtil { final SchemaNode actualSchemaNode, final PathExpression relativeXPath) { checkState(!relativeXPath.isAbsolute(), "Revision Aware XPath MUST be relative i.e. MUST contains ../, " + "for non relative Revision Aware XPath use findDataSchemaNode method"); - return resolveRelativeXPath(context, module, relativeXPath.getOriginalString(), actualSchemaNode); + return resolveRelativeXPath(context, module, removePredicatesFromXpath(relativeXPath.getOriginalString()), + actualSchemaNode); + } + + private static String removePredicatesFromXpath(final String xpath) { + return GROUPS_PATTERN.matcher(xpath).replaceAll(""); } /** -- 2.36.6