Not sure what's going on, but a few other things worth pointing out...

1) <include>s for the same target namespace get mashed into the same
Grammar object.
2) <import>s are attached to the grammars which imported them.  The
XSGrammarBucket used by the validator will dig them out.
3) The Schema object holds on to the SoftReferenceGrammarPool through a
WeakReference, meaning it's going to get cleared if nothing else (i.e.
parser or validator) has a reference to it.  Keeps the Schema object from
wasting memory if the application is no longer actively using it with a
parser or validator.
4) You can tell if Grammars got GC'd if the clean() method on
SoftReferenceGrammarPool actually does real work; removing stale
SoftReferences.

Thanks.

Michael Glavassevich
XML Parser Development
IBM Toronto Lab
E-mail: [EMAIL PROTECTED]
E-mail: [EMAIL PROTECTED]

"Adam Retter" <[EMAIL PROTECTED]> wrote on 11/11/2008 10:48:18
AM:

> Okay I have placed some breakpoints in SoftReferenceGrammarPool, for
> the simple example of A and B it seems to work very well, thanks J
>
> Now with more complicated schemas that include multiple schemas that
> include even more schemas, I am not sure whether they are being
> cached in the pool correctly and then being garbage collected or
> whether the caching is not working how I would expect.
>
> For example after validating a ChangeReportStatusRequest document
> there are 3 grammars in the pool - ?../Reports/CEPC-Reports.xsd?,
> ?../CommonFiles/CommonStructures.xsd?, ?ChangeReportStatusRequest.xsd?
> I then validate a LodgeReportRequest document and after that, there
> are now only 2 grammars in the pool ? ?..
> /CommonFiles/CommonStructures.xsd?, ?LodgeReportRequest.xsd?
>
> I would have assumed that after validating both of those documents,
> there would now be 4 grammars in the pool. I understand that GC may
> kick in under strict memory but I am not sure that is the case here?
>
> Thanks Adam.
>
> From: Michael Glavassevich [mailto:[EMAIL PROTECTED]
> Sent: 11 November 2008 14:23
> To: j-users@xerces.apache.org
> Cc: Adam Retter
> Subject: RE: Problem validating using XMLGrammarPool with different
> Grammars with no namespace
>
> Hi Adam,
>
> If you want to debug it I would suggest putting breakpoints inside
> of SoftReferenceGrammarPool [1]. Technically this grammar pool could
> dump some of the grammars from the cache later (and then reload them
> if needed) but only if the JVM is starving for memory.
>
> Thanks.
>
> [1] http://svn.apache.
>
org/viewvc/xerces/java/trunk/src/org/apache/xerces/jaxp/validation/SoftReferenceGrammarPool.

> java?view=log
>
> Michael Glavassevich
> XML Parser Development
> IBM Toronto Lab
> E-mail: [EMAIL PROTECTED]
> E-mail: [EMAIL PROTECTED]
>
> "Adam Retter" <[EMAIL PROTECTED]> wrote on 11/11/2008
> 07:42:45 AM:
>
> > Ahhhh?
> >
> > Great J This seems to work initially.
> >
> > Is there a way I can interrogate the GrammarPool or schema loader in
> > this approach so that I can confirm that grammars are being loaded
> > once and then re-loaded from the Cache?
> >
> > Thanks Adam.
> >
> > From: Michael Glavassevich [mailto:[EMAIL PROTECTED]
> > Sent: 11 November 2008 12:29
> > To: j-users@xerces.apache.org
> > Cc: Adam Retter
> > Subject: RE: Problem validating using XMLGrammarPool with different
> > Grammars with no namespace
> >
> > Hi Adam,
> >
> > Try using the SchemaFactory.newSchema() method. The one which takes
> > no arguments. It caches based on schema location. That's the one I
meant.
> >
> > Thanks.
> >
> > Michael Glavassevich
> > XML Parser Development
> > IBM Toronto Lab
> > E-mail: [EMAIL PROTECTED]
> > E-mail: [EMAIL PROTECTED]
> >
> > "Adam Retter" <[EMAIL PROTECTED]> wrote on 11/11/2008
> > 06:56:06 AM:
> >
> > > Michael again thanks for the prompt reply ?
> > >
> > > I have attempted to use SAXParserFactory, set up the Schemas and
> > > then use the XMLReader, unfortunately I get exactly the same
> > > problems as with the XMLGrammarPool approach. I guess internally
> > > both of these approaches are looking for a documents Schema based on
> > > its namespace. Because we have duplicate namespaces the second
> > > document/schema that uses the same namespace as the first
> > > document/schema fails.
> > >
> > > SchemaFactory schemaFactory = SchemaFactory.
> > > newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
> > >
> > > Source schemas[] = new Source[] {
> > >    new StreamSource(new File("c:\\1.xsd")),
> > >    new StreamSource(new File("c:\\2.xsd"))
> > > };
> > >
> > > Schema schema = schemaFactory.newSchema(schemas);
> > > SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
> > > saxParserFactory.setNamespaceAware(true);
> > > saxParserFactory.setValidating(true);
> > > saxParserFactory.setSchema(schema);
> > > XMLReader reader = saxParserFactory.newSAXParser().getXMLReader();
> > >
> > >
> > > If I then go on to use XMLReader to validate document a -
> > >
> > > <a xsi:noNamespaceSchemaLocation="c:\\1.xsd"></a>
> > >
> > > Then validation is fine.
> > >
> > >
> > > However if I try and validate document b -
> > >
> > > <b xsi:noNamespaceSchemaLocation="c:\\2.xsd"></b>
> > >
> > > Then validation fails with the message - SXXP0003: Error reported by
> > > XML parser: cvc-elt.1: Cannot find the declaration of element
> > >   'b'.
> > >
> > >
> > > If however I change the order of the loading of Schemas so that 2.
> > > xsd is loaded before 1.xsd then document b validates fine and
> > > document a fails validation (Cannot find declaration of element).
> > >
> > > This implies to me that the Validator identifies the relationship
> > > between documents and their grammar by namespace, because the
> > > namespace is the same in this case (and probably many other cases),
> > > validating document b fails because the validator attempts to use
> > > the schema 1.xsd.
> > >
> > > I may have missed something? Or there may be another approach that I
> > > have not seen?
> > >
> > > Otherwise, I would be happy to work with the Xerces team to fix this
> > > problem; I am sure there must be many different documents and
> > > grammars out there that whilst different use the same namespace and
> > > because of this collide - I know I am not the only person who has
> > > experiences issue.
> > >
> > > I would propose that the Schemas location should be used for
> > > comparison, falling back to the namespace if no location
exists.Thoughts?
> > >
> > > How can we move this forward please?
> > >
> > >
> > > Thanks Adam.
> > > ________________________________________
> > > From: Michael Glavassevich [mailto:[EMAIL PROTECTED]
> > > Sent: 10 November 2008 16:56
> > > To: j-users@xerces.apache.org
> > > Subject: RE: Problem validating using XMLGrammarPool with different
> > > Grammars with no namespace
> > >
> > > Hi Adam,
> > >
> > > "Adam Retter" <[EMAIL PROTECTED]> wrote on 11/10/2008
> > > 11:00:53 AM:
> > >
> > > > Thanks for the reply Michael,
> > > >
> > > > Regarding the JAXP Validation API - I don't really understand how I

> > > > can use that with XMLReader for document parsing and validation
> > > > using SAX. Any ideas?
> > >
> > > Start with a SAXParserFactory [1], set the Schema object on it and
> > > namespace awareness to true. Getting the XMLReader [2] should be
> > > straightforward from there.
> > >
> > > > Regards Xerces, I naively assumed that the Sun JDK fork of Xerces
> > > > would have very minor changes.
> > >
> > > A lot of people assume that but they actually are quite different
> > > and seem to keep moving on divergent paths.
> > >
> > > > Subsequently I have downloaded Xerces 2.9.1 and tried this in place

> > > > of Sun's Xerces fork, unfortunately I am still getting the same
> > > > problem and have doubly checked that I am now using org.apache.
> > > > xerces.* classes and not the Sun ones.
> > > >
> > > > Again, looking through the (real) Xerces source I see the same
> > > > comment in Xerces XMLSchemaValidator albeit now on line 1452.
> > > >
> > > > // store the external schema locations. they are set when
> reset is called,
> > > > // so any other schemaLocation declaration for the same
> namespace will be
> > > > // effectively ignored. becuase we choose to take first location
hint
> > > > // available for a particular namespace.
> > >
> > > Unless you're setting the external schema location properties on the
> > > parser the comment you found is probably a red herring.
> > >
> > > > Thanks
> > >
> > > Thanks.
> > >
> > > [1] http://xerces.apache.org/xerces2-
> > > j/javadocs/api/javax/xml/parsers/SAXParserFactory.html
> > > [2] http://xerces.apache.org/xerces2-
> > > j/javadocs/api/javax/xml/parsers/SAXParser.html#getXMLReader()
> > >
> > > Michael Glavassevich
> > > XML Parser Development
> > > IBM Toronto Lab
> > > E-mail: [EMAIL PROTECTED]
> > > E-mail: [EMAIL PROTECTED]
> > >
> > > Registered Office: 7 Abbey Court, Eagle Way, Sowton, Exeter,
> Devon, EX2 7HY
> > > Registered Number 2892803 Registered in England and Wales
> > >
> > > This email has been scanned by the MessageLabs Email Security System.
> > > For more information please visit http://www.messagelabs.com/email
> > >
> > > The information contained in this e-mail is confidential and may be
> > > subject to
> > > legal privilege. If you are not the intended recipient, you must not
> > > use, copy,
> > > distribute or disclose the e-mail or any part of its contents ortake
any
> > > action in reliance on it. If you have received this e-mail in
> error, please
> > > e-mail the sender by replying to this message. All reasonable
> > > precautions have
> > > been taken to ensure no viruses are present in this e-mail. Landmark
> > > Information
> > > Group Limited cannot accept responsibility for loss or damage
> > > arising from the
> > > use of this e-mail or attachments and recommend that you subjectthese
to
> > > your virus checking procedures prior to use.
> >
> > Registered Office: 7 Abbey Court, Eagle Way, Sowton, Exeter, Devon, EX2
7HY
> > Registered Number 2892803 Registered in England and Wales
> >
> > This email has been scanned by the MessageLabs Email Security System.
> > For more information please visit http://www.messagelabs.com/email
> >
> > The information contained in this e-mail is confidential and may be
> > subject to legal privilege. If you are not the intended recipient,
> > you must not use, copy, distribute or disclose the e-mail or any
> > part of its contents or take any action in reliance on it. If you
> > have received this e-mail in error, please e-mail the sender by
> > replying to this message. All reasonable precautions have been taken
> > to ensure no viruses are present in this e-mail. Landmark
> > Information Group Limited cannot accept responsibility for loss or
> > damage arising from the use of this e-mail or attachments and
> > recommend that you subject these to your virus checking procedures
> > prior to use.
> >
> > www.landmarkinfo.co.uk
> > Please don't print this email unless you really need to
>
> Registered Office: 7 Abbey Court, Eagle Way, Sowton, Exeter, Devon, EX2
7HY
> Registered Number 2892803 Registered in England and Wales
>
> This email has been scanned by the MessageLabs Email Security System.
> For more information please visit http://www.messagelabs.com/email
>
> The information contained in this e-mail is confidential and may be
> subject to legal privilege. If you are not the intended recipient,
> you must not use, copy, distribute or disclose the e-mail or any
> part of its contents or take any action in reliance on it. If you
> have received this e-mail in error, please e-mail the sender by
> replying to this message. All reasonable precautions have been taken
> to ensure no viruses are present in this e-mail. Landmark
> Information Group Limited cannot accept responsibility for loss or
> damage arising from the use of this e-mail or attachments and
> recommend that you subject these to your virus checking procedures
> prior to use.
>
> www.landmarkinfo.co.uk
> Please don't print this email unless you really need to

Reply via email to