【问题标题】:XStream XmlPullParserExceptionXStream XmlPullParserException
【发布时间】:2014-02-09 19:59:57
【问题描述】:

我正在尝试使用 XStream。我已将 XStream 可执行 Jar 文件添加到我的项目中。 执行以下命令:

    XStream xstream = new XStream();

导致以下异常:

线程“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)

原因: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

知道我可能做错了吗? 谢谢。

【问题讨论】:

  • 您是在使用 IDE(Eclipse、NetBeans...)还是自己编译...?
  • 如果以下任何答案有助于解决您的问题,请接受它作为答案。

标签: java xstream


【解决方案1】:

确保您已包含 XStream 附带的所有 jars,特别是“kxml2.jar”和“xmlpull-1.1.3.1.jar”文件。 Jar 版本可能会因您的而有所不同。

【讨论】:

  • 你所说的“所有 XStream 附带的 jars”是什么意思?他们网站上的下载只给了我一个文件。
  • 我的意思是 xstream 依赖 jars。
  • @user3062233 我遇到了和你类似的问题并安装了 xmlpull jar,它工作正常。该网站在此处有一个“可选依赖项”列表:xstream.codehaus.org/download.html#optional-deps
  • 导入您的回答中提到的 2 个罐子解决了我的问题。谢谢!
【解决方案2】:

使用

new XStream(new StaxDriver())

xpp 和 xmlpull 是非常古老的代码库

使用非默认构造函数,您可以避免使用这 2 个罐子

【讨论】:

  • 他们可能老了,但不一定更糟。在我对真实生产数据的测试中,StaxDriver 在序列化和反序列化方面比默认 XStream 的 XppDriver 慢约 10%。
  • 非常感谢!这为我节省了一大堆问题!
  • 很高兴能帮上忙,我公司对生产中可以使用的罐子有严格的控制,这些技巧为我赢得了好评
【解决方案3】:

你也可以使用:

new XSteam(new DomDriver())

与StaxDriver的区别在于convert objet to 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>

【讨论】:

  • 你总是可以做 xstream.marshal(object, new PrettyPrintWriter(writer))
  • Stax 比 dom 更高效
【解决方案4】:

目前不确定这是否对某人有所帮助。

我对 Jmeter maven 插件做了一场噩梦,遇到了同样的问题,我发现下面的依赖解决了这个问题。

    <dependency>
        <groupId>xmlpull</groupId>
        <artifactId>xmlpull</artifactId>
        <version>1.1.3.1</version> <--- or whatever
    </dependency>

这可能需要一行中的所有内容。

不确定为什么 maven jmeter 插件没有附带所有必需的依赖项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多