thread safe issue caused by XMLOutputFactoryImpl
------------------------------------------------
Key: CXF-2229
URL: https://issues.apache.org/jira/browse/CXF-2229
Project: CXF
Issue Type: Bug
Components: WS-* Components
Affects Versions: 2.1.3
Reporter: leon wu
Currently CXF calls StaxUtils.getXMLOutputFactory() to get the cached instance
of XMLOutputFactoryImpl. But XMLOutputFactoryImpl.createXMLStreamWriter is not
thread-safe. See below.
javax.xml.stream.XMLStreamWriter
createXMLStreamWriter(javax.xml.transform.stream.StreamResult sr, String
encoding) throws javax.xml.stream.XMLStreamException {
try{
if(fReuseInstance && fStreamWriter != null &&
fStreamWriter.canReuse() && !fPropertyChanged){
fStreamWriter.reset();
fStreamWriter.setOutput(sr, encoding);
if(DEBUG)System.out.println("reusing instance, object id : " +
fStreamWriter);
return fStreamWriter;
}
return fStreamWriter = new XMLStreamWriterImpl(sr, encoding, new
PropertyManager(fPropertyManager)); -- this is not thread safe, since the new
instance is assigned to the field fStreamWriter first, then it is possible that
different threads get the same XMLStreamWriterImpl when they call this method
at the same time.
}catch(java.io.IOException io){
throw new XMLStreamException(io);
}
}
The solution might be, StaxUtils.getXMLOutputFactory() method creates a new
instance of XMLOutputFactory every time, don't cache it.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.