2014-02-09 13 views
5

Ich versuche, XStream zu verwenden. Ich habe die XStream ausführbare Jar-Datei zu meinem Projekt hinzugefügt. den folgenden Befehl ausführen:XStream XmlPullParserException

XStream xstream = new XStream(); 

wird in der folgenden Ausnahme resultierende:

Exception in thread "main" java.lang.NoClassDefFoundError: org/xmlpull/v1/XmlPullParserException

at com.thoughtworks.xstream.XStream.<init>(XStream.java:350) 
at xstream_test.XmlTrasformer.objectToXml(XmlTrasformer.java:56) 
at xstream_test.XmlTrasformer.main(XmlTrasformer.java:31) 

verursacht durch: java.lang.ClassNotFoundException: org.xmlpull.v1.XmlPullParserException

at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
... 3 more 

Irgendeine Idee, die ich falsch gemacht haben könnte? Danke.

+0

Sind Sie ein IDE (Eclipse NetBeans, ...) oder kompilieren Sie selbst ...? –

+0

Wenn eine der folgenden Antworten zur Lösung Ihres Problems beigetragen hat, akzeptieren Sie diese bitte als Antwort. – coder0h1t

Antwort

13

Stellen Sie sicher, dass Sie alle mit XStream gelieferten Jars auch speziell in die Dateien "kxml2.jar" und "xmlpull-1.1.3.1.jar" aufgenommen haben. Die Jar-Version kann sich in Ihrem Fall ändern.

+0

Was meinst du mit "all die Gläser, die mit XStream kommen"? Der Download von ihrer Website gab mir nur eine Datei. – user3062233

+0

Ich meine Xstream-Abhängigkeitsgläser. –

+3

@ user3062233 Ich hatte ein ähnliches Problem wie Ihres und installierte das xmlpull jar, und es funktionierte. Die Website hat eine Liste von "Optional Dependencies" hier: http://xstream.codehaus.org/download.html#optional-deps –

8

Verwenden

new XStream(new StaxDriver()) 

xpp und xmlpull sind sehr alt Codebases

mit Nicht-Standard-Konstruktor können Sie solche mit 2 Gläser vermeiden

+0

Sie können alt sein, aber nicht unbedingt schlechter. In meinen Tests mit realen Produktionsdaten ist StaxDriver etwa 10% langsamer als XStreams XppDriver bei Serialisierung und Deserialisierung. – Sergio

+1

Vielen Dank! Das hat mir eine Menge Probleme erspart! – jackdh

+0

froh, dass ich in der Lage war zu helfen, meine Firma hat strenge Kontrolle darüber, welche Gläser können in der Produktion verwendet werden, und diese Tricks haben mir gutes Lob verdient –

0

Auch Sie verwenden können:

new XSteam(new DomDriver()) 

Der Unterschied zu StaxDriver ist die Ausgabe von objet in XML konvertieren.

Ausgang DomDriver:

<person> 
    <firstname>Joe</firstname> 
    <lastname>Walnes</lastname> 
    <phone> 
    <code>123</code> 
    <number>1234-456</number> 
    </phone> 
    <fax> 
    <code>123</code> 
    <number>9999-999</number> 
    </fax> 
</person> 

Ausgang StaxDriver:

<?xml version="1.0" ?><person><firstname>Joe</firstname><lastname>Walnes</lastname><phone><code>123</code><number>1234-456</number></phone><fax><code>123</code><number>9999-999</number></fax></person> 
+0

Sie können immer Xstream.Marshal (Objekt, neue PrettyPrintWriter (Schriftsteller)) –