在我的案例中,所有服务类都扩展了 javax.xml.ws.Service。
但正如我所见,真正的调用是通过引擎盖下的第 3 方库工作的。 在我的例子中,tomcat 使用 Axis2。
首先我应该问,Tomcat 使用什么 jar 来运行网络服务?
其次,有没有办法改变它们?
第三,这个异常是什么意思?它需要在 Tomcat/lib 目录中的另一个 jar 文件?
在尝试调用生成的 Web 服务客户端时得到此堆栈跟踪:
17:23:21 12.05.2010 caused by: java.lang.NoClassDefFoundError: org/apache/axiom/om/OMNode 17:23:21 12.05.2010 at org.apache.axis2.deployment.DescriptionBuilder.buildOM(DescriptionBuilder.java:96) 17:23:21 12.05.2010 at org.apache.axis2.deployment.AxisConfigBuilder.populateConfig(AxisConfigBuilder.java:79) 17:23:21 12.05.2010 at org.apache.axis2.deployment.DeploymentEngine.populateAxisConfiguration(DeploymentEngine.java:615) 17:23:21 12.05.2010 at org.apache.axis2.deployment.FileSystemConfigurator.getAxisConfiguration(FileSystemConfigurator.java:115) 17:23:21 12.05.2010 at org.apache.axis2.context.ConfigurationContextFactory.createConfigurationContext(ConfigurationContextFactory.java:64) 17:23:21 12.05.2010 at org.apache.axis2.context.ConfigurationContextFactory.createConfigurationContextFromFileSystem(ConfigurationContextFactory.java:180) 17:23:21 12.05.2010 at org.apache.axis2.jaxws.ClientConfigurationFactory.getClientConfigurationContext(ClientConfigurationFactory.java:51) 17:23:21 12.05.2010 at org.apache.axis2.jaxws.description.impl.DescriptionFactoryImpl.createServiceDescription(DescriptionFactoryImpl.java:74) 17:23:21 12.05.2010 at org.apache.axis2.jaxws.description.DescriptionFactory.createServiceDescription(DescriptionFactory.java:67) 17:23:21 12.05.2010 at org.apache.axis2.jaxws.spi.ServiceDelegate.(ServiceDelegate.java:84) 17:23:21 12.05.2010 at org.apache.axis2.jaxws.spi.Provider.createServiceDelegate(Provider.java:45) 17:23:21 12.05.2010 at javax.xml.ws.Service.(Service.java:56)
最佳答案
1/Tomcat 没有提供默认的 Web 服务实现。 Axis2要么已经放在你部署在Tomcat中的webapp中,要么直接放在Tomcat的lib目录中。通常不建议使用第二个选项。
假设您有使用 Axis2 1.4 版的 webapp1 和使用 Axis2 1.5 版的 webapp2。 1.4 和 1.5 版本有不同的依赖关系,所以如果你混合依赖关系,你最终会在 Tomcat 启动时遇到类加载错误。
请引用Tomcat documentation about class loading了解更多详情。
2/假设您已将 Axis2 库放置在已部署在 Tomcat 中的 Web 应用程序中。您可以使用 Apache CXF 或 Sun JAX-WS RI 代替 Axis2。
如果您想使用 Sun JAX-WS RI,请确保将所有库及其所有依赖项放入您的 Web 应用程序中。 Tomcat 将使用他在 webapp 上下文中加载的实现。如果 tomcat/lib 有 Axis2 库,它可能会产生类加载问题(参见 1/)。
3/Axis2 1.5 有一些依赖项。您的类路径中似乎缺少库 axiom-api-1.2.8.jar
。
关于java - 在 tomcat 下的 web 应用程序中运行 webservice jax-ws 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2819289/