我试图在 Tomcat 上部署基于 JAX-WS 的 Web 服务时尽量减少所需的配置。随着Servlet 3.0的引入(Tomcat 7+支持),web.xml
可以扔掉,但还是有sun-jaxws.xml
. This 博客文章 https://weblogs.java.net/blog/ramapulavarthi/archive/2010/08/13/jax-ws-ri-web-services-deployment-made-simplified很有趣:
当然,配合jax-ws注解的使用,甚至配置
sun-jaxws.xml 可以是可选的,使其成为完全描述符
免费,但这需要指定一个默认的 url 模式,如
JSR-109 或自定义模式,如 Jersey REST 服务、JAX-WS 中
规格。
是否可以避免sun-jaxws.xml
在 Tomcat 上,又如何呢?
可惜的是配置must exist 某处。根据消息来源,这是强制性的。信不信由你,sun-jaxws.xml 文件的位置是硬编码的 http://grepcode.com/file/repo1.maven.org/maven2/com.sun.xml.ws/jaxws-rt/2.2.7/com/sun/xml/ws/transport/http/servlet/WSServletContextListener.java#207到 /WEB-INF/sun-jaxws.xml (谢谢@ Metro 的家伙)。
实际上,您需要控制以下类
public final class WSServletContextListener http://grepcode.com/file/repo1.maven.org/maven2/com.sun.xml.ws/jaxws-rt/2.2.7/com/sun/xml/ws/transport/http/servlet/WSServletContextListener.java
public class WSServlet http://grepcode.com/file/repo1.maven.org/maven2/com.sun.xml.ws/jaxws-rt/2.2.7/com/sun/xml/ws/transport/http/servlet/WSServlet.java#WSServlet
需要发生什么:
-
WSServletContextListener
显然不会延长。此侦听器根据 sun-jaxws.xml 和 jaxws-catalog 文件执行大部分初始化。正如我之前提到的,位置是硬编码的。所以你阻力最小的路径是
实现您自己的普通 servlet 侦听器(使用@WebListener
)并调用new WSServletContextListener()
。然后您将委托您自己的contextInitialized(ServletContext ctxt)
and contextDestroyed()
您的实例中的方法WSServletContextListener
.
使用以下命令在侦听器实例化时即时生成文件@XmlRootElement
代表 sun-jaxws 文件的类(我将很快提供一个示例,现在没有时间:))。
在我看来,对于这种可有可无的便利来说,这是一个很大的麻烦,但理论上它应该有效。我将编写一些示例并很快看看它们的表现如何。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)