java - 在 tomcat 下的 web 应用程序中运行 webservice jax-ws 客户端

标签 java web-services jax-ws axis2

在我的案例中,所有服务类都扩展了 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/

相关文章:

Java启动具有受限文件读/写权限的应用程序

java - jni4net c# 与 jni4net java.lang.ClassNotFoundException 中的 java

iOS Prestashop Web 服务出现问题(kCFErrorDomainCFNetwork 错误 -1012。)

web-services - SQL 触发器可以调用 Web 服务吗?

soap - JAXWS 中 SOAP 请求参数的 JAXB 绑定(bind)

jax-ws - 从服务器调用 JAX WS Web 服务,无需 http 或 servlet

java - 使用 java 的 Play Framework 的微服务模板项目

java - 加载 jdbc :odbc driver? 时,Class 类中的 forName() 方法做了什么

android - 将 Android Web 服务连接到本地主机

Android 应用程序在连接到网络服务时崩溃