[ 
https://issues.apache.org/jira/browse/AXIS-2909?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16612679#comment-16612679
 ] 

GW Rogde commented on AXIS-2909:
--------------------------------

The suggestion is to take latest 1.4.1-SNAPSHOT, from a successful jenkins 
build in 2017. This is coming from 
http://svn.apache.org/repos/asf/axis/axis1/java/trunk, and to put it short this 
trunk has undergone a lot of changes since 2006 (1.4), and is not officially 
released.
   - added maven support
   - completely restructured into maven modules
   - a lot of different changes, check svn log
veithen (A. Veithen) has done an excellent job within this trunk, and seems to 
be the maintainer.

A better approach, and safer, given you want only to fix  the axis 
ConcurrentModificationException bug, and not introduce more changes than 
needed, can be to take the 1.4 tag, and apply patch on top of that.

https://svn.apache.org/repos/asf/axis/axis1/java/tags/1.4/

patch:
            // Convert to array before sorting to avoid concurrency issues
        OperationDesc[] array = (OperationDesc[])overloads.toArray(
            new OperationDesc[overloads.size()]);


        Arrays.sort(array,
            new Comparator() {
                public int compare(Object o1, Object o2)
                {
                    Method meth1 = ((OperationDesc)o1).getMethod();
                    Method meth2 = ((OperationDesc)o2).getMethod();
                    return (meth1.getParameterTypes().length -
                                         meth2.getParameterTypes().length);
                }
            });

        return array;
    }


btw: AXIS-2875 is also needed, to make it compile with java8.

please note that this will be a time machine experience, as you are back in the 
ant build-script days.
you will also need to incl j2ee-1.4.jar as compile-time lib, but then you are 
ready to bake your own 1.4.1
Maybe we could prepare a 1.4.1 only containing this AXIS-2909 and release, as 
intermediate step.
There are still some legacy axis-1.4, and java8 is all around.

> 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
>            Assignee: Andreas Veithen
>            Priority: Critical
>             Fix For: 1.4.1
>
>         Attachments: axis-concurrent-mod.stack-trace, diff.txt
>
>   Original Estimate: 0h
>  Remaining Estimate: 0h
>
> 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
(v7.6.3#76005)

---------------------------------------------------------------------
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