You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Colm O hEigeartaigh (JIRA)" <ji...@apache.org> on 2013/08/19 11:14:48 UTC

[jira] [Commented] (CXF-5213) Question on ConcurrentModificationException in WSS4J when running CXF WS-Security stress test

    [ https://issues.apache.org/jira/browse/CXF-5213?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13743657#comment-13743657 ] 

Colm O hEigeartaigh commented on CXF-5213:
------------------------------------------


This has already been fixed, as far as I can recall. 2.6.2 is an old version of CXF - could you try again with a more recent version?

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