2010-08-02 42 views
0

在我的GWT应用程序的服务器端,我使用org.apache.commons.httpclient包中的类。这些类可方便地包装在GWT发布的gwt-dev.jar中。我在战争的WEB-INF/lib中包括这个罐子(沿着gwt-servlet.jar)。 当部署在GlassFish中产生war文件并调用页面,我得到的服务器日志以下异常(和RPC失败)在Glassfish上部署gwt-dev.jar(NoClassDefFoundError)

NoClassDefFoundError: org/apache/commons/httpclient/HttpException 

我应该怎么做,这样的GlassFish发现在gwt-dev.jar类?

- 更多细节 - 例如GWT的

作为重现问题的SSCCE,我已经修改类GreetingServiceImpl:

import org.apache.commons.httpclient.HttpException; 
public String greetServer(String input) throws IllegalArgumentException { 
     try { 
      if(input.equals("hello")){ 
       throw new HttpException(); 
      } 
     } catch (HttpException e) { 
      throw new RuntimeException(e); 
     } 
     ... the rest of the GWT example app 

这里是战争的内容

> jar -tf mytest.war 

META-INF/ 
META-INF/MANIFEST.MF 
WEB-INF/ 
WEB-INF/classes/ 
WEB-INF/classes/com/ 
WEB-INF/classes/com/mytest/ 
WEB-INF/classes/com/mytest/client/ 
WEB-INF/classes/com/mytest/server/ 
WEB-INF/classes/com/mytest/shared/ 
WEB-INF/lib/ 
mytest/ 
mytest/gwt/ 
mytest/gwt/standard/ 
mytest/gwt/standard/images/ 
mytest/gwt/standard/images/ie6/ 
MyTest.css 
MyTest.html 
WEB-INF/classes/com/mytest/MyTest.gwt.xml 
WEB-INF/classes/com/mytest/client/GreetingService.class 
WEB-INF/classes/com/mytest/client/GreetingServiceAsync.cla 
WEB-INF/classes/com/mytest/client/MyTest$1.class 
WEB-INF/classes/com/mytest/client/MyTest$1MyHandler$1.clas 
WEB-INF/classes/com/mytest/client/MyTest$1MyHandler.class 
WEB-INF/classes/com/mytest/client/MyTest.class 
WEB-INF/classes/com/mytest/server/GreetingServiceImpl.clas 
WEB-INF/classes/com/mytest/shared/FieldVerifier.class 
WEB-INF/lib/gwt-dev.jar 
WEB-INF/lib/gwt-servlet.jar 
WEB-INF/web.xml 
mytest/0A9476898799A150D840F0B1C3672921.cache.png 
mytest/2E5321B05D040C654474157464A1320D.cache.html 
mytest/342DCE11554A2ED2AAE7C85966745477.cache.html 
mytest/396F806CD63ABD414BFBB9D57429F05B.cache.png 
mytest/505B1AEFC510FA6C8E519C08BD073CE0.cache.html 
mytest/8C8B81BFBAD2494F16B95F537039AC9C.gwt.rpc 
mytest/B33A642CF9F25C17BB1B43D744B059AE.cache.html 
mytest/C8061F2305971473D1402197D362AAFE.cache.html 
mytest/DF7764EEC1903CD03C9545B354D8D8E4.cache.png 
mytest/E224554766C17094274FFD5F9B5E2DCC.cache.html 
mytest/E44767377485D18D6B6864F65BA8EF73.cache.png 
mytest/EDC7827FEEA59EE44AD790B1C6430C45.cache.png 
mytest/clear.cache.gif 
mytest/gwt/standard/images/corner.png 
mytest/gwt/standard/images/corner_ie6.png 
mytest/gwt/standard/images/hborder.png 
mytest/gwt/standard/images/hborder_ie6.png 
mytest/gwt/standard/images/ie6/corner_dialog_topleft.png 
mytest/gwt/standard/images/ie6/corner_dialog_topright.png 
mytest/gwt/standard/images/ie6/hborder_blue_shadow.png 
mytest/gwt/standard/images/ie6/hborder_gray_shadow.png 
mytest/gwt/standard/images/ie6/vborder_blue_shadow.png 
mytest/gwt/standard/images/ie6/vborder_gray_shadow.png 
mytest/gwt/standard/images/splitPanelThumb.png 
mytest/gwt/standard/images/vborder.png 
mytest/gwt/standard/images/vborder_ie6.png 
mytest/gwt/standard/standard.css 
mytest/gwt/standard/standard_rtl.css 
mytest/hosted.html 
mytest/mytest.nocache.js 

而完整的异常堆栈跟踪

PWC1382: Allocate exception for servlet greetServlet java.lang.NoClassDefFoundError: org/apache/commons/httpclient/HttpException at 
java.lang.Class.getDeclaredConstructors0(Native Method) at 
java.lang.Class.privateGetDeclaredConstructors(Class.java:2389) at 
java.lang.Class.getConstructor0(Class.java:2699) at 
java.lang.Class.newInstance0(Class.java:326) at 
java.lang.Class.newInstance(Class.java:308) at 
org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1132) at 
org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:832) at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) at 
org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:271) at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202) at 
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632) at 
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577) at 
com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94) at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206) at 
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632) at 
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577) at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571) at 
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080) at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150) at 
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632) at 
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577) at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571) at 
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080) at 
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:272) at 
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637) at 
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568) at 
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813) at 
com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341) at 
com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263) at 
com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214) at 
com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265) at 
com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106) 

内容GWT-dev.jar的,(总11000类和包的)

> jar -tf gwt-dev.jar 
META-INF/MANIFEST.MF 
LICENSE.txt 
META-INF/ 
META-INF/LICENSE 
... 
com/gargoylesoftware/htmlunit/... 
com/google/gwt/core/... 
com/google/gwt/dev/... 
com/steadystate/css/... 
java_cup/runtime/... 
javax/management/... 
javax/servlet/... 
javax/xml/... 
mx4j/... 
net/sourceforge/htmlunit/... 
org/apache/bcel/... 
org/apache/catalina/... 
org/apache/commons/... 
org/apache/commons/httpclient/ 
... 
org/apache/commons/httpclient/HttpContentTooLargeException.class 
org/apache/commons/httpclient/HttpException.class 
org/apache/commons/httpclient/HttpHost.class 
... 
org/apache/coyote/... 
org/apache/html/... 
org/apache/jasper/... 
org/apache/tomcat/... 
etc... 
+1

下载它,你能后的GWT-dev.jar的内容是什么?特别是用正确的包结构验证gwt-dev.jar中是否存在所需的类。 – Thimmayya 2010-08-02 18:08:59

+0

我不知道Glassfish是否不加载这个jar,因为它包含javax.servlet或apache.tomcat或其他与其运行时冲突的东西 – Philipp 2010-08-02 20:06:27

回答

0

您应该添加公地httpclient.jar(或HttpClient的-4.0.1.jar - 取决于分配)到您的'WEB-INF/lib目录'。

您可以从here

+0

是的,这是行不通的。对于我的实际代码,它需要从Apache基础(日志记录,编解码器等)添加几个罐子。我仍然不明白为什么包含它的gwt-dev.jar没有正确加载。 – Philipp 2010-08-02 20:08:52

+1

据我所知,gwt-dev.jar仅用于编译和运行开发shell,因此您应该尝试以传统方式将所需的库添加到WEB-INF/lib下的Web容器中。 .. – Aito 2010-08-03 13:59:40