Fix SAXParseException; src-resolve: Cannot resolve the name ‘…’ to a(n) ‘type definition’

TLDR; – include also the imported xsd file in the schema sources in xml unit validator

When trying to validate an xml document against an xsd schema with xmlunit I get the following exception

org.xmlunit.XMLUnitException: The schema is invalid


This content originally appeared on DEV Community and was authored by Adrian Matei

TLDR; - include also the imported xsd file in the schema sources in xml unit validator

When trying to validate an xml document against an xsd schema with xmlunit I get the following exception

org.xmlunit.XMLUnitException: The schema is invalid

    at org.xmlunit.validation.JAXPValidator.validateInstance(JAXPValidator.java:81)
    at ch.mobi.siefs.connector.helper.XmlUnitComparisonTest.givenXml_whenValidatesAgainstXsd_thenCorrect(XmlUnitComparisonTest.java:48)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
.....
Caused by: org.xml.sax.SAXParseException; lineNumber: 89; columnNumber: 98; src-resolve: Cannot resolve the name 'mobits:HistoryTimestamp' to a(n) 'type definition' component.
    at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
    at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:135)
....

The unit test looked like the following:

@Test
public void givenXml_whenValidatesAgainstXsd_thenCorrect() {
  Validator v = Validator.forLanguage(Languages.W3C_XML_SCHEMA_NS_URI);
  v.setSchemaSource(Input.fromStream(
          XmlUnitComparisonTest.class.getResourceAsStream("xsd/bookmark.xsd")).build());
  ValidationResult r = v.validateInstance(Input.fromStream(
          XmlUnitComparisonTest.class.getResourceAsStream("message/bookmark-example.xml")).build());
  Iterator<ValidationProblem> probs = r.getProblems().iterator();
  while (probs.hasNext()) {
    probs.next().toString();
  }
  Assertions.assertThat(r.isValid()).isTrue();
}

The problem element mentioned in the stack trace comes from the imported xsd, which xml wise everything seems ok:

<?xml version="1.0" encoding="utf-8" ?>
<xsd:schema
            xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:common="http://xml.bookmarks.dev/datatype/common/Commons/v3">
    <xsd:import namespace=""http://xml.bookmarks.dev/datatype/common/Commons/v3" schemaLocation="common-Commons-3.0.xsd"/>

The solution was to add also the imported xsd schema when building the validator in xmlunit

  @Test
  public void givenXml_whenValidatesAgainstXsd_thenCorrect() {
    Validator v = Validator.forLanguage(Languages.W3C_XML_SCHEMA_NS_URI);
    v.setSchemaSources( // order of xsd sources is important
        Input.fromStream(
                getClass().getClassLoader().getResourceAsStream("xsd/bookmarks.xsd"))
            .build(),
        Input.fromStream(
                getClass().getClassLoader().getResourceAsStream("xsd/common-Commons-3.0.xsd"))
            .build());
    ValidationResult r =
        v.validateInstance(
            Input.fromStream(
                    getClass()
                        .getClassLoader()
                        .getResourceAsStream("message/bookmark-example.xml"))
                .build());
    Iterator<ValidationProblem> probs = r.getProblems().iterator();
    while (probs.hasNext()) {
      probs.next().toString();
    }
    assertThat(r.isValid()).isTrue();
  }

Shared with ❤️ from Codever. Use 👉 copy to mine functionality to add it to your personal snippets collection.


This content originally appeared on DEV Community and was authored by Adrian Matei


Print Share Comment Cite Upload Translate Updates
APA

Adrian Matei | Sciencx (2022-01-25T19:29:58+00:00) Fix SAXParseException; src-resolve: Cannot resolve the name ‘…’ to a(n) ‘type definition’. Retrieved from https://www.scien.cx/2022/01/25/fix-saxparseexception-src-resolve-cannot-resolve-the-name-to-an-type-definition/

MLA
" » Fix SAXParseException; src-resolve: Cannot resolve the name ‘…’ to a(n) ‘type definition’." Adrian Matei | Sciencx - Tuesday January 25, 2022, https://www.scien.cx/2022/01/25/fix-saxparseexception-src-resolve-cannot-resolve-the-name-to-an-type-definition/
HARVARD
Adrian Matei | Sciencx Tuesday January 25, 2022 » Fix SAXParseException; src-resolve: Cannot resolve the name ‘…’ to a(n) ‘type definition’., viewed ,<https://www.scien.cx/2022/01/25/fix-saxparseexception-src-resolve-cannot-resolve-the-name-to-an-type-definition/>
VANCOUVER
Adrian Matei | Sciencx - » Fix SAXParseException; src-resolve: Cannot resolve the name ‘…’ to a(n) ‘type definition’. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2022/01/25/fix-saxparseexception-src-resolve-cannot-resolve-the-name-to-an-type-definition/
CHICAGO
" » Fix SAXParseException; src-resolve: Cannot resolve the name ‘…’ to a(n) ‘type definition’." Adrian Matei | Sciencx - Accessed . https://www.scien.cx/2022/01/25/fix-saxparseexception-src-resolve-cannot-resolve-the-name-to-an-type-definition/
IEEE
" » Fix SAXParseException; src-resolve: Cannot resolve the name ‘…’ to a(n) ‘type definition’." Adrian Matei | Sciencx [Online]. Available: https://www.scien.cx/2022/01/25/fix-saxparseexception-src-resolve-cannot-resolve-the-name-to-an-type-definition/. [Accessed: ]
rf:citation
» Fix SAXParseException; src-resolve: Cannot resolve the name ‘…’ to a(n) ‘type definition’ | Adrian Matei | Sciencx | https://www.scien.cx/2022/01/25/fix-saxparseexception-src-resolve-cannot-resolve-the-name-to-an-type-definition/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.