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:

  1. затмение-birt-javax.wsdl_1.5.1.v201012040544.jar
  2. wsdl4j-1.6.2.jar

Поэтому я удалил ненужный eclipse-birt-javax.wsdl_1.5.1.v201012040544.jar из пути к классам, и тогда это сработало.

Другие вопросы по тегам