[ http://jira.codehaus.org/browse/XFIRE-773?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_91896 ]
Webb Morris commented on XFIRE-773: ----------------------------------- My colleague, Qi Zheng, found the offending code. We sychronized the initialize method on the BeanTypeInfo class and the error no longer occurs. We were able to consistently reproduce the error by restarting our service and then hitting it with several concurrent requests. Here is the changed method: {code:title=BeanTypeInfo.java|borderStyle=solid} public synchronized void initialize() { try { if (!isInitialized()) { for (int i = 0; i < descriptors.length; i++) { // Don't map the property unless there is a read property if (isMapped(descriptors[i])) { mapProperty(descriptors[i]); } } } } catch (Exception e) { if (e instanceof XFireRuntimeException) throw (XFireRuntimeException) e; throw new XFireRuntimeException("Couldn't create TypeInfo.", e); } setInitialized(true); } {code} I have attached the source file to the issue. > Bug with concurrent soap requests and aegis > ------------------------------------------- > > Key: XFIRE-773 > URL: http://jira.codehaus.org/browse/XFIRE-773 > Project: XFire > Issue Type: Bug > Components: Aegis Module > Affects Versions: 1.2.2 > Environment: win xp, jdk-1.5.0_06, apache-tomcat-5.5.17, > spring-1.2.6, httpclient-3.0.1 > Reporter: Jose Dillet > Assigned To: Dan Diephouse > Attachments: BeanTypeInfo.java, testWS.war, WS Test.jmx > > > I'm getting some problems when I launch some concurrent requests to a web > service made using xfire and spring. > I have a simple service (MyService) with a method (testService) that returns > an object (MyObject). > I test it launching some concurrent requests using JMeter (jmeter -n -t "WS > Test.jmx"). > With this test, sometime I get the following exception: > 2006-11-22 17:53:16,078 ERROR > [org.codehaus.xfire.handler.DefaultFaultHandler] Fault occurred! > java.util.ConcurrentModificationException > at > java.util.AbstractList$Itr.checkForComodification(AbstractList.java:449) > at java.util.AbstractList$Itr.next(AbstractList.java:420) > at > org.codehaus.xfire.aegis.type.basic.BeanType.writeObject(BeanType.java:394) > at > org.codehaus.xfire.aegis.AegisBindingProvider.writeParameter(AegisBindingProvider.java:200) > at > org.codehaus.xfire.service.binding.AbstractBinding.writeParameter(AbstractBinding.java:273) > at > org.codehaus.xfire.service.binding.WrappedBinding.writeMessage(WrappedBinding.java:89) > at > org.codehaus.xfire.soap.SoapSerializer.writeMessage(SoapSerializer.java:80) > at > org.codehaus.xfire.transport.http.HttpChannel.writeWithoutAttachments(HttpChannel.java:56) > at > org.codehaus.xfire.transport.http.XFireServletChannel.sendViaServlet(XFireServletChannel.java:85) > at > org.codehaus.xfire.transport.http.XFireServletChannel.send(XFireServletChannel.java:44) > at > org.codehaus.xfire.handler.OutMessageSender.invoke(OutMessageSender.java:26) > at > org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131) > at > org.codehaus.xfire.service.binding.PostInvocationHandler.invoke(PostInvocationHandler.java:36) > at > org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131) > at > org.codehaus.xfire.transport.DefaultEndpoint.onReceive(DefaultEndpoint.java:64) > at > org.codehaus.xfire.transport.AbstractChannel.receive(AbstractChannel.java:38) > at > org.codehaus.xfire.transport.http.XFireServletController.invoke(XFireServletController.java:301) > at > org.codehaus.xfire.transport.http.XFireServletController.doService(XFireServletController.java:130) > at > org.codehaus.xfire.transport.http.XFireServlet.doPost(XFireServlet.java:116) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:709) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) > at > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) > at > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) > at > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) > at > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) > at > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) > at > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) > at > org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869) > at > org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664) > at > org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) > at > org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) > at > org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) > at java.lang.Thread.run(Thread.java:595) > or, sometimes I get this other exception: > Fault occurred! > org.codehaus.xfire.XFireRuntimeException: Couldn't get property null from > bean [EMAIL PROTECTED] Nested exception is java.lang.NullPointerException: > null > java.lang.NullPointerException > at > org.codehaus.xfire.aegis.type.basic.BeanType.readProperty(BeanType.java:461) > at > org.codehaus.xfire.aegis.type.basic.BeanType.writeObject(BeanType.java:402) > at > org.codehaus.xfire.aegis.AegisBindingProvider.writeParameter(AegisBindingProvider.java:200) > at > org.codehaus.xfire.service.binding.AbstractBinding.writeParameter(AbstractBinding.java:273) > at > org.codehaus.xfire.service.binding.WrappedBinding.writeMessage(WrappedBinding.java:89) > at > org.codehaus.xfire.soap.SoapSerializer.writeMessage(SoapSerializer.java:80) > at > org.codehaus.xfire.transport.http.HttpChannel.writeWithoutAttachments(HttpChannel.java:56) > at > org.codehaus.xfire.transport.http.XFireServletChannel.sendViaServlet(XFireServletChannel.java:85) > at > org.codehaus.xfire.transport.http.XFireServletChannel.send(XFireServletChannel.java:44) > at > org.codehaus.xfire.handler.OutMessageSender.invoke(OutMessageSender.java:26) > at > org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131) > at > org.codehaus.xfire.service.binding.PostInvocationHandler.invoke(PostInvocationHandler.java:36) > at > org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131) > at > org.codehaus.xfire.transport.DefaultEndpoint.onReceive(DefaultEndpoint.java:64) > at > org.codehaus.xfire.transport.AbstractChannel.receive(AbstractChannel.java:38) > at > org.codehaus.xfire.transport.http.XFireServletController.invoke(XFireServletController.java:301) > at > org.codehaus.xfire.transport.http.XFireServletController.doService(XFireServletController.java:130) > at > org.codehaus.xfire.transport.http.XFireServlet.doPost(XFireServlet.java:116) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:709) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) > at > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) > at > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) > at > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) > at > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) > at > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) > at > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) > at > org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869) > at > org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664) > at > org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) > at > org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) > at > org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) > at java.lang.Thread.run(Thread.java:595) > and sometimes it ends without any exception. Also, when I get an exception, > and I try to access to wsdl file, sometimes I get another exception, or > sometimes the definition of the object MyObject returned is wrong, because > every field is repeated many times. > I guess that problem is related to aegis configuration, because if I delete > file MyObject.aegis.xml, then I never get these errors. Unfortunately, not > all executions end with an exception, but launching it several times leads to > finally get some of these exceptions. > In testService I have added a sleep, to slow the execution of the method. In > my real project, there is no sleep, but my service method is heavier, so I > put the sleep to emulate the behaviour of my real service. > I attach a war with a complete test application, a a jmx file to test the > application with JMeter (launching 30 concurrent threads) > Hope you can reproduce the bug. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://jira.codehaus.org/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe from this list please visit: http://xircles.codehaus.org/manage_email