Check null returns from NamespaceContext 69/100369/1
authorRobert Varga <robert.varga@pantheon.tech>
Sun, 3 Apr 2022 20:21:49 +0000 (22:21 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Sun, 3 Apr 2022 20:21:49 +0000 (22:21 +0200)
If we have a prefix that is not bould in the NamespaceContext, its
getNamespaceURI() will return null. checkArgument() such return to
provide better diagnostic than the implied NPE from XMLNamespace.

Change-Id: Ia49a9dbdf5dd4a3b8608f1e63dd0390130312897
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
codec/yang-data-codec-xml/src/main/java/org/opendaylight/yangtools/yang/data/codec/xml/IdentityrefXmlCodec.java

index e1b9506da281765e65e8ca64db44c1986ec55de1..9f9980e8f1d7af0d71cef8c36cd4c50ff6c810c1 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.yangtools.yang.data.codec.xml;
 import static com.google.common.base.Preconditions.checkArgument;
 import static java.util.Objects.requireNonNull;
 
+import com.google.common.base.MoreObjects;
 import java.util.Iterator;
 import java.util.Map.Entry;
 import javax.xml.namespace.NamespaceContext;
@@ -28,7 +29,7 @@ final class IdentityrefXmlCodec implements XmlCodec<QName> {
     private final QNameModule parentModule;
 
     IdentityrefXmlCodec(final EffectiveModelContext context, final QNameModule parentModule) {
-        this.schemaContext = requireNonNull(context);
+        schemaContext = requireNonNull(context);
         this.parentModule = requireNonNull(parentModule);
     }
 
@@ -45,6 +46,8 @@ final class IdentityrefXmlCodec implements XmlCodec<QName> {
             }
 
             final String prefixedNS = ctx.getNamespaceURI(prefix);
+            checkArgument(prefixedNS != null, "Failed to resolve prefix %s", prefix);
+
             final Iterator<? extends Module> modules =
                 schemaContext.findModules(XMLNamespace.of(prefixedNS)).iterator();
             checkArgument(modules.hasNext(), "Could not find module for namespace %s", prefixedNS);
@@ -62,4 +65,9 @@ final class IdentityrefXmlCodec implements XmlCodec<QName> {
         }
         ctx.writeCharacters(str);
     }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this).add("module", parentModule).toString();
+    }
 }