Hi, my problem is that I have legacy XSD Schemas (won't fix) that import other schemas using a non-comformant URI as the schemaLocation that I want to compile using XmlBeans.compileXsd (using XmlBeans 2.5.0). An example import could look like:

<xs:import namespace="http://www.example.org"; schemaLocation="..\..\My Documents"/>

Please notice that the schemaLocation has no "file://" prefix and includes both backslashes and spaces.

I thought I could use an own EntityResolver to fix the paths but I'm not able to get it working. I've tested:

XmlOptions xmlOpts = new XmlOptions();
xmlOpts.setEntityResolver(new MyEntityResolver());
SchemaTypeSystem sts = XmlBeans.compileXsd(new XmlObject[] {xmlObject}, XmlBeans.getBuiltinTypeSystem(), xmlOpts);

But the the resolveEntity method of my MyEntityResolver is never beeing called although the javadoc states:

"If this option is set when compiling a schema, then the given EntityResolver will be consulted in order to resolve any URIs while downloading imported schemas. EntityResolvers are currently only used by compileXsd; they are not consulted by other functions, for example, parse. This will likely change in the future."

The problem must of course be that the schemaLocation is not an URI and hence there is an exception somewhere before the resolveEntity is getting called. But I want it to consult my resolveEntity before doing any URI-checks...

Am I missing something? How could I proceed or work-around the bad schemaLocations?


Reply via email to