On Monday, July 25, 2011 12:53:37 PM Algirdas Veitas wrote:
> Will give that a shot, but it looks like this is the same issue as
> https://issues.apache.org/jira/browse/CXF-3075, and according the entry was
> fixed in 2.3.1.  Were there more changes since then?

For the client creation, there is:
https://issues.apache.org/jira/browse/CXF-3558

which  is in 2.3.5.

Ideally, you'd move right to 2.4.1.  It's definitely easier to debug things 
from my side there.


Dan



> 
> Al
> 
> On Mon, Jul 25, 2011 at 12:48 PM, Daniel Kulp <[email protected]> wrote:
> > Can you move up to 2.3.5?   We did add some synchronized blocks around
> > the ReflectionServiceFactoryBean to make the singleton cases work a lot
> > better. That may fix this issue.
> > 
> > Dan
> > 
> > On Monday, July 25, 2011 12:35:11 PM Algirdas Veitas wrote:
> > > More information....after doing some additional testing, it looks
> > > like
> > 
> > the
> > 
> > > exception is thrown in different areas of the CXF code, but the
> > > ConcurrentModificationException is thrown when trying to manipulate
> > > the
> > > 
> > >     private List<AbstractServiceConfiguration>
> > >     serviceConfigurations =
> > >     
> > >         new ArrayList<AbstractServiceConfiguration>();
> > > 
> > > that belongs to ReflectionServiceFactoryBean....see stack traces
> > > below
> > 
> > for
> > 
> > > additional samples:
> > > 
> > > Caused by: java.util.ConcurrentModificationException
> > > 
> > >     at
> > > 
> > > java.util.AbstractList$Itr.checkForComodification(AbstractList.java:
> > > 372)
> > > 
> > >     at java.util.AbstractList$Itr.next(AbstractList.java:343)
> > >     at
> > 
> > org.apache.cxf.service.factory.ReflectionServiceFactoryBean.createInputW
> > rapp
> > 
> > > edMessageParts(ReflectionServiceFactoryBean.java:1619) at
> > 
> > org.apache.cxf.service.factory.ReflectionServiceFactoryBean.createOperat
> > ion(
> > 
> > > ReflectionServiceFactoryBean.java:934) at
> > 
> > org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.createOperation(Jax
> > WsSe
> > 
> > > rviceFactoryBean.java:616) at
> > 
> > org.apache.cxf.service.factory.ReflectionServiceFactoryBean.createInterf
> > ace(
> > 
> > > ReflectionServiceFactoryBean.java:907) at
> > 
> > org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildService
> > From
> > 
> > > Class(ReflectionServiceFactoryBean.java:433) at
> > 
> > org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.buildServiceFromCla
> > ss(J
> > 
> > > axWsServiceFactoryBean.java:680) at
> > 
> > org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeSe
> > rvic
> > 
> > > eModel(ReflectionServiceFactoryBean.java:505) at
> > 
> > org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(Refle
> > ctio
> > 
> > > nServiceFactoryBean.java:242) at
> > 
> > org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsService
> > Fact
> > 
> > > oryBean.java:202) at
> > 
> > org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(
> > Abst
> > 
> > > ractWSDLBasedEndpointFactory.java:101) at
> > 
> > org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:
> > 90)
> > 
> > >     at
> > 
> > org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactory
> > Bean
> > 
> > > .java:117
> > > 
> > > Caused by: java.util.ConcurrentModificationException
> > > 
> > >     at
> > > 
> > > java.util.AbstractList$Itr.checkForComodification(AbstractList.java:
> > > 372)
> > > 
> > >     at java.util.AbstractList$Itr.next(AbstractList.java:343)
> > >     at
> > 
> > org.apache.cxf.service.factory.ReflectionServiceFactoryBean.addFault(Ref
> > lect
> > 
> > > ionServiceFactoryBean.java:2032) at
> > 
> > org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeFa
> > ults
> > 
> > > (ReflectionServiceFactoryBean.java:2011) at
> > 
> > org.apache.cxf.service.factory.ReflectionServiceFactoryBean.createMessag
> > ePar
> > 
> > > ts(ReflectionServiceFactoryBean.java:1575) at
> > 
> > org.apache.cxf.service.factory.ReflectionServiceFactoryBean.createOperat
> > ion(
> > 
> > > ReflectionServiceFactoryBean.java:928) at
> > 
> > org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.createOperation(Jax
> > WsSe
> > 
> > > rviceFactoryBean.java:616) at
> > 
> > org.apache.cxf.service.factory.ReflectionServiceFactoryBean.createInterf
> > ace(
> > 
> > > ReflectionServiceFactoryBean.java:907) at
> > 
> > org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildService
> > From
> > 
> > > Class(ReflectionServiceFactoryBean.java:433) at
> > 
> > org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.buildServiceFromCla
> > ss(J
> > 
> > > axWsServiceFactoryBean.java:680) at
> > 
> > org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeSe
> > rvic
> > 
> > > eModel(ReflectionServiceFactoryBean.java:505) at
> > 
> > org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(Refle
> > ctio
> > 
> > > nServiceFactoryBean.java:242) at
> > 
> > org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsService
> > Fact
> > 
> > > oryBean.java:202) at
> > 
> > org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(
> > Abst
> > 
> > > ractWSDLBasedEndpointFactory.java:101) at
> > 
> > org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:
> > 90)
> > 
> > >     at
> > 
> > org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactory
> > Bean
> > 
> > > .java:117) at
> > 
> > org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFactoryBean.
> > java
> > 
> > > :124)
> > > 
> > > On Mon, Jul 25, 2011 at 11:30 AM, Algirdas Veitas
> > > <[email protected]
> > >
> > >wrote:
> > > > whoops...in the previous post...we mentioned 2.1.3 but we are
> > > > using
> > > > 2.3.1
> > > > 
> > > > On Mon, Jul 25, 2011 at 10:36 AM, Algirdas Veitas
> > 
> > <[email protected]>wrote:
> > > >> Hi Daniel,
> > > >> 
> > > >> Unfortunately, we are unable to reproduce this problem in an
> > > >> isolated environment.  But at this point, it does look like
> > > >> to be an issue with multiple threads using the same instance
> > > >> of the client.  Because we are
> > > >> unable to reproduce, our current strategy is to create a
> > > >> separate
> > > >> client per SOAP call.
> > > >> 
> > > >> Using the following documentation as a guideline
> > > >> http://cxf.apache.org/docs/jax-ws-configuration.html, we came
> > > >> up with the following:
> > > >> 
> > > >> Here was the original configuration for the client:
> > > >> 
> > > >> 
> > > >> <jaxws:client id="xService"  serviceClass="com.XService"
> > > >> address="#xServiceUrl"
> > > >> </jaxws:client>
> > > >> 
> > > >> Here is what we just tried:
> > > >> 
> > > >> <bean id="xServiceProxyFactory"
> > > >> 
> > > >>         class="org.apache.cxf.jaxws.
> > > >> 
> > > >> JaxWsProxyFactoryBean">
> > > >> 
> > > >>         <property name="serviceClass"
> > > >>         value="com.XService"/>
> > > >>         <property name="address" ref="xServiceUrl"/>
> > > >>  
> > > >>  </bean>
> > > >>  
> > > >>  <bean id="xService" scope="prototype" class="com.XService"
> > > >>  
> > > >>               factory-bean="xServiceProxyFactory
> > > >>               "
> > > >> 
> > > >> factory-method="create"/>
> > > >> 
> > > >> Notice that the xService bean is a prototype, so we get a new
> > > >> instance for each request made, to avoid the original issue
> > > >> we were seeing.
> > > >> 
> > > >> Now in our code we have a class that looks like this:
> > > >> 
> > > >> public class xServiceHelperImpl implements BeanFactoryAware
> > > >> {
> > > >> 
> > > >>     @Autowired
> > > >>     @Qualifier(value="xServiceProxyFactory")
> > > >>     private JaxWsProxyFactoryBean proxyFactoryBean;
> > > >>     
> > > >>     @Override
> > > >>     public void setBeanFactory(BeanFactory beanFactory)
> > > >>     throws
> > > >> 
> > > >> BeansException {
> > > >> 
> > > >>         this.beanFactory=beanFactory;
> > > >>     
> > > >>     }
> > > >>     
> > > >>     private xService getXService() {
> > > >>     
> > > >>         xService xService =
> > > >> 
> > > >> (xService)this.beanFactory.getBean("xService");
> > > >> 
> > > >>         return xService;
> > > >>     
> > > >>     }
> > > >> 
> > > >> }
> > > >> 
> > > >> And we have a JUnit test that spawns multiple threads that
> > > >> basically
> > > >> calls "getXService()" and then invokes a web service call.
> > > >> 
> > > >> When there is just 1 thread configured in the test, everything
> > > >> works
> > > >> fine.
> > > >> 
> > > >> When there are 2 threads configured in the test, we start
> > > >> getting
> > > >> errors, it is a ConcurrentModificationExcpeiton, but in a
> > > >> different
> > > >> place then where we saw before :(....here is the stack trace
> > > >> 
> > > >> org.springframework.beans.factory.BeanCreationException: Error
> > > >> creating
> > > >> bean with name 'xService' defined in class path resource
> > > >> [spring/myCxfClient.xml]: Instantiation of bean failed; nested
> > > >> exception is
> > > >> org.springframework.beans.factory.BeanDefinitionStoreException
> > > >> :
> > > >> Factory method [public java.lang.Object
> > > >> org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create()] threw
> > > >> exception; nested exception is
> > > >> java.util.ConcurrentModificationException
> > > >> 
> > > >>     at
> > > >> 
> > > >> org.springframework.beans.factory.support.ConstructorResolver.
> > > >> instanti ateUsingFactoryMethod(ConstructorResolver.java:581)
> > > >> 
> > > >>     at
> > > >> 
> > > >> org.springframework.beans.factory.support.AbstractAutowireCapa
> > > >> bleBeanF
> > > >> actory.instantiateUsingFactoryMethod(AbstractAutowireCapableB
> > > >> eanFactor y.java:983)
> > > >> 
> > > >>     at
> > > >> 
> > > >> org.springframework.beans.factory.support.AbstractAutowireCapa
> > > >> bleBeanF
> > > >> actory.createBeanInstance(AbstractAutowireCapableBeanFactory.
> > > >> java:879)
> > > >> 
> > > >>     at
> > > >> 
> > > >> org.springframework.beans.factory.support.AbstractAutowireCapa
> > > >> bleBeanF
> > > >> actory.doCreateBean(AbstractAutowireCapableBeanFactory.java:4
> > > >> 85)
> > > >> 
> > > >>     at
> > > >> 
> > > >> org.springframework.beans.factory.support.AbstractAutowireCapa
> > > >> bleBeanF
> > > >> actory.createBean(AbstractAutowireCapableBeanFactory.java:456
> > > >> )
> > > >> 
> > > >>     at
> > > >> 
> > > >> org.springframework.beans.factory.support.AbstractBeanFactory.
> > > >> doGetBea n(AbstractBeanFactory.java:310)
> > > >> 
> > > >>     at
> > > >> 
> > > >> org.springframework.beans.factory.support.AbstractBeanFactory.
> > > >> getBean( AbstractBeanFactory.java:190)
> > > >> 
> > > >>     at
> > > >>     com.XServiceHelperImpl.getXService(xServiceHelperImpl.
> > > >>     java:21
> > > >>     7)
> > > >>     at
> > > >>     com.XServiceHelperImpl.getX(xServiceHelperImpl.java:6
> > > >>     3)
> > > >>     at
> > > >> 
> > > >> com..ITXServiceHelperImplTest$ITUserReadOnlyClient.run(ITUserS
> > > >> erviceHe lperImplTest.java:101)
> > > >> 
> > > >>     at java.lang.Thread.run(Thread.java:662)
> > > >> 
> > > >> Caused by:
> > > >> org.springframework.beans.factory.BeanDefinitionStoreException
> > > >> :
> > > >> Factory method [public java.lang.Object
> > > >> org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create()] threw
> > > >> exception; nested exception is
> > > >> java.util.ConcurrentModificationException
> > > >> 
> > > >>     at
> > > >> 
> > > >> org.springframework.beans.factory.support.SimpleInstantiationS
> > > >> trategy. instantiate(SimpleInstantiationStrategy.java:157)
> > > >> 
> > > >>     at
> > > >> 
> > > >> org.springframework.beans.factory.support.ConstructorResolver.
> > > >> instanti ateUsingFactoryMethod(ConstructorResolver.java:570)
> > > >> 
> > > >>     ... 10 more
> > > >> 
> > > >> Caused by: java.util.ConcurrentModificationException
> > > >> 
> > > >>     at
> > > >> 
> > > >> java.util.AbstractList$Itr.checkForComodification(AbstractList
> > > >> .java:37 2)
> > > >> 
> > > >>     at
> > > >>     java.util.AbstractList$Itr.next(AbstractList.java:343
> > > >>     )
> > > >>     
> > > >>      at
> > > >> 
> > > >> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.cr
> > > >> eateInpu
> > > >> tWrappedMessageParts(ReflectionServiceFactoryBean.java:1619)
> > > >> 
> > > >>     at
> > > >> 
> > > >> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.cr
> > > >> eateOper ation(ReflectionServiceFactoryBean.java:934)
> > > >> 
> > > >>     at
> > > >> 
> > > >> org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.createOpe
> > > >> ration(J axWsServiceFactoryBean.java:616)
> > > >> 
> > > >>     at
> > > >> 
> > > >> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.cr
> > > >> eateInte rface(ReflectionServiceFactoryBean.java:907)
> > > >> 
> > > >>     at
> > > >> 
> > > >> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.bu
> > > >> ildServi ceFromClass(ReflectionServiceFactoryBean.java:433)
> > > >> 
> > > >>     at
> > > >> 
> > > >> org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.buildServ
> > > >> iceFromC lass(JaxWsServiceFactoryBean.java:680)
> > > >> 
> > > >>     at
> > > >> 
> > > >> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.in
> > > >> itialize ServiceModel(ReflectionServiceFactoryBean.java:505)
> > > >> 
> > > >>     at
> > > >> 
> > > >> org.apache.cxf.service.factory.ReflectionServiceFactoryBean.cr
> > > >> eate(Ref lectionServiceFactoryBean.java:242)
> > > >> 
> > > >>     at
> > > >> 
> > > >> org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(Ja
> > > >> xWsServi ceFactoryBean.java:202)
> > > >> 
> > > >>     at
> > > >> 
> > > >> org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.creat
> > > >> eEndpoin t(AbstractWSDLBasedEndpointFactory.java:101)
> > > >> 
> > > >>     at
> > > >> 
> > > >> org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactory
> > > >> Bean.jav a:90)
> > > >> 
> > > >>     at
> > > >> 
> > > >> org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientPr
> > > >> oxyFacto ryBean.java:117)
> > > >> 
> > > >>     at
> > > >> 
> > > >> org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFa
> > > >> ctoryBea n.java:124)
> > > >> 
> > > >>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> > > >>     Method)
> > > >>     at
> > > >> 
> > > >> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccess
> > > >> orImpl.j ava:39)
> > > >> 
> > > >>     at
> > > >> 
> > > >> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMeth
> > > >> odAccess orImpl.java:25)
> > > >> 
> > > >>     at java.lang.reflect.Method.invoke(Method.java:597)
> > > >>     at
> > > >> 
> > > >> org.springframework.beans.factory.support.SimpleInstantiationS
> > > >> trategy. instantiate(SimpleInstantiationStrategy.java:145)
> > > >> 
> > > >>     ... 11 more
> > > >> 
> > > >> Are we not configuring our client correctly?  Just to
> > > >> reiterate we are using 2.1.3.
> > > >> 
> > > >> Thanks,
> > > >> Al
> > > >> 
> > > >> On Fri, Jul 22, 2011 at 5:09 PM, Daniel Kulp
> > > >> <[email protected]>
> > 
> > wrote:
> > > >>> On Friday, July 22, 2011 4:16:39 PM Algirdas Veitas wrote:
> > > >>> > Small world :)
> > > >>> > 
> > > >>> > RE: Hmm... with #3, you shouldn't even be hitting this. 
> > > >>> >  The
> > > >>> 
> > > >>> HEADER_LIST
> > > >>> 
> > > >>> > should
> > > >>> > be completely created per request since it wouldn't be
> > > >>> > pulled
> > > >>> > from the request
> > > >>> > context.     However, if the HEADER_LIST is added to the
> > > >>> > request
> > > >>> 
> > > >>> context  at
> > > >>> 
> > > >>> > ANY time, even using #3 after that would cause an issue.
> > > >>> >  If you
> > > >>> > aren't touching the HEADER_LIST anywhere, then I'm not
> > > >>> > really
> > > >>> > sure what is
> > > >>> 
> > > >>> going
> > > >>> 
> > > >>> > on.
> > > >>> > 
> > > >>> > Yeah, we are not manipulating the HEADER_LIST anywhere
> > > >>> > in our
> > > >>> > code, so
> > > >>> 
> > > >>> am
> > > >>> 
> > > >>> > not sure what is going on either....
> > > >>> > 
> > > >>> > RE: 2) After returning from any method where you had set
> > > >>> > a
> > > >>> > header,
> > > >>> 
> > > >>> call:  *
> > > >>> 
> > > >>> > context*.getMessageContext().remove(Header.HEADER_LIST);
> > > >>> > 
> > > >>> > How do I get a handle to the "context", in our situation
> > > >>> > where
> > > >>> > we are
> > > >>> 
> > > >>> using
> > > >>> 
> > > >>> > generated code?
> > > >>> 
> > > >>> Sorry.  That would be the actual proxy object.    For
> > > >>> example:
> > > >>> 
> > > >>> MyServiceInterface proxy = service.getMyServicePort();
> > > >>> ((BindingProvider)proxy).getRequestContext().....
> > > >>> 
> > > >>> With JAX-WS, all the proxys implement not only the generated
> > > >>> interface,
> > > >>> but
> > > >>> also the BindingProvider interface.
> > > >>> 
> > > >>> 
> > > >>> Dan
> > > >>> 
> > > >>> > Thanks,
> > > >>> > Al
> > > >>> > 
> > > >>> > On Fri, Jul 22, 2011 at 4:04 PM, Daniel Kulp
> > > >>> > <[email protected]>
> > 
> > wrote:
> > > >>> > > On Friday, July 22, 2011 3:58:06 PM Algirdas Veitas wrote:
> > > >>> > > > Hi Daniel,
> > > >>> > > > 
> > > >>> > > > Nice meeting you as well!
> > > >>> > > 
> > > >>> > > Just discovered you and I went to Northeastern at
> > > >>> > > roughly
> > > >>> > > the same
> > > >>> 
> > > >>> time.
> > > >>> 
> > > >>> > > We
> > > >>> > > may have met before.  :-)
> > > >>> > > 
> > > >>> > > > One follow up question....the way we are adding
> > > >>> > > > headers
> > > >>> > > > is #3.  Our generated client code treats our
> > > >>> > > > headers
> > > >>> > > > like an ordinary parameter in
> > > >>> > > 
> > > >>> > > the
> > > >>> > > 
> > > >>> > > > method signature.  Will your solution work for
> > > >>> > > > this
> > > >>> > > > strategy as
> > > >>> > > > well?
> > > >>> > > 
> > > >>> > > Hmm... with #3, you shouldn't even be hitting this. 
> > > >>> > >  The
> > > >>> > > HEADER_LIST should
> > > >>> > > be completely created per request since it wouldn't
> > > >>> > > be
> > > >>> > > pulled from
> > > >>> 
> > > >>> the
> > > >>> 
> > > >>> > > request
> > > >>> > > context.     However, if the HEADER_LIST is added to
> > > >>> > > the
> > > >>> > > request
> > > >>> 
> > > >>> context
> > > >>> 
> > > >>> > >  at
> > > >>> > > 
> > > >>> > > ANY time, even using #3 after that would cause an
> > > >>> > > issue.  If
> > > >>> > > you
> > > >>> 
> > > >>> aren't
> > > >>> 
> > > >>> > > touching the HEADER_LIST anywhere, then I'm not
> > > >>> > > really sure
> > > >>> > > what is
> > > >>> > > going
> > > >>> > > on.
> > > >>> > > Strange.   Definitely give it a try though.
> > > >>> > > 
> > > >>> > > 
> > > >>> > > Dan
> > > >>> > > 
> > > >>> > > > Al
> > > >>> > > > 
> > > >>> > > > On Fri, Jul 22, 2011 at 3:45 PM, Daniel Kulp
> > > >>> > > > <[email protected]>
> > > >>> 
> > > >>> wrote:
> > > >>> > > > > We talked briefly about this at lunch today
> > > >>> > > > > (nice to
> > > >>> > > > > meet you
> > > >>> > > > > Al!) but wanted
> > > >>> > > > > to follow up here.....
> > > >>> > > > > 
> > > >>> > > > > 
> > > >>> > > > > The per-proxy request context can definitely
> > > >>> > > > > come
> > > >>> > > > > into play
> > > >>> > > > > here.   If any of
> > > >>> > > > > the threads add a header list to the
> > > >>> > > > > RequestContext
> > > >>> > > > > via the
> > > >>> > > > > method
> > > >>> > > > > mentioned
> > > >>> 
> > > >>> > > > > in #4 of:
> > > >>> http://cxf.apache.org/faq#FAQ-HowcanIaddsoapheaderstotherequ
> > > >>> est%2Fre spon
> > > >>> 
> > > >>> > > > > se%3F
> > > >>> > > > > 
> > > >>> > > > > then those headers would be sent on all
> > > >>> > > > > methods
> > > >>> > > > > called on the
> > > >>> > > > > proxy.
> > > >>> > > > > 
> > > >>> > > > > What's worse, I THINK that List is just
> > > >>> > > > > copied into
> > > >>> > > > > the real
> > > >>> > > > > message
> > > >>> > > > > context
> > > >>> > > > > so any header processing done during the
> > > >>> > > > > processing
> > > >>> > > > > of the
> > > >>> > > > > message
> > > >>> > > 
> > > >>> > > would
> > > >>> > > 
> > > >>> > > > > affect that list, thus affecting all threads
> > > >>> > > > > as well
> > > >>> > > > > as future
> > > >>> > > > > method
> > > >>> > > > > calls on
> > > >>> > > > > the same thread.      Thinking about this,
> > > >>> > > > > it may
> > > >>> > > > > make sense to
> > > >>> > > > > clone
> > > >>> > > > > the
> > > >>> > > > > list
> > > >>> > > > > at the very start of processing messages to
> > > >>> > > > > make
> > > >>> > > > > sure the header list
> > > >>> > > 
> > > >>> > > in
> > > >>> > > 
> > > >>> > > > > the
> > > >>> > > > > request context isn't modified.   That might
> > > >>> > > > > be
> > > >>> > > > > worth filing a
> > > >>> > > > > jira
> > > >>> > > 
> > > >>> > > for.
> > > >>> > > 
> > > >>> > > > > For now, I would suggest doing 2 things:
> > > >>> > > > > 
> > > >>> > > > > 1) Use the thread local request contexts:
> > > >>> > > > > 
> > > >>> > > > > <jaxws:client id="xService"
> > > >>> > > > > 
> > > >>> > > > >         serviceClass="com.XService"
> > > >>> > > > >         address="#xServiceUrl" >
> > > >>> > > > >     
> > > >>> > > > >     <jaxws:properties>
> > > >>> > > > >     
> > > >>> > > > >            <entry
> > > >>> > > > >            key="thread.local.requ
> > > >>> > > > >            est.con
> > > >>> > > > >            text"
> > > >>> > > > >            value="true" />
> > > >>> > > > >        
> > > >>> > > > >        </jaxws:properties>
> > > >>> > > > > 
> > > >>> > > > > </jaxws:client>
> > > >>> > > > > 
> > > >>> > > > > 2) After returning from any method where you
> > > >>> > > > > had set
> > > >>> > > > > a header,
> > > >>> > > > > call:
> > > >>> > > > > context.getMessageContext().remove(Header.HE
> > > >>> > > > > ADER_LIS
> > > >>> > > > > T);
> > > >>> > > > > 
> > > >>> > > > > 
> > > >>> > > > > That should keep things in a good state.
> > > >>> > > > > 
> > > >>> > > > > Dan
> > > >>> > > > > 
> > > >>> > > > > On Friday, July 22, 2011 10:25:10 AM Algirdas Veitas wrote:
> > > >>> > > > > > Hi,
> > > >>> > > > > > 
> > > >>> > > > > > We are getting a
> > > >>> > > > > > ConcurrentModificationException
> > > >>> > > > > > exception
> > > >>> > > > > > in our
> > > >>> > > > > > CXF
> > > >>> > > > > > client, when it is processing
> > > >>> > > > > > SOAPHeaders.    We
> > > >>> > > > > > did find
> > > >>> > > > > > this
> > > >>> > > > > > following link that describes what is
> > > >>> > > > > > going on
> > > >>> 
> > > >>> http://cxf.547215.n5.nabble.com/jira-Created-CXF-2762-Cannot
> > > >>> -deploy- csta
> > > >>> 
> > > >>> > > > > -web
> > > >>> > > > > 
> > > >>> > > > > > -service-td586662.html#a586663, and we
> > > >>> > > > > > will
> > > >>> > > > > > address that
> > > >>> > > > > > (Header
> > > >>> > > > > > object
> > > >>> > > > > > needs to be unique across threads), but
> > > >>> > > > > > something else
> > > >>> > > > > > strange is
> > > >>> > > > > > happening:
> > > >>> > > > > > 
> > > >>> > > > > > To start here is our client setup
> > > >>> > > > > > 
> > > >>> > > > > >   <!-- Web Service Clients -->
> > > >>> > > > > >   
> > > >>> > > > > >     <jaxws:client id="xService"
> > > >>> > > > > >     
> > > >>> > > > > >         serviceClass="com.XServi
> > > >>> > > > > >         ce"
> > > >>> > > > > >         address="#xServiceUrl"
> > > >>> > > > > >         />
> > > >>> > > > > > 
> > > >>> > > > > > This WSDL that is associate with this
> > > >>> > > > > > client has
> > > >>> > > > > > some
> > > >>> > > > > > methods that
> > > >>> > > > > > DO
> > > >>> > > > > 
> > > >>> > > > > have a
> > > >>> > > > > 
> > > >>> > > > > > Header and some DO NOT.
> > > >>> > > > > > 
> > > >>> > > > > > And here is the shortened stack trace:
> > > >>> > > > > > 
> > > >>> > > > > > <http://newportave.jira.com/wiki/display
> > > >>> > > > > > /21+Jul+
> > > >>> > > > > > 2011+19/11%3
> > > >>> > > > > > A46%2C87 4>
> > > >>> > > > > > java.util.ConcurrentModificationExceptio
> > > >>> > > > > > n
> > > >>> > > > > > at
> > > >>> 
> > > >>> java.util.AbstractList$Itr.checkForComodification(AbstractLi
> > > >>> st.java: 372)
> > > >>> 
> > > >>> > > > > > at
> > > >>> > > > > > java.util.AbstractList$Itr.next(Abstract
> > > >>> > > > > > List.ja
> > > >>> > > > > > va:343)
> > > >>> > > > > > at
> > > >>> 
> > > >>> org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.w
> > > >>> riteSoap Enve
> > > >>> 
> > > >>> > > > > lope
> > > >>> > > > > 
> > > >>> > > > > > Start(SoapOutInterceptor.java:139) at
> > > >>> 
> > > >>> org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.h
> > > >>> andleMes sage
> > > >>> 
> > > >>> > > > > (Soa
> > > >>> > > > > 
> > > >>> > > > > > pOutInterceptor.java:81) at
> > > >>> 
> > > >>> org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.h
> > > >>> andleMes sage
> > > >>> 
> > > >>> > > > > (Soa
> > > >>> > > > > 
> > > >>> > > > > > pOutInterceptor.java:61) at
> > > >>> 
> > > >>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(Phase
> > > >>> Intercep torC
> > > >>> 
> > > >>> > > > > hain
> > > >>> > > > > 
> > > >>> > > > > > .java:255) at
> > > >>> > > > > 
> > > >>> > > > > org.apache.cxf.endpoint.ClientImpl.invoke(Cl
> > > >>> > > > > ientImpl
> > > >>> > > > > .java:516)
> > > >>> > > > > 
> > > >>> > > > > > Here is the rub: This exception is being
> > > >>> > > > > > thrown
> > > >>> > > > > > when we are
> > > >>> > > > > > calling
> > > >>> > > > > > a
> > > >>> > > > > 
> > > >>> > > > > method
> > > >>> > > > > 
> > > >>> > > > > > that DOES NOT have a Header, but on line
> > > >>> > > > > > 139 in
> > > >>> > > > > > SoapOutInterceptor,
> > > >>> > > > > > it
> > > >>> > > > > > looks like we are trying to process an
> > > >>> > > > > > list that
> > > >>> > > > > > has atleast
> > > >>> > > > > > 1
> > > >>> > > > > > header.
> > > >>> > > > >  
> > > >>> > > > >  Am
> > > >>> > > > >  
> > > >>> > > > > > pretty certain (this is occurring only
> > > >>> > > > > > in a
> > > >>> > > > > > specific
> > > >>> > > > > > environment)
> > > >>> > > > > > that
> > > >>> > > > > > other methods on this service were made
> > > >>> > > > > > previous
> > > >>> > > > > > to this
> > > >>> > > > > > error that
> > > >>> > > > > > did
> > > >>> > > > > > include a SOAP Header.  Am speculating,
> > > >>> > > > > > but is
> > > >>> > > > > > the SOAP
> > > >>> > > > > > Header being
> > > >>> > > > > 
> > > >>> > > > > cached
> > > >>> > > > > 
> > > >>> > > > > > in the request context and the request
> > > >>> > > > > > context
> > > >>> > > > > > is scoped per
> > > >>> > > > > > client
> > > >>> > > > > > instance as per the FAQ (
> > > >>> > > > > > http://cxf.apache.org/faq.html#FAQ-AreJA
> > > >>> > > > > > XWSclien
> > > >>> > > > > > tproxiesthre
> > > >>> > > > > > adsafe%3 F)?
> > > >>> > > > > > 
> > > >>> > > > > > 
> > > >>> > > > > > Thanks,
> > > >>> > > > > > Al
> > > >>> > > > > 
> > > >>> > > > > --
> > > >>> > > > > Daniel Kulp
> > > >>> > > > > [email protected]
> > > >>> > > > > http://dankulp.com/blog
> > > >>> > > > > Talend - http://www.talend.com
> > > >>> > > 
> > > >>> > > --
> > > >>> > > Daniel Kulp
> > > >>> > > [email protected]
> > > >>> > > http://dankulp.com/blog
> > > >>> > > Talend - http://www.talend.com
> > > >>> 
> > > >>> --
> > > >>> Daniel Kulp
> > > >>> [email protected]
> > > >>> http://dankulp.com/blog
> > > >>> Talend - http://www.talend.com
> > 
> > --
> > Daniel Kulp
> > [email protected]
> > http://dankulp.com/blog
> > Talend - http://www.talend.com
-- 
Daniel Kulp
[email protected]
http://dankulp.com/blog
Talend - http://www.talend.com

Reply via email to