请考虑我基于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)中的什么组件/标准使得“ com.sun.xml.ws.transport.http.servlet.WSServlet “类和侦听器无用
问题2: 为什么在没有使用“ com.sun.xml.ws.transport.http.servlet.WSServlet”设置servlet类并且没有放置此sun-jaxws.xml文件的情况下,Web服务器(tomcat 6)无法工作的原因
PS。我还知道在JEE 6中有一个新的组件javax.servlet.ServletContainerInitializer,但我想知道的是不同的东西。
答案 0 :(得分:0)
Jax-WS是Sun创建/实现/调用Web服务的参考实现。
要在非JEE环境中使用Jax-WS,您需要sun-jaxws.xml
部署描述符。
更多详细信息here
如果您使用CXF而不是Sun的Jax-WS RI,那就是另一回事了。