Hi Dan, Any thoughts on the timing for 2.4.2?
Gary On Jul 27, 2011, at 15:34, "Daniel Kulp" <[email protected]> wrote: > > Just looked at the code.... > > > The JaxWsProxyFactoryBean doesn't have the synchronized flag on the create > method like the one on the superclass does. :-( > > You can likely workaround this by creating your own subclass of > JaxWsProxyFactoryBean that just has a single method of: > > > public synchronized Object create() { > return super.create(); > } > > and using that instead. I'll get this fixes for 2.4.2. > > Dan > > > > > On Tuesday, July 26, 2011 10:17:10 PM Algirdas Veitas wrote: >> OK, we migrated to 2.3.5 and are still using a "client per SOAP call" >> strategy. We are still seeing intermittent issues. We have tried to >> configure our client as a spring bean with scope prototype AND call the >> create() method in our code directly. In both cases, we are getting >> intermittent NPE's in JaxWsProxyFactoryBean, but on different lines. >> Unfortunately, upgrading to 2.4.1 didn't resolve the issue either :( >> >> We have a simple test case that has 2 threads....and here is the stack trace >> when our client in configured as a spring bean (prototype) >> >> 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.lang.NullPointerException >> Index:0, about to call ws >> at >> org.springframework.beans.factory.support.ConstructorResolver.instantiateUsi >> ngFactoryMethod(ConstructorResolver.java:581) at >> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory >> .instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:983) >> at >> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory >> .createBeanInstance(AbstractAutowireCapableBeanFactory.java:879) at >> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory >> .doCreateBean(AbstractAutowireCapableBeanFactory.java:485) at >> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory >> .createBean(AbstractAutowireCapableBeanFactory.java:456) at >> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(Abst >> ractBeanFactory.java:310) at >> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(Abstra >> ctBeanFactory.java:190) at >> com.xHelperImpl.getXService(XServiceHelperImpl.java:203) >> at >> com.helper.XHelperImplTest$ITUserReadOnlyClient.run(ITUserServiceHelperImplT >> est.java:98) 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.lang.NullPointerException >> at >> org.springframework.beans.factory.support.SimpleInstantiationStrategy.instan >> tiate(SimpleInstantiationStrategy.java:157) at >> org.springframework.beans.factory.support.ConstructorResolver.instantiateUsi >> ngFactoryMethod(ConstructorResolver.java:570) ... 10 more >> Caused by: java.lang.NullPointerException >> at >> org.apache.cxf.jaxws.JaxWsProxyFactoryBean.needWrapperClassInterceptor(JaxWs >> ProxyFactoryBean.java:152) at >> org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFactoryBean.java >> :135) at sun.reflect.GeneratedMethodAccessor30.invoke(Unknown Source) at >> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl >> .java:25) at java.lang.reflect.Method.invoke(Method.java:597) >> at >> org.springframework.beans.factory.support.SimpleInstantiationStrategy.instan >> tiate(SimpleInstantiationStrategy.java:145) ... 11 more >> >> >> Here is our configuration.... >> >> <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"/> >> >> >> When we call create() on the proxy factory in our code (and not use a >> prototype scoped bean), we see a similiar error (but not as frequently as >> the above) error: >> >> java.lang.NullPointerException >> at >> org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFactoryBean.java >> :135) at com.xServiceHelperImpl.getXService(XServiceHelperImpl.java:210) at >> com.helper.XHelperImplTest$ITUserReadOnlyClient.run(ITUserServiceHelperImplT >> est.java:98) >> >> >> Al >> >> On Mon, Jul 25, 2011 at 4:49 PM, Daniel Kulp <[email protected]> wrote: >>> 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(AbstractLi >>>>>> st.java: 372) >>>>>> >>>>>> at >>>>>> java.util.AbstractList$Itr.next(AbstractList.java:3 >>>>>> 43) >>>>>> 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(AbstractLi >>>>>> st.java: 372) >>>>>> >>>>>> at >>>>>> java.util.AbstractList$Itr.next(AbstractList.java:3 >>>>>> 43) >>>>>> 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="xServiceProx >>>>>>>> yFactory >>>>>>>> " >>>>>>>> >>>>>>>> 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.BeanCreationExceptio >>>>>>>> n: 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.BeanDefinitionStoreE >>>>>>>> xception >>>>>>>> >>>>>>>> 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.ConstructorR >>>>>>>> esolver. >>>>>>>> instanti >>>>>>>> ateUsingFactoryMethod(ConstructorResolver.java:581) >>>>>>>> >>>>>>>> at >>>>>>>> >>>>>>>> org.springframework.beans.factory.support.AbstractAuto >>>>>>>> wireCapa >>>>>>>> bleBeanF >>>>>>>> actory.instantiateUsingFactoryMethod(AbstractAutowireC >>>>>>>> apableB >>>>>>>> eanFactor y.java:983) >>>>>>>> >>>>>>>> at >>>>>>>> >>>>>>>> org.springframework.beans.factory.support.AbstractAuto >>>>>>>> wireCapa >>>>>>>> bleBeanF >>>>>>>> actory.createBeanInstance(AbstractAutowireCapableBeanF >>>>>>>> actory. >>>>>>>> java:879) >>>>>>>> >>>>>>>> at >>>>>>>> >>>>>>>> org.springframework.beans.factory.support.AbstractAuto >>>>>>>> wireCapa >>>>>>>> bleBeanF >>>>>>>> actory.doCreateBean(AbstractAutowireCapableBeanFactory >>>>>>>> .java:4 >>>>>>>> 85) >>>>>>>> >>>>>>>> at >>>>>>>> >>>>>>>> org.springframework.beans.factory.support.AbstractAuto >>>>>>>> wireCapa >>>>>>>> bleBeanF >>>>>>>> actory.createBean(AbstractAutowireCapableBeanFactory.j >>>>>>>> ava:456 >>>>>>>> ) >>>>>>>> >>>>>>>> at >>>>>>>> >>>>>>>> org.springframework.beans.factory.support.AbstractBean >>>>>>>> Factory. >>>>>>>> doGetBea n(AbstractBeanFactory.java:310) >>>>>>>> >>>>>>>> at >>>>>>>> >>>>>>>> org.springframework.beans.factory.support.AbstractBean >>>>>>>> Factory. >>>>>>>> getBean( AbstractBeanFactory.java:190) >>>>>>>> >>>>>>>> at >>>>>>>> com.XServiceHelperImpl.getXService(xServiceHel >>>>>>>> perImpl. >>>>>>>> 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.BeanDefinitionStoreE >>>>>>>> xception >>>>>>>> >>>>>>>> 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.SimpleInstan >>>>>>>> tiationS >>>>>>>> trategy. >>>>>>>> instantiate(SimpleInstantiationStrategy.java:157) >>>>>>>> >>>>>>>> at >>>>>>>> >>>>>>>> org.springframework.beans.factory.support.ConstructorR >>>>>>>> esolver. >>>>>>>> instanti >>>>>>>> ateUsingFactoryMethod(ConstructorResolver.java:570) >>>>>>>> >>>>>>>> ... 10 more >>>>>>>> >>>>>>>> Caused by: java.util.ConcurrentModificationException >>>>>>>> >>>>>>>> at >>>>>>>> >>>>>>>> java.util.AbstractList$Itr.checkForComodification(Abst >>>>>>>> ractList >>>>>>>> .java:37 2) >>>>>>>> >>>>>>>> at >>>>>>>> java.util.AbstractList$Itr.next(AbstractList.j >>>>>>>> ava:343 >>>>>>>> ) >>>>>>>> >>>>>>>> at >>>>>>>> >>>>>>>> org.apache.cxf.service.factory.ReflectionServiceFactor >>>>>>>> yBean.cr >>>>>>>> eateInpu >>>>>>>> tWrappedMessageParts(ReflectionServiceFactoryBean.java >>>>>>>> :1619) >>>>>>>> >>>>>>>> at >>>>>>>> >>>>>>>> org.apache.cxf.service.factory.ReflectionServiceFactor >>>>>>>> yBean.cr >>>>>>>> eateOper ation(ReflectionServiceFactoryBean.java:934) >>>>>>>> >>>>>>>> at >>>>>>>> >>>>>>>> org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.c >>>>>>>> reateOpe >>>>>>>> ration(J axWsServiceFactoryBean.java:616) >>>>>>>> >>>>>>>> at >>>>>>>> >>>>>>>> org.apache.cxf.service.factory.ReflectionServiceFactor >>>>>>>> yBean.cr >>>>>>>> eateInte rface(ReflectionServiceFactoryBean.java:907) >>>>>>>> >>>>>>>> at >>>>>>>> >>>>>>>> org.apache.cxf.service.factory.ReflectionServiceFactor >>>>>>>> yBean.bu >>>>>>>> ildServi >>>>>>>> ceFromClass(ReflectionServiceFactoryBean.java:433) >>>>>>>> >>>>>>>> at >>>>>>>> >>>>>>>> org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.b >>>>>>>> uildServ >>>>>>>> iceFromC lass(JaxWsServiceFactoryBean.java:680) >>>>>>>> >>>>>>>> at >>>>>>>> >>>>>>>> org.apache.cxf.service.factory.ReflectionServiceFactor >>>>>>>> yBean.in >>>>>>>> itialize >>>>>>>> ServiceModel(ReflectionServiceFactoryBean.java:505) >>>>>>>> >>>>>>>> at >>>>>>>> >>>>>>>> org.apache.cxf.service.factory.ReflectionServiceFactor >>>>>>>> yBean.cr >>>>>>>> eate(Ref lectionServiceFactoryBean.java:242) >>>>>>>> >>>>>>>> at >>>>>>>> >>>>>>>> org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.c >>>>>>>> reate(Ja >>>>>>>> xWsServi ceFactoryBean.java:202) >>>>>>>> >>>>>>>> at >>>>>>>> >>>>>>>> org.apache.cxf.frontend.AbstractWSDLBasedEndpointFacto >>>>>>>> ry.creat >>>>>>>> eEndpoin t(AbstractWSDLBasedEndpointFactory.java:101) >>>>>>>> >>>>>>>> at >>>>>>>> >>>>>>>> org.apache.cxf.frontend.ClientFactoryBean.create(Clien >>>>>>>> tFactory >>>>>>>> Bean.jav a:90) >>>>>>>> >>>>>>>> at >>>>>>>> >>>>>>>> org.apache.cxf.frontend.ClientProxyFactoryBean.create( >>>>>>>> ClientPr >>>>>>>> oxyFacto ryBean.java:117) >>>>>>>> >>>>>>>> at >>>>>>>> >>>>>>>> org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxW >>>>>>>> sProxyFa >>>>>>>> ctoryBea n.java:124) >>>>>>>> >>>>>>>> at >>>>>>>> sun.reflect.NativeMethodAccessorImpl.invoke0( >>>>>>>> Native >>>>>>>> Method) >>>>>>>> at >>>>>>>> >>>>>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMeth >>>>>>>> odAccess >>>>>>>> orImpl.j ava:39) >>>>>>>> >>>>>>>> at >>>>>>>> >>>>>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(Delega >>>>>>>> tingMeth >>>>>>>> odAccess orImpl.java:25) >>>>>>>> >>>>>>>> at >>>>>>>> java.lang.reflect.Method.invoke(Method.java:5 >>>>>>>> 97) >>>>>>>> at >>>>>>>> >>>>>>>> org.springframework.beans.factory.support.SimpleInstan >>>>>>>> tiationS >>>>>>>> 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.HEADE >>>>>>>>>> R_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-HowcanIaddsoapheaderst >>>>>>>>> otherequ >>>>>>>>> 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.XS >>>>>>>>>>>>> ervice" >>>>>>>>>>>>> address="#xServiceUr >>>>>>>>>>>>> l" > >>>>>>>>>>>>> >>>>>>>>>>>>> <jaxws:properties> >>>>>>>>>>>>> >>>>>>>>>>>>> <entry >>>>>>>>>>>>> key="thread.lo >>>>>>>>>>>>> cal.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(H >>>>>>>>>>>>> eader.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-276 >>>>>>>>> 2-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="co >>>>>>>>>>>>>> m.XServi >>>>>>>>>>>>>> ce" >>>>>>>>>>>>>> address="#xServi >>>>>>>>>>>>>> ceUrl" >>>>>>>>>>>>>> /> >>>>>>>>>>>>>> >>>>>>>>>>>>>> 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.ConcurrentModification >>>>>>>>>>>>>> Exceptio >>>>>>>>>>>>>> n >>>>>>>>>>>>>> at >>>>>>>>> >>>>>>>>> java.util.AbstractList$Itr.checkForComodification(Ab >>>>>>>>> stractLi >>>>>>>>> st.java: 372) >>>>>>>>> >>>>>>>>>>>>>> at >>>>>>>>>>>>>> java.util.AbstractList$Itr.next( >>>>>>>>>>>>>> Abstract >>>>>>>>>>>>>> List.ja >>>>>>>>>>>>>> va:343) >>>>>>>>>>>>>> at >>>>>>>>> >>>>>>>>> org.apache.cxf.binding.soap.interceptor.SoapOutInter >>>>>>>>> ceptor.w >>>>>>>>> riteSoap Enve >>>>>>>>> >>>>>>>>>>>>> lope >>>>>>>>>>>>> >>>>>>>>>>>>>> Start(SoapOutInterceptor.java:13 >>>>>>>>>>>>>> 9) at >>>>>>>>> >>>>>>>>> org.apache.cxf.binding.soap.interceptor.SoapOutInter >>>>>>>>> ceptor.h >>>>>>>>> andleMes sage >>>>>>>>> >>>>>>>>>>>>> (Soa >>>>>>>>>>>>> >>>>>>>>>>>>>> pOutInterceptor.java:81) at >>>>>>>>> >>>>>>>>> org.apache.cxf.binding.soap.interceptor.SoapOutInter >>>>>>>>> ceptor.h >>>>>>>>> andleMes sage >>>>>>>>> >>>>>>>>>>>>> (Soa >>>>>>>>>>>>> >>>>>>>>>>>>>> pOutInterceptor.java:61) at >>>>>>>>> >>>>>>>>> org.apache.cxf.phase.PhaseInterceptorChain.doInterce >>>>>>>>> pt(Phase >>>>>>>>> Intercep torC >>>>>>>>> >>>>>>>>>>>>> hain >>>>>>>>>>>>> >>>>>>>>>>>>>> .java:255) at >>>>>>>>>>>>> >>>>>>>>>>>>> org.apache.cxf.endpoint.ClientImpl.i >>>>>>>>>>>>> nvoke(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#F >>>>>>>>>>>>>> AQ-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 > -- > Daniel Kulp > [email protected] > http://dankulp.com/blog > Talend - http://www.talend.com
