J'écris une application Web dans Eclipse et j'utilise la bibliothèque de sérialisation XStream pour générer mon JSON.Sous Tomcat java.lang.NoClassDefFoundError lors de l'accès à une servlet?
J'ai encapsulé le code qui construit le JSON dans une classe qui est appelée par mon servelet. Puis la classe encapsulée a une méthode principale pour tester et quand je la lance, tout semble fonctionner correctement.
Cependant, lorsque j'utilise l'appel de la classe de mon servelet, j'obtiens une erreur java.lang.NoClassDefFoundError
, indiquant que je n'ai pas chargé les bibliothèques XStream. Je suppose que mon chemin de construction est erroné, mais j'ai défini les bibliothèques XStream comme étant dans le chemin de construction du projet, donc pour autant que je sache, cela devrait fonctionner.
Qu'est-ce qui risque de ne pas fonctionner ici?
Suite est l'exception exacte:
java.lang.ClassNotFoundException: com.thoughtworks.xstream.io.HierarchicalStreamDriver
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at SecurePaymentAjaxData.doPost(SecurePaymentAjaxData.java:44)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
Et voici le code relavant qui utilise la classe xstream:
XStream xstream = new XStream(new JettisonMappedXmlDriver());
xstream.setMode(XStream.NO_REFERENCES);
xstream.alias("CallDataUpdate", CallDataUpdate.class);
xstream.alias("CardStatus", CardStatus.class);
String jsonData = xstream.toXML(updateData);
Je souligne que ce code fonctionne bien lorsqu'il est exécuté comme une application java, Je suis sûr que c'est quelque chose à voir avec le chargement des bibliothèques, je ne sais pas où je me suis trompé.
Le package se trouve-t-il dans le dossier WEB-INF/lib de votre fichier WAR? –