While working on http://issues.apache.org/jira/browse/TUSCANY-907
I've observed duplicated XSD loading. It could be infinite loading. I might
have a way to avoid that.

Could you verify current implementation may load redundantly even
infinitely?
Could you brainstorm how to avoid that?

http://pecl.php.net/bugs/bug.php?id=9243
has the Test Case:
   1. http://ping.chip.org/phr/xml/insurance.xsd imports
http://ping.chip.org/phr/xml/types.xsd
   2. http://ping.chip.org/phr/xml/insurance.xsd imports
http://ping.chip.org/phr/xml/contact.xsd which also imports
http://ping.chip.org/phr/xml/types.xsd

I've observed http://ping.chip.org/phr/xml/types.xsd is loaded/parsed
multiple times during loading http://ping.chip.org/phr/xml/insurance.xsd

That impacts performance, especially types.xsd is remote.

More deadly, that may cause infinite loading or stack overflow.
Imagine A imports B which imports A, or X imports Y which imports Z which
imports X.

If above is true, let's brainstorm how to avoid that.

We can have a LoadingContext/ResourceSet to cache loaded/parsed resources,
and reuse parsing results if a location/URI has been loaded/parsed already.

3-1. The LoadingContext/ResourceSet can be a Thread Local
3-2. The LoadingContext/ResourceSet can be explicitly passed into each
parser
3-3. Currently ParserErrorSetter is explicitly passed into each parser,
which can host the LoadingContext/ResourceSet

Do you have alternatives? Which would you prefer?

--

Yang ZHONG

Reply via email to