You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@xmlbeans.apache.org by David Svanberg <da...@gmail.com> on 2012/01/04 10:29:14 UTC
EntityResolver not getting called...?
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?
Regards,
David
Re: EntityResolver not getting called...?
Posted by Cezar Andrei <ce...@oracle.com>.
David,
This sounds strange, I checked the code, the resolver is used. Just make
sure you don't have XmlOptions.setLoadUseDefaultResolver ().
You can also give a try using ResolverUtil.resolverForCatalog().
Cezar
On Wed, 2012-01-04 at 01:29 -0800, David Svanberg wrote:
> 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?
>
> Regards,
> David
>
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@xmlbeans.apache.org
For additional commands, e-mail: user-help@xmlbeans.apache.org