1

我遇到了一个场景,我必须让一个基于 Axis2 的 ws 消费者在 WebMethods 中作为 Java 服务工作。我首先在 netbeans 中实现了 ws 消费者,只是为了看看它是否有效,因此我发现我需要的最少 jar 数量如下:

[xmlschema-1.4.7.jar,apache-mime4j-core-0.7.2.jar,axiom-api-1.2.13.jar,axiom-impl-1.2.13.jar,axis2-adb-1.6.2.jar ,axis2-kernel-1.6.2.jar,axis2-transport-http-1.6.2.jar,axis2-transport-local-1.6.2.jar,commons-codec-1.3.jar,commons-httpclient-3.1.jar , commons-logging-1.1.1.jar, httpcore-4.0.jar, mail-1.4.jar, neethi-3.0.2.jar, wsdl4j-1.6.2.jar ]

我已经在 IS/packages/{package_name}/code/jars 文件夹下上传了这些 jar 文件。每当我尝试执行将发送请求并处理响应的 java 服务时,我都会收到以下异常:

java.lang.reflect.InvocationTargetException:org.apache.axiom.om.OMFactory.getMetaFactory()Lorg/apache/axiom/om/OMMetaFactory;

从IS错误日志文件中我发现实际的错误信息如下:

org.apache.axiom.om.OMFactory.getMetaFactory()Lorg/apache/axiom/om/OMMetaFactory; 引起:java.lang.reflect.InvocationTargetException: null 引起:java.lang.NoSuchMethodError:org.apache.axiom.om.OMFactory.getMetaFactory()Lorg/apache/axiom/om/OMMetaFactory;

平台为Linux环境下的WebMethods 8.2。JDK版本为1.6.0_32,WebMethods下的应用服务器为Jetty。

4

1 回答 1

1

实际上这个问题的解决有点棘手。首先,我必须手动在 IS 服务器上配置包的清单文件以使用包 abnd 中提供的 jar,这样它就不会与 IS 本身使用的 Axis 冲突。另一方面,我不得不手动添加 ClassLoader,因为 WebMethods 似乎无法使用来自 jar 文件的基于 META-INF 的信息。要解决此问题,只需使用:

System.setProperty("org.apache.axiom.om.OMMetaFactory", "org.apache.axiom.om.impl.llom.factory.OMLinkedListMetaFactory");

这解决了所有的问题。

于 2014-01-27T09:11:22.737 回答