That does seem to be the way it works. I dug into the source more after my initial post. It seems that the grammar pool in the Schema is used to initialize a second grammar pool owned by the Validator. This second grammar pool lives only as long as the validator.
I haven't gotten back into that part of my code in a week or so, but I believe I can ultimately get my grammars that are dynamically loaded via the LSResourceResolver by reusing my Validator. Of course, the Validator is not thread-safe, so I will probably use a ThreadLocal<Validator>. (Synchronizing a single validator is probably not acceptable in my environment.) Of course, that means I will end up with a grammar cache in each thread in my thread pool. So my next step is to figure out if the grammars are thread safe. If they are, perhaps I can figure out a way to share a single instance of a thread safe grammar cache between validators. On Sun, Jan 20, 2013 at 10:23 AM, Michael Glavassevich <mrgla...@ca.ibm.com>wrote: > The JAXP Schema created through SchemaFactory.newSchema() caches grammars > (through SoftReferences [1]) by their schema location. It's been quite > awhile since I've looked at how this works, but it wouldn't surprise me if > Xerces calls your LSResourceResolver each time you validate in order to > give your application an opportunity to redirect the schema location and > then use the value returned from the LSResourceResolver to look up the > cached grammar. > > Thanks. > > [1] > > http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/jaxp/validation/SoftReferenceGrammarPool.java?annotate=699892 > > Michael Glavassevich > XML Technologies and WAS Development > IBM Toronto Lab > E-mail: mrgla...@ca.ibm.com > E-mail: mrgla...@apache.org > > Robert Huffman <robert.huff...@gmail.com> wrote on 12/01/2013 05:04:17 PM: > > > I must parse documents that may use a large number of fairly large > > XSDs. However, the large majority of documents will not use most of > > those XSDs. Therefore, I would like to use a custom > > LSResourceResolver to resolve the target namespaces to local > > resources during parsing rather than building a Schema object that > > has all the grammars loaded up front. > > > > Unfortunately, as nearly as I can tell, grammars loaded through the > > use of a LSResourceResolver are never cached in the grammar pool. Is > > that correct? Is there some nuance I'm missing? > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: j-users-unsubscr...@xerces.apache.org > For additional commands, e-mail: j-users-h...@xerces.apache.org > >