Kim Albertsson created AXIS-2909:
------------------------------------

             Summary: ConcurrentModificationException when running under Java 
1.8.0_20 or later
                 Key: AXIS-2909
                 URL: https://issues.apache.org/jira/browse/AXIS-2909
             Project: Axis
          Issue Type: Bug
          Components: Serialization/Deserialization
    Affects Versions: 1.4
         Environment: java full version "1.8.0_20-b26"
            Reporter: Kim Albertsson
             Fix For: 1.4.1


Java 8u20 introduced a change in how Collections.sort is implemented. See 
http://bugs.java.com/view_bug.do?bug_id=8032636 and 
http://bugs.java.com/view_bug.do?bug_id=8030848.

The sorting is now deferred to the specific list implementation which can 
operate directly on the underlying data structure without making a defensive 
copy beforehand. This can cause a java.util.ConcurrentModificationException to 
occur. 

The error can be reproduced by compiling axis-1.4.1-SNAPSHOT using java 
1.8.0_20 or later and running the maven test suite (mvn test). The error does 
not manifest every single run, but I have never had to run the tests more than 
3 times to reproduce. The test that fails is 
test.concurrency.TestApplicationScope.

The issue originates in 
org.apache.axis.description.JavaServiceDesc.getOperationsByQName where an 
unsynchronized call to Collections.sort is made. Synchronizing over the sorted 
array resolves the issue.

A working patch that has been tested in the test suite is appended in diff.txt.

The stack trace from the axis test-suite is appended below. Do note however 
that this stack trace does not show the actual error (The original error is 
caught and rethrown). To get the stack trace where the Collections.sort call is 
made you can run the specific test and attach the jdb configured to catch all 
java.util.ConcurrentModificationExceptions.

The stack trace from my jdb session is appended as 
axis-concurrent-mod.stack-trace. It was generated from an apache tomcat 
instance running a webservice relying on axis.

AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
 faultSubcode: 
 faultString: java.util.ConcurrentModificationException
 faultActor: 
 faultNode: 
 faultDetail: 
        
{http://xml.apache.org/axis/}stackTrace:java.util.ConcurrentModificationException
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at 
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
        at java.lang.Class.newInstance(Class.java:442)
        at 
org.apache.axis.encoding.ser.BeanDeserializer.<init>(BeanDeserializer.java:104)
        at 
org.apache.axis.encoding.ser.BeanDeserializerFactory.getGeneralPurpose(BeanDeserializerFactory.java:89)
        at 
org.apache.axis.encoding.ser.BaseDeserializerFactory.getDeserializerAs(BaseDeserializerFactory.java:89)
        at 
org.apache.axis.encoding.DeserializationContext.getDeserializer(DeserializationContext.java:484)
        at 
org.apache.axis.encoding.DeserializationContext.getDeserializerForType(DeserializationContext.java:567)
        at 
org.apache.axis.message.SOAPFaultDetailsBuilder.onStartChild(SOAPFaultDetailsBuilder.java:157)
        at 
org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1052)
        at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown 
Source)
        at 
org.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement(Unknown Source)
        at 
org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
        at 
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown
 Source)
        at 
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown 
Source)
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
        at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
        at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
        at 
org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:241)
        at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
        at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
        at 
org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
        at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
        at org.apache.axis.client.Call.invokeEngine(Call.java:2782)
        at org.apache.axis.client.Call.invoke(Call.java:2765)
        at org.apache.axis.client.Call.invoke(Call.java:2443)
        at org.apache.axis.client.Call.invoke(Call.java:2366)
        at org.apache.axis.client.Call.invoke(Call.java:2391)
        at 
test.concurrency.TestApplicationScope$TestRunnable.run(TestApplicationScope.java:80)
        at java.lang.Thread.run(Thread.java:745)



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscr...@axis.apache.org
For additional commands, e-mail: java-dev-h...@axis.apache.org

Reply via email to