2014-02-09 75 views
5

我正在嘗試使用XStream。我已將XStream可執行文件Jar文件添加到我的項目中。 執行以下命令:XStream XmlPullParserException

XStream xstream = new XStream(); 

是導致以下情況例外:

異常在線程 「主要」 java.lang.NoClassDefFoundError:組織/ 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) 

引起: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 

任何想法我可能做錯了? 謝謝。

+0

您使用的是IDE(Eclipse中,NetBeans的,...)或者是你自己編譯......? –

+0

如果以下任何答案有助於解決您的問題,請接受它作爲答案。 – coder0h1t

回答

13

確保您已包含XStream附帶的所有jar特別「kxml2.jar」和「xmlpull-1.1.3.1.jar」文件。 Jar版本可能會降低您的版本。

+0

您是指「XStream附帶的所有罐子」是什麼意思?從他們的網站下載只給我一個文件。 – user3062233

+0

我的意思是xstream依賴jar。 –

+3

@ user3062233我有一個類似的問題,並安裝了xmlpull jar,它工作。該網站在這裏列出了「可選依賴項」:http://xstream.codehaus.org/download.html#optional-deps –

8

使用

new XStream(new StaxDriver()) 

XPP和xmlpull是很老的代碼庫

與非默認構造函數,你可以避開那些兩瓶

+0

他們可能會老了,但不一定更糟糕。在對真實生產數據的測試中,StaxDriver比串行化和反序列化中默認的XStream的XppDriver慢大約10%。 – Sergio

+1

非常感謝!這爲我節省了一堆問題! – jackdh

+0

很高興我能夠提供幫助,我的公司嚴格控制可用於生產的罐子,這些技巧爲我贏得了良好的讚譽 –

0

你也能使用:

new XSteam(new DomDriver()) 

與StaxDriver的不同之處在於convert objet的輸出爲xml。

輸出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> 

輸出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

您可以隨時做xstream.marshal(object,new PrettyPrintWriter(writer)) –