[
https://issues.apache.org/jira/browse/CXF-3273?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Dennis Sosnoski resolved CXF-3273.
----------------------------------
Resolution: Fixed
Fix Version/s: 2.4
Synchronized all use of collections in WS-RM acknowledgement processing
(revision 1072914).
> WS-RM ConcurrentModificationException from unsynchronized use of
> SequenceAcknowledgement
> ----------------------------------------------------------------------------------------
>
> Key: CXF-3273
> URL: https://issues.apache.org/jira/browse/CXF-3273
> Project: CXF
> Issue Type: Bug
> Components: WS-* Components
> Affects Versions: 2.3.2
> Reporter: Dennis Sosnoski
> Fix For: 2.4
>
>
> The WS-RM code needs to use synchronized blocks for both modifying and
> accessing SequenceAcknowledgement. Currently the code appears to use
> synchronized blocks for modifying SequenceAcknowledgement information, but
> not for reading it (for example in RMSoapInterceptor.encode(SoapMessage,
> RMProperties), where the SequenceAcknowledgement is serialized to XML). This
> can result in ConcurrentModificationException:
> [java] java.util.ConcurrentModificationException
> [java] at
> java.util.AbstractList$Itr.checkForComodification(AbstractList.java:449)
> [java] at java.util.AbstractList$Itr.next(AbstractList.java:420)
> [java] at
> com.sun.xml.bind.v2.runtime.reflect.Lister$CollectionLister$1.next(Lister.java:284)
> [java] at
> com.sun.xml.bind.v2.runtime.property.ArrayElementProperty.serializeListBody(ArrayElementProperty.java:135)
> [java] at
> com.sun.xml.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.java:155)
> [java] at
> com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:340)
> [java] at
> com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:696)
> [java] at
> com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl$1.serializeBody(ElementBeanInfoImpl.java:152)
> [java] at
> com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl$1.serializeBody(ElementBeanInfoImpl.java:189)
> [java] at
> com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeBody(ElementBeanInfoImpl.java:316)
> [java] at
> com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeRoot(ElementBeanInfoImpl.java:323)
> [java] at
> com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeRoot(ElementBeanInfoImpl.java:72)
> [java] at
> com.sun.xml.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:494)
> [java] at
> com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:315)
> [java] at
> com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:244)
> [java] at
> javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarshallerImpl.java:109)
> [java] at
> org.apache.cxf.ws.rm.soap.RMSoapInterceptor.encodeProperty(RMSoapInterceptor.java:396)
> [java] at
> org.apache.cxf.ws.rm.soap.RMSoapInterceptor.encode(RMSoapInterceptor.java:206)
> [java] at
> org.apache.cxf.ws.rm.soap.RMSoapInterceptor.encode(RMSoapInterceptor.java:154)
> [java] at
> org.apache.cxf.ws.rm.soap.RMSoapInterceptor.mediate(RMSoapInterceptor.java:138)
> [java] at
> org.apache.cxf.ws.rm.soap.RMSoapInterceptor.handleMessage(RMSoapInterceptor.java:126)
> [java] at
> org.apache.cxf.ws.rm.soap.RMSoapInterceptor.handleMessage(RMSoapInterceptor.java:93)
> [java] at
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:255)
> [java] at
> org.apache.cxf.ws.addressing.ContextUtils.rebaseResponse(ContextUtils.java:403)
> [java] at
> org.apache.cxf.ws.addressing.MAPAggregator.mediate(MAPAggregator.java:547)
> [java] at
> org.apache.cxf.ws.addressing.MAPAggregator.handleMessage(MAPAggregator.java:227)
> [java] at
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:255)
> [java] at
> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:113)
> [java] at
> org.apache.cxf.transport.http_jetty.JettyHTTPDestination.serviceRequest(JettyHTTPDestination.java:311)
> [java] at
> org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService(JettyHTTPDestination.java:280)
> [java] at
> org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle(JettyHTTPHandler.java:72)
> [java] at
> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:922)
> [java] at
> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:860)
> [java] at
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
> [java] at
> org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:247)
> [java] at
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:114)
> [java] at org.eclipse.jetty.server.Server.handle(Server.java:352)
> [java] at
> org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:596)
> [java] at
> org.eclipse.jetty.server.HttpConnection$RequestHandler.content(HttpConnection.java:1066)
> [java] at
> org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:805)
> [java] at
> org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:212)
> [java] at
> org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:426)
> [java] at
> org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:510)
> [java] at
> org.eclipse.jetty.io.nio.SelectChannelEndPoint.access$000(SelectChannelEndPoint.java:34)
> [java] at
> org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:40)
> [java] at
> org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:450)
> [java] at java.lang.Thread.run(Thread.java:595)
--
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira