2014-02-09 7 views
5

Я пытаюсь использовать XStream. Я добавил исполняемый файл Jar XStream в свой проект. Выполнение следующей команды: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, также специально «kxml2.jar» и «xmlpull-1.1.3.1.jar». Версия Jar может лишить вас возможности.

+0

Что вы подразумеваете под «всеми банками, которые поставляются с XStream»? Загрузка с их сайта дала мне только один файл. – user3062233

+0

Я имею в виду банки хэш-зависимости. –

+3

@ user3062233 У меня была такая же проблема, как у вас, и установлена ​​банкомат xmlpull, и она сработала. На веб-сайте есть список «Необязательных зависимостей» здесь: http://xstream.codehaus.org/download.html#optional-deps –

8

Использование

new XStream(new StaxDriver()) 

XPP и xmlpull очень старые базы кода

с не-конструктор по умолчанию вы можете избежать этих 2 баночки

+0

Они могут быть старыми, но не обязательно хуже. В моих тестах на реальных производственных данных StaxDriver примерно на 10% медленнее, чем XppDriver XStream по умолчанию для сериализации и десериализации. – Sergio

+1

Большое вам спасибо! Это избавило меня от кучи проблем! – jackdh

+0

рад, что я смог помочь, моя компания строго контролирует, какие банки могут использоваться в производстве, и эти трюки заработали мне хорошую оценку. –

0

Вы можете также использовать:

new XSteam(new DomDriver()) 

Разница с StaxDriver - это результат преобразования объекта 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 (объект, новый PrettyPrintWriter (автор)) –

Смежные вопросы