NoSuchMethodError WSDLReader.readWSDL в JBPM WorkItemHandler
Я работаю с JBPM 5.4 и использую доступные службы консоли-сервера для управления рабочим процессом процессов.
Я также успешно протестировал фиктивный WorkItemHandler, который просто получает 2 значения и возвращает их сумму, просто чтобы увидеть, как работает простой процесс. Это было хорошо.
Однако, когда я тестировал WorkItemHandler для вызова внешней веб-службы, появилась следующая ошибка:
Caused by: java.lang.NoSuchMethodError: javax.wsdl.xml.WSDLReader.readWSDL(Ljavax/wsdl/xml/WSDLLocator;Lorg/w3c/dom/Element;)Ljavax/wsdl/Definition;
at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:237) [cxf-rt-core-2.4.4.jar:2.4.4]
at org.apache.cxf.wsdl11.WSDLManagerImpl.getDefinition(WSDLManagerImpl.java:186) [cxf-rt-core-2.4.4.jar:2.4.4]
Что я сделал:
Я использовал cxf-codegen-plugin версии 2.4.4 (который является той же версией cxf в lib из console-server.war) для генерации java-кода из wsdl.
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>2.4.4</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>${project.build.directory}/generated/cxf</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/resources/wsdl/adm/exampleService.wsdl</wsdl>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
Код генерируется просто отлично.
Я скопировал jar-файл рабочего элемента в папку lib проекта console-server, как я делал это ранее с фиктивным WorkItemHandler.
Я также проверил версии cxf(2.4.4) и wsdl4j(1.6.2) внутри папки de lib проекта console-server. Фактически, WSDLReader содержит "отсутствующий" метод в этой версии js-файла wsdl4j.
Где я:
Я понимаю, что так или иначе класс назвал это не от той версии, но я не могу вообразить, как это происходит.
Кто-нибудь знает, что делать?
Я использую jboss, который идет с установщиком jbpm, я ничего не изменил.
Спасибо!
4 ответа
Я нашел проблему. Я документирую здесь на случай, если кто-то наткнется на это в будущем:
JBPM 5.4 - Проект gwt-console-server.war Внутри папки lib есть два jar-файла: wsdl4j.jar и javax.wsdl_1.5.1.v201012040544.jar.
У них те же классы, но внутри второго фляги, поскольку это другая версия, у класса нет требуемого метода.
Итак, я просто удалил эту банку. Я полагаю, что для них обоих было ошибкой быть вместе, но если кто-то знает причину, и я столкнусь с другим вопросом, пожалуйста, дайте мне знать. На данный момент, это решает проблему.
Так или иначе, спасибо всем за внимание, я боролся с этим некоторое время.
С уважением.
Я предполагаю, что если у вас есть jar с правильной версией WSDLReader в вашем classpath, то у вас может быть другой jar в вашем classpath, который также содержит (неправильную) версию того же класса. Обратите внимание, что это может быть в вашей собственной войне, но, например, также в папке lib сервера и т. Д.
Вы также можете исключить зависимость wsdl4j.jar в своем файле pom.
<dependency>
<groupId>axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
<type>jar</type>
<exclusions>
<exclusion>
<groupId>axis</groupId>
<artifactId>axis-wsdl4j</artifactId>
</exclusion>
</exclusions>
</dependency>
Это происходит, когда один и тот же класс находится в двух файлах jar. Вы можете проверить то же самое в своей локальной рабочей области, чтобы узнать, в каких файлах jar присутствует класс «javax.wsdl.xml.WSDLReader». Затем сохраните только соответствующий файл jar в своем пути к классам. В моем случае этот файл присутствовал в приведенных ниже двух файлах jar:
- затмение-birt-javax.wsdl_1.5.1.v201012040544.jar
- wsdl4j-1.6.2.jar
Поэтому я удалил ненужный eclipse-birt-javax.wsdl_1.5.1.v201012040544.jar из пути к классам, и тогда это сработало.