我做了作业,但仍然找不到解决问题的办法。我通过NetBeans创建了一个WAR文件,它使用带有附件的soap - saaj技术。正如建议的那样,我在我的项目中包括:Saaj-Im.jar、saaj-ri.jar、saaj-api.jar。但是,当我“热部署”或将我的WAR文件放到webapp目录中时,我会得到以下异常:
java.lang.NoClassDefFoundError: com/sun/xml/messaging/saaj/soap/MessageFactoryImpl
source.pkg.SoapClient.sendSoapMessage(SoapClient.java:120)
source.pkg.Air.<init>(Air.java:233)
source.flightops.AirController.<init>(AirController.java:15)
servlets.ResultsDisplay.processRequest(ResultsDisplay.java:40)
servlets.ResultsDisplay.doGet(ResultsDisplay.java:91)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
root cause
java.lang.ClassNotFoundException: com.sun.xml.messaging.saaj.soap.MessageFactoryImpl
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1711)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)
source.pkg.SoapClient.sendSoapMessage(SoapClient.java:120)
source.pkg.Air.<init>(Air.java:233)
source.flightops.AirController.<init>(AirController.java:15)
servlets.ResultsDisplay.processRequest(ResultsDisplay.java:40)
servlets.ResultsDisplay.doGet(ResultsDisplay.java:91)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621我试图像这样显式地指示类路径:
System.setProperty("java.class.path", wjp.getDataDir() + "/webapps/" + wjp.getAppContext() + "/WEB-INF/lib");我做了更多的研究,并试图调用类加载器:
try
{
Class.forName("com.sun.xml.messaging.saaj.soap.MessageFactoryImpl").getClassLoader();
}
catch (ClassNotFoundException ex)
{
Logger.getLogger(AirDriver.class.getName()).log(Level.SEVERE, null, ex);
}但还是像上面一样的例外。这很奇怪,因为当我重新启动服务器时,应用程序有时运行良好--接收到SOAP响应并显示结果,但重启服务器后只显示。这暗示了这样一个事实:当服务器重新启动时,saaj类是以某种方式找到的?但是,问题是,当我“热部署”或将更新的WAR放置到webapp目录而不重新启动时,它必须工作。我们负担不起每次WAR更新时重新启动生产服务器的费用。
另一个奇怪的问题是,在我重新启动服务器之后,启动这个WAR应用程序就可以了。但是,其他使用相同saaj类库的应用程序也会抛出同样的异常!所以它要么使用这个WAR应用程序,要么使用其他应用程序,然后这个WAR应用程序抛出这个异常。是否有某种有限的saaj图书馆共享?我以前从没见过这样的事。
拜托,有人能帮我解决这个很奇怪(又恶心)的问题吗?
谢谢你维克多。
发布于 2013-03-10 17:59:42
通过在主web容器(即ROOT/WEB)中重新实现应用程序,而不是作为一个单独的portlet,这个问题已经得到解决。
https://stackoverflow.com/questions/15254956
复制相似问题