2010-08-02 7 views
0

Sur le côté serveur de mon application GWT, j'utilise des classes du package org.apache.commons.httpclient. Ces classes sont commodément emballées dans gwt-dev.jar distribué avec GWT. J'inclus ce pot (le long du gwt-servlet.jar) dans le WEB-INF/lib de la guerre. Lors du déploiement du fichier de guerre produit sur GlassFish et appelant la page que je reçois l'exception suivante dans les journaux du serveur (et un RPC manquai)Déploiement de gwt-dev.jar sur Glassfish (NoClassDefFoundError)

NoClassDefFoundError: org/apache/commons/httpclient/HttpException 

Que dois-je faire pour que GlassFish trouve les classes dans le gwt-dev.jar?

- plus de détails -

En tant SSCCE qui reproduit le problème, je l'ai modifié la classe GreetingServiceImpl de l'exemple GWT:

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 

Voici le contenu de la guerre

> 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 

Et la pile d'exception complète

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) 

Contenu de GWT-dev.jar, (total de 11000 classes et packages)

> 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

Pouvez-vous poster le contenu du GWT-dev.jar? Vérifiez en particulier que la classe requise existe dans gwt-dev.jar avec la structure de package correcte. – Thimmayya

+0

Je me demande si Glassfish ne charge pas ce fichier car il contient javax.servlet ou apache.tomcat ou autre chose en conflit avec son exécution – Philipp

Répondre

0

Vous devez ajouter les communes-httpclient.jar (ou httpclient-4.0.1.jar - dépend de la distribution) à votre 'répertoire WEB-INF/lib'.

Vous pouvez le télécharger à partir here

+0

Oui cela fonctionne. Pour mon code actuel, il faut ajouter plusieurs jars de la fondation Apache (journalisation, codec, etc). Je ne comprends toujours pas pourquoi le gwt-dev.jar qui contient tout n'est pas chargé correctement. – Philipp

+1

Pour autant que je sache, le fichier gwt-dev.jar sert uniquement à compiler et à exécuter le shell de développement. Vous devriez donc essayer d'ajouter la bibliothèque dont vous avez besoin dans le conteneur Web sous WEB-INF/lib de manière traditionnelle. .. – Aito

Questions connexes