I'm attempting to parse load a rather complicated XML schema into a Schema object in Java so I can do some validation on XML messages.
My code looks similar to this:
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema(new StreamSource(new File("schema/schema.xsd")));
My schema has quite a few imports:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="base_1">
<xs:import namespace="base_1" schemaLocation="common/MessageBase.xsd"/>
</xs:schema>
...etc. When I attempt to load the schema, I get lots of errors. Based on one other question related to this, it looks like I need to specify a resource resolver, but isn't this something that should be handled by default?
If so, is there a specific directory I need to put the schema in relative to where I run the application I'm writing or relative to the base schema file?
Finally, when I load the schema with XMLSpy or similar, it works fine and I can validate XML instances with no problem.
There is no need for a resource resolver if you use an URL instead of a StreamSource.
URL schemaURL = Thread.currentThread().getContextClassLoader().getResource(schemaFileName);
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = schemaFactory.newSchema(schemaURL);