From 76fac8f8464bd072d9b26dccddb5450d3716dd51 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 --- .../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 65fd57000f..5b9d5f0a2d 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