Клиент AXIS 1.4 с JDK 8 предоставляет org.apache.axis.AxisFault: java.util.ConcurrentModificationException - PullRequest
0 голосов
/ 07 сентября 2018

Я использую клиент AXIS (1.4) для вызова веб-сервисов SOAP, а версия JDK - 8. Получение следующих случайных ошибок для некоторых вызовов сервисов SOAP. Это происходит для 5-10 запросов из 1000 запросов в условиях нагрузки.

Caused by: org.apache.axis.AxisFault: java.util.ConcurrentModificationException
at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:223) ~[axis-1.4.jar:na]
at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:130) ~[axis-1.4.jar:na]
at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1104) ~[axis-1.4.jar:na]
at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source) ~[na:na]
at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source) ~[na:na]
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source) ~[na:na]
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) ~[na:na]
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) ~[na:na]
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) ~[na:na]
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) ~[na:na]
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) ~[na:na]
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) ~[na:na]
at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:241) ~[axis-1.4.jar:na]
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696) ~[axis-1.4.jar:na]
at org.apache.axis.Message.getSOAPEnvelope(Message.java:435) ~[axis-1.4.jar:na]
at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62) ~[axis-1.4.jar:na]
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206) ~[axis-1.4.jar:na]
at org.apache.axis.client.Call.invokeEngine(Call.java:2782) ~[axis-1.4.jar:na]
at org.apache.axis.client.Call.invoke(Call.java:2765) ~[axis-1.4.jar:na]
at org.apache.axis.client.Call.invoke(Call.java:2443) ~[axis-1.4.jar:na]
at org.apache.axis.client.Call.invoke(Call.java:2366) ~[axis-1.4.jar:na]
at org.apache.axis.client.Call.invoke(Call.java:1812) ~[axis-1.4.jar:na]
at com.te.prodirectory.services.client.PaymentWSSoapBindingStub.validateVamPayment(PaymentWSSoapBindingStub.java:423) ~[directory-qe-client-3.2.0-VAM2-RC24.jar:3.2.0-VAM2-RC24]
at com.te.prodirectory.services.payment.PaymentServiceWsImpl.validateVamPayment(PaymentServiceWsImpl.java:34) ~[directory-qe-client-3.2.0-VAM2-RC24.jar:3.2.0-VAM2-RC24]
... 37 common frames omitted

ПРИМЕЧАНИЕ. Когда мы использовали один и тот же клиент AXIS с JDK 7, эта проблема вообще не возникала.

Я пытался найти похожую проблему AXIS с JDK 8, есть некоторые проблемы с совместимостью, но они не похожи на те, с которыми я сталкиваюсь в настоящее время.

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Согласитесь, что https://issues.apache.org/jira/browse/AXIS-2909, кажется, проблема. Возвращение к jdk7 обычно не вариант.

В AXIS-2909 предлагается взять последнюю версию 1.4.1-SNAPSHOT из успешной сборки jenkins в 2017 году. Это исходит от http://svn.apache.org/repos/asf/axis/axis1/java/trunk,, и, короче говоря, этот ствол претерпел множество изменений. с 2006 года (1.4) и официально не выпускается. - добавлена ​​поддержка maven - полностью перестроен в maven модули - много разных изменений, проверьте svn log

Вейтен (A. Veithen) проделал отличную работу в этом сундуке и, похоже, является сопровождающим.

Лучший подход и более безопасный, если вы хотите только исправить ошибку ConcurrentModificationException оси и не вносить больше изменений, чем необходимо, может заключаться в том, чтобы взять тег 1.4 и применить к нему патч.

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

патч:

   // 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;
}

Кстати: AXIS-2875 также необходим для компиляции с java8.

обратите внимание, что это будет машина времени, так как вы вернулись во времена ant build-script. вам также нужно будет включить j2ee-1.4.jar в качестве библиотеки времени компиляции. но тогда вам пора идти, и вы можете испечь свой собственный 1.4.1, содержащий 1.4 + AXIS-2909

0 голосов
/ 12 сентября 2018

Кажется, вы наткнулись на эту ошибку.

Вам следует перейти на 1.4.1 или вернуться к JDK7.

Другой вариант может заключаться в том, чтобы применить упомянутое исправление в прикрепленном файле diff.txt и создать исправленную версию axis-rt-core (см. Diff.txt).

...