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: [email protected]
For additional commands, e-mail: [email protected]