[ https://issues.apache.org/jira/browse/CXF-2229?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Daniel Kulp resolved CXF-2229. ------------------------------ Resolution: Fixed Fix Version/s: 2.2.2 2.1.6 Assignee: Daniel Kulp > 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 > Assignee: Daniel Kulp > Fix For: 2.1.6, 2.2.2 > > > 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.