import java.io.StringReader;
import java.net.URI;
import java.net.URISyntaxException;
+import java.util.AbstractMap.SimpleImmutableEntry;
import java.util.Deque;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Set;
import javax.annotation.concurrent.NotThreadSafe;
import javax.xml.XMLConstants;
switch (in.nextTag()) {
case XMLStreamConstants.START_ELEMENT:
- final Set<String> namesakes = new HashSet<>();
+ // FIXME: why do we even need this tracker? either document it or remove it
+ final Set<Entry<String, String>> namesakes = new HashSet<>();
while (in.hasNext()) {
final String xmlElementName = in.getLocalName();
parentSchema = ((YangModeledAnyXmlSchemaNode) parentSchema).getSchemaOfAnyXmlData();
}
- if (!namesakes.add(xmlElementName)) {
+ final String xmlElementNamespace = in.getNamespaceURI();
+ if (!namesakes.add(new SimpleImmutableEntry<>(xmlElementNamespace, xmlElementName))) {
final Location loc = in.getLocation();
throw new IllegalStateException(String.format(
- "Duplicate element \"%s\" in XML input at: line %s column %s", xmlElementName,
- loc.getLineNumber(), loc.getColumnNumber()));
+ "Duplicate namespace \"%s\" element \"%s\" in XML input at: line %s column %s",
+ xmlElementNamespace, xmlElementName, loc.getLineNumber(), loc.getColumnNumber()));
}
- final String xmlElementNamespace = in.getNamespaceURI();
final Deque<DataSchemaNode> childDataSchemaNodes =
ParserStreamUtils.findSchemaNodeByNameAndNamespace(parentSchema, xmlElementName,
new URI(xmlElementNamespace));
xmlParser.parse(reader);
fail("IllegalStateException should have been thrown because of duplicate leaf.");
} catch (IllegalStateException ex) {
- assertTrue(ex.getMessage().contains("Duplicate element \"decimal64-leaf\" in XML input"));
+ assertEquals("Duplicate namespace \"foo-namespace\" element \"decimal64-leaf\" in XML input at: line 7 "
+ + "column 25", ex.getMessage());
}
-
}
@Test
xmlParser.parse(reader);
fail("IllegalStateException should have been thrown because of duplicate anyxml");
} catch (IllegalStateException ex) {
- assertTrue(ex.getMessage().contains("Duplicate element \"my-anyxml\" in XML input"));
+ assertEquals("Duplicate namespace \"foo-namespace\" element \"my-anyxml\" in XML input at: line 19 "
+ + "column 20", ex.getMessage());
}
}
xmlParser.parse(reader);
fail("IllegalStateException should have been thrown because of duplicate container");
} catch (IllegalStateException ex) {
- assertTrue(ex.getMessage().contains("Duplicate element \"leaf-container\" in XML input"));
+ assertEquals("Duplicate namespace \"foo-namespace\" element \"leaf-container\" in XML input at: line 13 "
+ + "column 21", ex.getMessage());
}
}