我正在使用JBPM 5.4并使用可用的控制台 - 服务器休息服务来管理流程的工作流程。
我还成功测试了一个假的WorkItemHandler,它只获取2个值并返回它们的总和,只是为了看到一个简单的过程正常工作。 那很好。
但是,当我测试 WorkItemHandler来调用外部Web服务时,出现以下错误:
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 (在控制台-server.war的lib中使用相同版本的cxf)来生成来自wsdl的java代码。
<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文件复制到console-server项目的lib文件夹中,就像我之前使用虚拟WorkItemHandler一样。
我还检查了console-server项目的de lib文件夹中的cxf(2.4.4)和wsdl4j(1.6.2)版本。实际上,WSDLReader在wsdl4j的jar版本中包含“missing”方法。
我在哪里:
据我所知,这个类叫它不是来自那个版本,但我无法想象会发生这种情况。
任何人都知道该怎么做?
我正在使用jbpm安装程序附带的jboss,我什么都没改变。
谢谢!
答案 0 :(得分:5)
我发现了问题。我将在此记录,以防将来有人偶然发现:
JBPM 5.4 - 项目gwt-console-server.war 在lib文件夹里面有这两个罐子: wsdl4j.jar和javax.wsdl_1.5.1.v201012040544.jar。
它们具有相同的类,但在第二个jar中,因为它是另一个版本,所以该类没有所需的方法。
所以,我只是删除那个罐子。我想他们俩在一起是错误的,但是如果有人知道某个原因,我会进一步讨论另一个问题,请告诉我。现在,它解决了这个问题。
无论如何,感谢所有人的关注,我一直在苦苦挣扎。
问候。
答案 1 :(得分:0)
我猜想,如果你的类路径中有一个带有正确版本的WSDLReader的jar,那么你的类路径中可能还有另一个jar,它也包含同一个类的(不正确)版本。请注意,这可能在您自己的战争中,但例如也在服务器lib文件夹等。
答案 2 :(得分:0)
您还可以在pom文件中排除wsdl4j.jar依赖项。
<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>
答案 3 :(得分:0)
这是因为在两个 jar 文件中发现了相同的类。您可以在本地工作区中检查相同内容以查找存在哪些 jar 文件“javax.wsdl.xml.WSDLReader”类。然后在您的类路径中只保留相关的 jar 文件。 在我的情况下,此文件存在于以下两个 jar 文件中:
因此,我从类路径中删除了不相关的 eclipse-birt-javax.wsdl_1.5.1.v201012040544.jar,然后它就起作用了。