views:

210

answers:

1
  1. I'd like to know which objects can be reused (in the same or different document) when using the Java API for XML processing, JAXP:

    • DocumentBuilderFactory
    • DocumentBuilder
    • XPath
    • Node
    • ErrorHandler (EDIT: I forgot that this has to be implemented in my own code, sorry)
  2. Is it recommended to cache those objects or do the JAXP implementations already cache them?

  3. Is the (re)use of those objects thread-safe?

+5  A: 

Reuse

In the same thread those objects can and should be reused. For example you can use the DocumentBuilder to parse multiple documents.

Thread Safety

DocumentBuilderFactory used to explicity state it was not thread safe, I believe this is still true:

An implementation of the DocumentBuilderFactory class is NOT guaranteed to be thread safe. It is up to the user application to make sure about the use of the DocumentBuilderFactory from more than one thread.

From Stack Overflow, DocumentBuilder does not appear to be thread safe either. However in Java SE 5 a reset method was added to allow you to reuse DocumentBuilders:

XPath is not thread safe, from the Javadoc

An XPath object is not thread-safe and not reentrant. In other words, it is the application's responsibility to make sure that one XPath object is not used from more than one thread at any given time, and while the evaluate method is invoked, applications may not recursively call the evaluate method.

Node is not thread safe, from Xerces website

Is Xerces DOM implementation thread-safe? No. DOM does not require implementations to be thread safe. If you need to access the DOM from multiple threads, you are required to add the appropriate locks to your application code.

ErrorHandler is an interface, so it is up to your implementation of that interface to ensure thread-safety. For pointers on thread-safety you could start here:

Blaise Doughan
What about caching/reusing/thread-safety of Node objects?
MRalwasser
DOM nodes are not guaranteed to be thread-safe.
Blaise Doughan
@Blaise Doughan: Where is this specified?
MRalwasser
This is from the Xerces web site http://xerces.apache.org/xerces2-j/faq-dom.html#faq-1
Blaise Doughan