【问题标题】:run webservice jax-ws client in a web app under tomcat在tomcat下的Web应用程序中运行webservice jax-ws客户端
【发布时间】:2011-02-18 15:26:22
【问题描述】:

在我的例子中,所有服务类都扩展了 javax.xml.ws.Service。

但我看到的真正调用是通过 3-rd 方库在引擎盖下工作的。 在我的例子中,tomcat 使用 Axis2。

首先我要问,Tomcat 使用什么 jars 来运行 Web 服务

第二,有没有办法改变它们?

第三,这个异常是什么意思?它需要在 Tomcat/lib 目录中的另一个 jar 文件

在尝试调用生成的 Web 服务客户端时得到此堆栈跟踪:

17:23:21 12.05.2010 引起:java.lang.NoClassDefFoundError: org/apache/axiom/om/OMNode 17:23:21 12.05.2010 在 org.apache.axis2.deployment.DescriptionBuilder.buildOM(DescriptionBuilder.java:96) 17:23:21 12.05.2010 在 org.apache.axis2.deployment.AxisConfigBuilder.populateConfig(AxisConfigBuilder.java:79) 17:23:21 12.05.2010 在 org.apache.axis2.deployment.DeploymentEngine.populateAxisConfiguration(DeploymentEngine.java:615) 17:23:21 12.05.2010 在 org.apache.axis2.deployment.FileSystemConfigurator.getAxisConfiguration(FileSystemConfigurator.java:115) 17:23:21 12.05.2010 在 org.apache.axis2.context.ConfigurationContextFactory.createConfigurationContext(ConfigurationContextFactory.java:64) 17:23:21 12.05.2010 在 org.apache.axis2.context.ConfigurationContextFactory.createConfigurationContextFromFileSystem(ConfigurationContextFactory.java:180) 17:23:21 12.05.2010 在 org.apache.axis2.jaxws.ClientConfigurationFactory.getClientConfigurationContext(ClientConfigurationFactory.java:51) 17:23:21 12.05.2010 在 org.apache.axis2.jaxws.description.impl.DescriptionFactoryImpl.createServiceDescription(DescriptionFactoryImpl.java:74) 17:23:21 12.05.2010 在 org.apache.axis2.jaxws.description.DescriptionFactory.createServiceDescription(DescriptionFactory.java:67) 17:23:21 12.05.2010 在 org.apache.axis2.jaxws.spi.ServiceDelegate.(ServiceDelegate.java:84) 17:23:21 12.05.2010 在 org.apache.axis2.jaxws.spi.Provider.createServiceDelegate(Provider.java:45) 17:23:21 12.05.2010 在 javax.xml.ws.Service.(Service.java:56)

【问题讨论】:

    标签: java web-services jax-ws axis2


    【解决方案1】:

    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,请确保将所有库及其所有依赖项放在您的 webapp 中。 Tomcat 将使用他在 webapp 上下文中加载的实现。如果 tomcat/lib 有 Axis2 库,它可能会产生类加载问题(参见 1/)。

    3/ Axis2 1.5 有一些依赖项。您的类路径中似乎缺少库 axiom-api-1.2.8.jar

    【讨论】:

    • 你能解释一下 1) 为什么不建议将axis2放到tomcat/lib中,2) 我应该把多少个jars直接放在战争档案中使用让我们说SUN JAX -WS RI ?如果我把它们投入战争的话,虽然 Tomcat 不包含任何已安装的 JAX-WS 环境,但它仍然会使用所需的实现吗?
    猜你喜欢
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 2017-06-23
    • 1970-01-01
    相关资源
    最近更新 更多