[ 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