Validating a schema using DocumentBuilder

I am trying to validate some XML data against an XSD schema. The parser works, but when I connect to the circuit, I get an exception below. I checked the test input with an external validator, so I fixed it. Does anyone know how to configure a builder to check this path?

Here is the builder installation code.

final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setIgnoringElementContentWhitespace(true); factory.setNamespaceAware(true); final SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); factory.setValidating(true); final Schema schema = sf.newSchema(new StreamSource( getClass().getResourceAsStream(SCHEMA_PATH))); factory.setSchema(schema); builder = factory.newDocumentBuilder(); builder.setErrorHandler(new DefaultErrorHandler()); 

And here is the error that I get.

  org.xml.sax.SAXParseException: Document is invalid: no grammar found.
     at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException (ErrorHandlerWrapper.java:236)
     at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error (ErrorHandlerWrapper.java:172)
     at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError (XMLErrorReporter.javahaps82)
     at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError (XMLErrorReporter.java data16)
     at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement (XMLNSDocumentScannerImpl.java:177)
     at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl $ NSContentDispatcher.scanRootElementHook (XMLNSDocumentScannerImpl.java:779)
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl $ FragmentContentDispatcher.dispatch (XMLDocumentFragmentScannerImpl.java:1794)
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument (XMLDocumentFragmentScannerImpl.java data68)
     at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse (XML11Configuration.java:834)
     at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse (XML11Configuration.java:764)
     at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse (XMLParser.java:148)
     at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse (DOMParser.java:250)
     at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse (DocumentBuilderImpl.java:292)
     at com.casenet.external.mockclaims.ResponseScriptBuilder.build (ResponseScriptBuilder.java:54)
     at com.casenet.external.mockclaims.ResponseScriptBuilderTest.buildFull (ResponseScriptBuilderTest.java:64)
     at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39)
     at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25)
     at java.lang.reflect.Method.invoke (Method.java=85)
     at org.testng.internal.MethodInvocationHelper.invokeMethod (MethodInvocationHelper.java:74)
     at org.testng.internal.Invoker.invokeMethod (Invoker.java:673)
     at org.testng.internal.Invoker.invokeTestMethod (Invoker.java:846)
     at org.testng.internal.Invoker.invokeTestMethods (Invoker.java:1170)
     at org.testng.internal.TestMethodWorker.invokeTestMethods (TestMethodWorker.java:125)
     at org.testng.internal.TestMethodWorker.run (TestMethodWorker.java:109)
     at org.testng.TestRunner.runWorkers (TestRunner.java:1125)
     at org.testng.TestRunner.privateRun (TestRunner.java:749)
     at org.testng.TestRunner.run (TestRunner.java:600)
     at org.testng.SuiteRunner.runTest (SuiteRunner.javahaps17)
     at org.testng.SuiteRunner.runSequentially (SuiteRunner.javahaps12)
     at org.testng.SuiteRunner.privateRun (SuiteRunner.java:274)
     at org.testng.SuiteRunner.run (SuiteRunner.java:223)
     at org.testng.SuiteRunnerWorker.runSuite (SuiteRunnerWorker.java:52)
     at org.testng.SuiteRunnerWorker.run (SuiteRunnerWorker.java:86)
     at org.testng.TestNG.runSuitesSequentially (TestNG.java:1007)
     at org.testng.TestNG.runSuitesLocally (TestNG.java:932)
     at org.testng.TestNG.run (TestNG.java:868)
     at org.testng.remote.RemoteTestNG.run (RemoteTestNG.java:110)
     at org.testng.remote.RemoteTestNG.initAndRun (RemoteTestNG.java:205)
     at org.testng.remote.RemoteTestNG.main (RemoteTestNG.java:174)
     at org.testng.RemoteTestNGStarter.main (RemoteTestNGStarter.java:85)
     at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39)
     at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25)
     at java.lang.reflect.Method.invoke (Method.java=85)
     at com.intellij.rt.execution.application.AppMain.main (AppMain.java:115)
+4
source share
1 answer

You do not need to call:

 setValidating(true); 

If you do the following:

 documentBuilderFactory.setSchema(schema); 

From setSchema (Schema) javadocs :

This processing takes effect even if the isValidating () method returns false.

+6
source

Source: https://habr.com/ru/post/1347547/


All Articles