Like someone else suggested earlier have you tried turning off the
Defered node expansion to see if you still face any problems ?


Try :
docBuilderFactory.setAttribute("http://apache.org/xml/features/dom/defer-node-expansion";,
 Boolean.FALSE);

Be adviced that turning this feature off will mean your code (even if it
works) will have a semantic-lock in to behavior of Xerces XML parser.

> http://issues.apache.org/bugzilla/show_bug.cgi?id=27687 

I am not sure fixing the parser to become thread-safe when it is already
declared to be not a goal is such a good idea. Besides there may be
other places in the xerces code where assumption of no concurrent access
may be made.

-Prashant

On Thu, 2007-07-26 at 11:38 +0530, Soumya Chatterjee wrote:
> 
> The NodeList implementation is not thread safe. When iterating through
> children of a particular node, the NodeList gets changed by another
> thread doing the same action. As a result I get a NullPointerException
> sometimes and some other times I get "wrong document error" when I try
> to append this clone a child node to a document. We can see the
> following links for that. 
> 
> http://mail-archives.apache.org/mod_mbox/xerces-j-dev/200403.mbox/%
> [EMAIL PROTECTED] 
> 
> http://issues.apache.org/bugzilla/show_bug.cgi?id=27687 
> 
> The first implementation to access children of a node does not work. 
>     NodeList childList=root.getChildNodes(); 
>     for (int i=0; i<childList.getLength(); i++) 
>     { 
>         // doing something here with "childList.item(i)" 
>     } 
>          
> 
> The second implementation to access children of a node works. 
>         Node currChildNode = root.getFirstChild(); 
>         while(currChildNode != null) 
>         { 
>                 // Do something here with the "currChildNode" 
>                 currChildNode = currChildNode.getNextSibling(); 
>         } 
> 
> Thanks, 
> Soumya Chatterjee
> Tata Consultancy Services
> Mailto: [EMAIL PROTECTED]
> Website: http://www.tcs.com
> ____________________________________________
> Experience certainty.        IT Services
>                        Business Solutions
>                        Outsourcing
> ____________________________________________ 
> 
> 
> Prashant Reddy
> <[EMAIL PROTECTED]> 
> 
> 07/25/2007 06:20 PM 
>          Please respond to
>        [EMAIL PROTECTED]
> 
> 
> 
> 
>                To
> j-users@xerces.apache.org 
>                cc
> Soumya Chatterjee
> <[EMAIL PROTECTED]> 
>           Subject
> Re: Got the Issue
> 
> 
> 
> 
> 
> 
> 
> 
> On Wed, 2007-07-25 at 11:58 +0530, Soumya Chatterjee wrote:
> > 
> > Hi Michael, 
> > 
> > Do you think SAX is a good alternative for the DOM in this case. We
> > can migrate the parsing mechanism to SAX if there is no thread safe
> > issue in SAX parser. 
> 
> SAX will help you build custom Data model for the XML it is parsing.
> Usually SAX parsing of XML file is done only once (inside a method) to
> construct the Data model. It is *not* a good idea to start a SAX
> parser
> every time you would like to read something from the XML. (if thats
> what
> you were hinting at in your question above)
> 
> You could think of DOM as a "generic" Data model that works for all
> XMLs. While using DOM every thing is a Node/Element/Text Node and you
> lose out on type safety and domain friendliness a custom Data model
> would offer.
> 
> Consider the proverbial purchase order xml[1] for example:
> You could walk this XML with SAX parser and construct Data model like 
> 
> Class PurchaseOrder {
> Address getShippingAddress();
> Address getBillingAddress();
> List<Item> getItemsOrdered();
> String getComment();
> } //Notice there are not setters 
> 
> Where if you were to make DOM of the same XML, you would have to walk 
> NodeList list =  purchaseOrderNode.getChildNodes(); //This is not
> thread
> safe
> 
> Now is it a good alternative to DOM ?
> 
> The answer would depend as always on your use-cases. An immutable Data
> object is as thread safe as it can get. And if you are accesses to XML
> are read only, constructing a Data model from SAX parsing is worth
> considering.
> 
> Hope this helps
> -Prashant
> 
> [1] : http://www.w3.org/TR/xmlschema-0/#po.xml
> PS: While you are at exploring options, you could also give JAXB a
> look
> see.
> > Thanks,
> > Soumya Chatterjee
> > Tata Consultancy Services
> > Mailto: [EMAIL PROTECTED]
> > Website: http://www.tcs.com
> > ____________________________________________
> > Experience certainty.        IT Services
> >                        Business Solutions
> >                        Outsourcing
> > ____________________________________________ 
> > 
> > 
> > Michael Glavassevich
> > <[EMAIL PROTECTED]> 
> > 
> > 07/24/2007 07:27 PM 
> > 
> > 
> >                To
> > Soumya Chatterjee
> > <[EMAIL PROTECTED]> 
> >                cc
> > j-users@xerces.apache.org 
> >           Subject
> > Re: Got the Issue
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > Hi Soumya,
> > 
> > Xerces' DOM implementation isn't thread-safe. If you try to access
> > the 
> > same DOM instance from multiple threads without synchronizing it
> > you'll 
> > run into these problems. You either need to synchronize your code
> or 
> > create an instance of the DOM tree per thread. There's really no
> way 
> > around it.
> > 
> > Thanks.
> > 
> > Michael Glavassevich
> > XML Parser Development
> > IBM Toronto Lab
> > E-mail: [EMAIL PROTECTED]
> > E-mail: [EMAIL PROTECTED]
> > 
> > Soumya Chatterjee <[EMAIL PROTECTED]> wrote on 07/24/2007
> > 09:42:08 
> > AM:
> > 
> > > Hi Michael, 
> > > 
> > > I found out the response from you regarding the "xerces DOM 
> > > concurrent access" and I think it is the same as our application
> in 
> > > the case.  http://spteam-lists.blogspot.com/2007/04/re-xerces-dom-
> > > concurrent-access-and.html 
> > > 
> > > By the way we were not getting the exception as frequently  in
> the 
> > > weblogic 7.1 ( JDK 1.3) when we are using the following Xerces.
> > > 
> > > But we are getting the exception in case of weblogic 9.1 much
> more 
> > > frequently which uses JDK1.5 and different version of Xerces. 
> > > 
> > > Synchronization is not an option in this case because there is a 
> > > huge performance issue here. Please let me know if any way we can 
> > > get read of this problem without using the Synchronization
>  block. 
> > > 
> > > Thanks,
> > > Soumya Chatterjee
> > > Tata Consultancy Services
> > > Mailto: [EMAIL PROTECTED]
> > > Website: http://www.tcs.com
> > > ____________________________________________
> > > Experience certainty.        IT Services
> > >                        Business Solutions
> > >                        Outsourcing
> > > ____________________________________________
> > 
> > ForwardSourceID:NT00009A82     
> > =====-----=====-----=====
> > Notice: The information contained in this e-mail
> > message and/or attachments to it may contain 
> > confidential or privileged information. If you are 
> > not the intended recipient, any dissemination, use, 
> > review, distribution, printing or copying of the 
> > information contained in this e-mail message 
> > and/or attachments to it are strictly prohibited. If 
> > you have received this communication in error, 
> > please notify us by reply e-mail or telephone and 
> > immediately and permanently delete the message 
> > and any attachments. Thank you
> > 
> > 
> -- 
> 
> -Prashant
> 
> Don't upload, just share : www.dekoh.com
> 
> ForwardSourceID:NT00009B6E     
> =====-----=====-----=====
> Notice: The information contained in this e-mail
> message and/or attachments to it may contain 
> confidential or privileged information. If you are 
> not the intended recipient, any dissemination, use, 
> review, distribution, printing or copying of the 
> information contained in this e-mail message 
> and/or attachments to it are strictly prohibited. If 
> you have received this communication in error, 
> please notify us by reply e-mail or telephone and 
> immediately and permanently delete the message 
> and any attachments. Thank you
> 
> 
-- 

-Prashant

Don't upload, just share : www.dekoh.com


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to