10

概述:

目前我们有一个包含多个模块的 Web 应用程序。我们正在使用以下技术堆栈

  1. JAX-WS
  2. Spring框架(除了spring MVC)
  3. JSF
  4. 休眠

应用服务器: IBM Websphere 7.0(生产)、Apache Tomcat 7.0.X(开发) 我们使用 JAX-WS 注释将类标记为 Web 服务,除此之外,我们不在数据对象中使用任何 JAXB 注释,我们将离开ws 运行时的这个任务。

问题陈述:

一旦我们在 Apache Tomcat 上部署应用程序,Web 服务就不会在 AS 上发布。作为解决方案,我们需要在 spring 上下文文件中添加“org.springframework.remoting.jaxws.SimpleJaxWsServiceExporter”属性,然后 Web 服务开始正常工作。但是当我们在 WAS 上部署应用程序时,Web 服务会在没有设置上述属性的情况下发布。当我们向 Web 服务发出第一个请求时,它响应缓慢,在这个问题的研发过程中,我们发现了以下情况;

  1. IBM 使用 AXIS2 Web 服务引擎
  2. JAXB 实现加载类,就像className_used_in_web_service_method$JaxbAccessorM_getFieldName_setFieldName_java_util_Set from: <unknown>层次结构中的所有类一样。这只是第一次发生。我们试图在应用程序启动时加载这些,但未能成功。谁能帮助我们解决这个问题?
4

3 回答 3

0

在 web.xml 中尝试 AxisServlet load-on-startup

于 2013-01-07T07:23:19.547 回答
0

您是否尝试使用SimpleHttpServerJaxWsServiceExporter而不是SimpleJaxWsServiceExporter

似乎SimpleHttpServerJaxWsServiceExporter在完成端点配置后立即启动 Web 服务。

于 2013-03-06T19:57:00.883 回答
0

您可以创建自己的实现ServletContextListener

例如:

package kernel.flowcontrol;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class WsLifecycleListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {

    // some init work ...

    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {}
}

并将其添加到web.xml

<listener>
    <listener-class>kernel.flowcontrol.WsLifecycleListener</listener-class>
</listener>
于 2013-11-28T13:56:45.193 回答