Bump MRI upstreams
[netconf.git] / netconf / mdsal-netconf-connector / src / main / java / org / opendaylight / netconf / mdsal / connector / ops / get / FilterContentValidator.java
index afd31e3cfd7216bff7a4bd04c6e7bf7d5482c5d0..c4ae3d989990de45d0b0ca04f3ccad547e949d54 100644 (file)
@@ -11,8 +11,6 @@ import static org.opendaylight.yangtools.yang.data.util.ParserStreamUtils.findSc
 
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Preconditions;
-import java.net.URI;
-import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -28,6 +26,7 @@ import org.opendaylight.netconf.api.xml.MissingNameSpaceException;
 import org.opendaylight.netconf.api.xml.XmlElement;
 import org.opendaylight.netconf.mdsal.connector.CurrentSchemaContext;
 import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.XMLNamespace;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.InstanceIdentifierBuilder;
 import org.opendaylight.yangtools.yang.data.codec.xml.XmlCodecFactory;
@@ -35,12 +34,14 @@ import org.opendaylight.yangtools.yang.data.impl.codec.TypeDefinitionAwareCodec;
 import org.opendaylight.yangtools.yang.data.util.codec.TypeAwareCodec;
 import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition;
+import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
@@ -66,15 +67,19 @@ public class FilterContentValidator {
      * @throws DocumentedException if filter content validation failed
      */
     public YangInstanceIdentifier validate(final XmlElement filterContent) throws DocumentedException {
+        final XMLNamespace namespace;
+        try {
+            namespace = XMLNamespace.of(filterContent.getNamespace());
+        } catch (final IllegalArgumentException e) {
+            throw new RuntimeException("Wrong namespace in element + " + filterContent.toString(), e);
+        }
+
         try {
-            final URI namespace = new URI(filterContent.getNamespace());
             final Module module = schemaContext.getCurrentContext().findModules(namespace).iterator().next();
             final DataSchemaNode schema = getRootDataSchemaNode(module, namespace, filterContent.getName());
             final FilterTree filterTree = validateNode(
                     filterContent, schema, new FilterTree(schema.getQName(), Type.OTHER, schema));
             return getFilterDataRoot(filterTree, filterContent, YangInstanceIdentifier.builder());
-        } catch (final URISyntaxException e) {
-            throw new RuntimeException("Wrong namespace in element + " + filterContent.toString(), e);
         } catch (final ValidationException e) {
             LOG.debug("Filter content isn't valid", e);
             throw new DocumentedException("Validation failed. Cause: " + e.getMessage(), e,
@@ -93,7 +98,7 @@ public class FilterContentValidator {
      * @return child data node schema
      * @throws DocumentedException if child with given name is not present
      */
-    private DataSchemaNode getRootDataSchemaNode(final Module module, final URI nameSpace, final String name)
+    private DataSchemaNode getRootDataSchemaNode(final Module module, final XMLNamespace nameSpace, final String name)
             throws DocumentedException {
         for (final DataSchemaNode childNode : module.getChildNodes()) {
             final QName qName = childNode.getQName();
@@ -123,7 +128,7 @@ public class FilterContentValidator {
         for (final XmlElement childElement : childElements) {
             try {
                 final Deque<DataSchemaNode> path = findSchemaNodeByNameAndNamespace(parentNodeSchema,
-                        childElement.getName(), new URI(childElement.getNamespace()));
+                        childElement.getName(), XMLNamespace.of(childElement.getNamespace()));
                 if (path.isEmpty()) {
                     throw new ValidationException(element, childElement);
                 }
@@ -133,7 +138,7 @@ public class FilterContentValidator {
                 }
                 final DataSchemaNode childSchema = path.getLast();
                 validateNode(childElement, childSchema, subtree);
-            } catch (URISyntaxException | MissingNameSpaceException e) {
+            } catch (IllegalArgumentException | MissingNameSpaceException e) {
                 throw new RuntimeException("Wrong namespace in element + " + childElement.toString(), e);
             }
         }
@@ -214,10 +219,10 @@ public class FilterContentValidator {
                     if (keyType instanceof IdentityrefTypeDefinition || keyType instanceof LeafrefTypeDefinition) {
                         final Document document = filterContent.getDomElement().getOwnerDocument();
                         final NamespaceContext nsContext = new UniversalNamespaceContextImpl(document, false);
-                        final XmlCodecFactory xmlCodecFactory =
-                                XmlCodecFactory.create(schemaContext.getCurrentContext());
-                        final TypeAwareCodec<?, NamespaceContext, XMLStreamWriter> typeCodec =
-                                xmlCodecFactory.codecFor(listKey);
+                        final EffectiveModelContext modelContext = schemaContext.getCurrentContext();
+                        final XmlCodecFactory xmlCodecFactory = XmlCodecFactory.create(modelContext);
+                        final TypeAwareCodec<?, NamespaceContext, XMLStreamWriter> typeCodec = xmlCodecFactory.codecFor(
+                            listKey, SchemaInferenceStack.ofInstantiatedPath(modelContext, listKey.getPath()));
                         final Object deserializedKeyValue = typeCodec.parseValue(nsContext, keyValue.get());
                         keys.put(qualifiedName, deserializedKeyValue);
                     } else {