Ich schreibe eine Webanwendung in Eclipse und benutze die XStream Serialization Library, um My JSON zu generieren.Unter Tomcat java.lang.NoClassDefFoundError beim Zugriff auf ein Servlet?
Ich habe den Code gekapselt, der den JSON in einer Klasse aufbaut, die von meinem Servelet aufgerufen wird. Dann hat gekapselte Klasse eine Hauptmethode zum Testen, und wenn ich es ausführe, scheint alles in Ordnung zu sein.
Allerdings, wenn ich den Aufruf der Klasse von meinem Servlet verwende, bekomme ich eine java.lang.NoClassDefFoundError
Fehler, sagend, dass ich die XStream-Bibliotheken nicht geladen habe. Ich nehme an, dass mein Build-Pfad falsch ist, aber ich habe die XStream-Bibliotheken so eingestellt, dass sie sich im Build-Pfad für das Projekt befinden. Soweit ich weiß, sollte das funktionieren.
Was wird hier wahrscheinlich schiefgehen?
Nach der genaue Ausnahme ist:
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)
Und hier ist der relavant Code, der die xstream Klasse verwendet:
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);
ich betonen, dass dieser Code funktioniert gut, wenn es als Java-Anwendung ausführen, Ich bin mir sicher, dass es etwas mit dem Laden der Bibliotheken zu tun hat, ich weiß einfach nicht, wo ich falsch gelaufen bin.
Ist das Paket im WEB-INF/lib-Ordner Ihres WAR? –