[ https://issues.apache.org/jira/browse/CXF-5213?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13744799#comment-13744799 ]
Colm O hEigeartaigh commented on CXF-5213: ------------------------------------------ A temporary fix was put in place here: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/AbstractWSS4JInterceptor.java?r1=1393364&r2=1393363&pathrev=1393364 This was then removed when we picked up WSS4J 1.6.8 which fixed the problem: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/AbstractWSS4JInterceptor.java?r1=1428803&r2=1428802&pathrev=1428803 Colm. > Question on ConcurrentModificationException in WSS4J when running CXF > WS-Security stress test > --------------------------------------------------------------------------------------------- > > Key: CXF-5213 > URL: https://issues.apache.org/jira/browse/CXF-5213 > Project: CXF > Issue Type: Bug > Components: WS-* Components > Affects Versions: 2.6.2 > Environment: all supported platforms > Reporter: Syed Abdul Wadood > Original Estimate: 168h > Remaining Estimate: 168h > > When running CXF WS-Security stressful test, we saw > ConcurrentModificationException while loading crypto, This exception could > be fixed by synchronizing the map, however, I can not understand why > ConcurrentModificationException occurs, as I would expect the handler is > thread safe. Does anyone ever see this kind of problem? or can explain why > concurrent exception may happen? Is there a fix in CXF layer, or have to be > addressed in WSS4J? > Throwable class: java.util.ConcurrentModificationException > Error Message: null > . StackTrace::Element: > java.util.HashMap$AbstractMapIterator.checkConcurrentMod(HashMap.java:191) > . StackTrace::Element: > java.util.HashMap$AbstractMapIterator.makeNext(HashMap.java:196) > . StackTrace::Element: java.util.HashMap$KeyIterator.next(HashMap.java:269) > . StackTrace::Element: java.util.HashMap.analyzeMap(HashMap.java:798) > . StackTrace::Element: java.util.HashMap.rehash(HashMap.java:784) > . StackTrace::Element: java.util.HashMap.rehash(HashMap.java:817) > . StackTrace::Element: java.util.HashMap.putImpl(HashMap.java:700) > . StackTrace::Element: java.util.HashMap.put(HashMap.java:678) > . StackTrace::Element: > org.apache.ws.security.handler.WSHandler.loadCrypto(WSHandler.java:806) > . StackTrace::Element: > org.apache.ws.security.handler.WSHandler.loadDecryptionCrypto(WSHandler.java:753) > . StackTrace::Element: > org.apache.ws.security.handler.WSHandler.decodeDecryptionParameter(WSHandler.java:1139) > . StackTrace::Element: > org.apache.ws.security.handler.WSHandler.doReceiverAction(WSHandler.java:284) > . StackTrace::Element: > org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor.handleMessage(WSS4JInInterceptor.java:265) > . StackTrace::Element: > org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor.handleMessage(WSS4JInInterceptor.java:90) > . StackTrace::Element: > org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:262) > . StackTrace::Element: > org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:801) > . StackTrace::Element: > org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1695) > . StackTrace::Element: > com.ibm.ws.jaxws.support.LibertyHTTPConduit$LibertyWrappedOutputStream.handleResponseInternal(LibertyHTTPConduit.java:70) > . StackTrace::Element: > org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1531) > . StackTrace::Element: > org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1439) > . StackTrace::Element: > org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56) > . StackTrace::Element: > org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:660) > . StackTrace::Element: > org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62) > . StackTrace::Element: > org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:262) > . StackTrace::Element: > org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:531) > . StackTrace::Element: > org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:464) > . StackTrace::Element: > org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:367) > . StackTrace::Element: > org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:320) > . StackTrace::Element: > org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:89) > . StackTrace::Element: > org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:134) > protected Crypto loadCrypto( > String cryptoPropertyFile, > String cryptoPropertyRefId, > RequestData requestData > ) throws WSSecurityException { > Object mc = requestData.getMsgContext(); > Crypto crypto = null; > > // > // Try the Property Ref Id first > // > String refId = getString(cryptoPropertyRefId, mc); > if (refId != null) { > crypto = cryptos.get(refId); > if (crypto == null) { > Object obj = getProperty(mc, refId); > if (obj instanceof Properties) { > crypto = CryptoFactory.getInstance((Properties)obj); > cryptos.put(refId, crypto); > } else if (obj instanceof Crypto) { > crypto = (Crypto)obj; > cryptos.put(refId, crypto); > } > } > } -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira