完整的 JEE 投诉容器如何不需要 sun-jaxws.xml

how full JEE complaint container do not need sun-jaxws.xml

请根据 JEE 5 和 JDK 7 考虑我的问题,Web 服务器是 tomcat 6;

考虑一下我们有这样的 Web 服务:

package client;

import javax.jws.WebService;

@WebService
public class RetroQuery {
    public List<RetroQueryOutput> retroQuery(RetroQueryInput req) throws Exception {
    }
}

在 weblogic 和 WAS 中,我们可以在 web.xml 中仅使用以下配置创建 JAX-WS Web 服务,不行!需要使用sun-jaxws.xml文件。

<servlet>
    <servlet-name>RetroQueryPort</servlet-name>
    <servlet-class>client.RetroQuery</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>RetroQueryPort</servlet-name>
    <url-pattern>/RetroQueryPort</url-pattern>
</servlet-mapping>

但在 Web 容器中,我们需要使 web.xml 有点不同,如下所示:

<listener>
      <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
</listener>
<servlet>
    <servlet-name>RetroQueryService</servlet-name>
    <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
    <servlet-mapping>
    <servlet-name>RetroQueryService</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

除此之外,我们还需要一个名为 sun-jaxws.xml 的文件,内容如下:

<endpoint name='RetroQuery' implementation='client.RetroQuery' url-pattern='/RetroQueryPort' />

问题 1:JEE 5(weblogic 或 WAS)中的 conponent/standart 是什么使得“com.sun.xml.ws.transport.http.servlet.WSServlet " class 和听众没用

问题二: 为什么 Web 服务器 (tomcat 6) 在没有使用 "com.sun.xml.ws.transport.http.servlet.WSServlet" 设置 servlet class 并且没有放置这个 sun-jaxws.xml 文件

的情况下无法工作

PS。我也知道在 JEE 6 中有一个新组件 javax.servlet.ServletContainerInitializer 但我想知道的是不同的东西。

Jax-WS 是 Sun 针对 creating/implementing/calling Web 服务的参考实现。 要在非 JEE 环境中使用 Jax-WS,您需要 sun-jaxws.xml 个部署描述符。 更多详情 here

如果使用 CXF 而不是 Sun 的 Jax-WS RI,情况就不同了。