阿帕奇 axis2/axiom NoSuchMethodError

Apache axis2/axiom NoSuchMethodError

将 RAD v7 与 WebSphere AS v6.1 结合使用,我收到以下信息;

java.lang.NoSuchMethodError: org/apache/axiom/om/OMAbstractFactory.getMetaFactory()Lorg/apache/axiom/om/OMMetaFactory;

其他答案 (here and here) 表明这是由于 jars 冲突造成的。我已经安装了最新的 RAD/WS 修复包,确保我只使用一个版本的 axis2 (v1.6.2) 和 axiom-api (v1.2.13),多次清理并构建我的工作区,并且确保部署了正确的罐子。我还尝试将 WAS class 加载程序策略设置为 "parent last".

我的问题:除了 jar 版本冲突之外,是否还有其他原因会导致此问题?

更长的错误:

WebApp E [Servlet Error]-[EOEServlet]: java.lang.NoSuchMethodError: org/apache/axiom/om/OMAbstractFactory.getMetaFactory()Lorg/apache/axiom/om/OMMetaFactory; at org.apache.axiom.om.OMXMLBuilderFactory.createOMBuilder(OMXMLBuilderFactory.java:150) at org.apache.axiom.om.OMXMLBuilderFactory.createOMBuilder(OMXMLBuilderFactory.java:133) at org.apache.axiom.om.OMXMLBuilderFactory.createOMBuilder(OMXMLBuilderFactory.java:104) at org.apache.axis2.util.XMLUtils.toOM(XMLUtils.java:590) at org.apache.axis2.util.XMLUtils.toOM(XMLUtils.java:575) at org.apache.axis2.deployment.DescriptionBuilder.buildOM(DescriptionBuilder.java:97) at org.apache.axis2.deployment.AxisConfigBuilder.populateConfig(AxisConfigBuilder.java:90) at org.apache.axis2.deployment.DeploymentEngine.populateAxisConfiguration(DeploymentEngine.java:857) at org.apache.axis2.deployment.FileSystemConfigurator.getAxisConfiguration(FileSystemConfigurator.java:116) at org.apache.axis2.context.ConfigurationContextFactory.createConfigurationContext(ConfigurationContextFactory.java:64) at org.apache.axis2.context.ConfigurationContextFactory.createConfigurationContextFromFileSystem(ConfigurationContextFactory.java:210) at org.apache.axis2.client.ServiceClient.configureServiceClient(ServiceClient.java:151) at org.apache.axis2.client.ServiceClient.(ServiceClient.java:144)

不管它的价值如何,Axiom v1.2.13 确实是与 Axis2 v1.6.2 一起使用的正确版本。

我有 WAS 8.5(相对于你的 6.1),我很久以前就停止使用 RAD Developer(我通常可以用 Eclipse 完成我 want/need 的所有事情)。

但您可能想查看 WAS class 加载程序查看器以确定您的应用程序是否实际加载了正确的 .jars:

http://weblogic-wonders.com/weblogic/2012/12/18/troubleshooting-classloader-issues-with-websphere/

Axis2 和 Axiom 是 7.0 版及更高版本以及安装了 Web 服务功能包的 6.1 版 WebSphere 运行时的一部分。它们在 WebSphere 中提供 JAX-WS 实现,并且它们的 classes 对应用程序可见。这会导致与打包这些库的自己版本的应用程序发生冲突。要解决此问题,您需要将 class 加载器策略切换到父级最后。

请注意,在某些情况下这可能还不够,您需要按照此处所述进行一些额外更改:

https://axis.apache.org/axis2/java/core/docs/app_server.html

如其他答案所述,它与 web-sphere 轴库冲突。使用 Axis2 jar 创建共享库并将它们与 EAR 相关联为我工作。 Steps for creating shared library

同意这里的大部分帖子。我们所做的是在我们的库中明确添加 axis2 (1.6.2) jar 并重新部署。这解决了问题。