我正在开发简单的JAX-WS Web服务。我正在使用ANT构建脚本创建WAR文件。部署到Tomcat 7服务器时的文件,抛出异常并且存在部署错误,如下所示。
正在从引导类加载器加载JAXB 2.1 API,但是这个RI(来自jar:file:/ D:/DreamSoln/Server/apache-tomcat-7.0.29/webapps/WebserviceDemo/WEB-INF/lib/jaxb -impl.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class)需要2.2 API。使用endorsed目录机制将jaxb-api.jar放在bootstrap类加载器中。
我安装了JDK 1.6,我尝试了支持机制,即我创建了lib / endorsed目录并在其中复制了jaxb-api.jar和jaxws-api.jar。但它仍然不起作用。
我是否需要从我的网络应用程序的WEB-INF / lib中删除jaxb-api.jar和jaxws-api.jar?
还有什么需要做的?
答案 0 :(得分:2)
我认为你没有正确认可tomcat lib。文件夹lib/endorsed
在以前版本的tomcat中使用(如果我记得正确,就像Tomcat 5.5一样),但在新版本(Tomcat 6及其后)中,认可的lib通常位于<TOMCAT_HOME>/endorsed
(如果不是存在,你必须创建它。)
实际上,tomcat使用系统属性java.endorsed.dirs
来定义已签名的文件夹位置。因此,请在tomcat安装中检查此值。
如何检查?在应用程序中的任何servlet / listener中打印此属性。
示例使用上下文侦听器(受this blog启发)
public class WebappLoadListener implements ServletContextListener {
public void contextDestroyed(ServletContextEvent arg0) {
}
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("\n\n\n ENDORSED DIR: " +System.getProperty("java.endorsed.dirs"));
}
}
希望它有所帮助,
答案 1 :(得分:0)
是的,一旦他们在背书目录中,你应该从webapp中删除它们。
如果您尝试使用Tomcat的Java EE版本TomEE Plus,则已经集成了JAX-WS支持,并且JAXB 2.2位于已认可的目录中。
答案 2 :(得分:0)
Tomcat 7不支持开箱即用的JAX-WS。要在Tomcat上启用JAX-WS,您需要
“catalina-ws.jar”应该作为“Tomcat extras”下载,它不包含在TC7的默认下载档案中。
尝试google“下一个里程碑:Tomcat和JBoss上的JAX-WS Web服务”,您可以找到有关此主题的更多信息。
(但是对于像JBoss 7这样的Java EE容器,所有的库已经存在了。)