在Tomcat上部署基于JAX-WS的Web服务时,我试图最小化所需的配置。随着Servlet 3.0的引入(Tomcat 7+支持),web.xml
可以被抛出,但仍然存在sun-jaxws.xml
。这个blog post很有趣:
当然,通过使用jax-ws注解,甚至配置sun-jaxws.xml也可以是可选的,使其完全不受描述符的限制,但这需要在JAX-WS规范中指定一个默认的url模式(如JSR-109)或自定义模式(如Jersey REST服务)。
在Tomcat上是否可以避免sun-jaxws.xml
,以及如何避免?
4条答案
按热度按时间qgelzfjb1#
可悲的是,配置必须存在 * 某处 *。这是强制性的,根据来源。信不信由你,sun-jaxws.xml文件的位置被硬编码到/WEB-INF/sun-jaxws. xml(谢谢,guys @ Metro)。
实际上,您需要控制以下类
public final class WSServletContextListener
public class WSServlet
个需要发生的事情:
WSServletContextListener
显然不会被扩展。这个侦听器执行sun-jaxws.xml和jaxws-catalog文件的大部分初始化。就像我之前提到的,位置是硬编码的。所以你的最小阻力就是@WebListener
)并调用new WSServletContextListener()
。然后将自己的contextInitialized(ServletContext ctxt)
和contextDestroyed()
方法委托给WSServletContextListener
示例中的方法。@XmlRootElement
类在监听器示例化时动态生成文件,该类将表示sun-jaxws文件(我将在稍后提供一个示例,现在没有时间:)。这是一个很大的麻烦,这样一个可有可无的方便,海事组织,但它应该在理论上工作。我会写一些样本,看看他们如何发挥不久。
oug3syen2#
要在Tomcat中支持JAX-WS,您必须配置:
*WEB-INF/sun-jaxws.xml
*WSServletContextListener
*WSServlet
不幸的是,很难省略WEB-INF/sun-jaxws.xml文件,但由于API,有更简单的方法来省略web.xml配置。
你可以这样做:
字符串
和/或
型
我已经在Tomcat-8.5.23版本上测试过了,它工作正常。但是请记住,您仍然必须有WEB-INF/sun-jaxws.xml文件。
型
s6fujrry3#
通过这种方式,我已经成功地发布了Web服务。我使用apache cfx在servletContextListener中发布。
字符串
e0uiprwp4#
您必须发布Web服务。您可以实现ServletContextListener并发布端点:
字符串
sun-jaxws.xml在规范中不是强制性的……如果你注意到,例如,glassfish(metro)使其成为可选的。此外,如果将EJB 3.1公开为Web服务(使用jaxws),则在生成的构建中看不到sun-jaxws.xml文件。