【问题标题】:XStream cannot deserialize XML due to NoClassDefFoundError由于 NoClassDefFoundError,XStream 无法反序列化 XML
【发布时间】:2015-11-26 15:15:29
【问题描述】:

所以我正在尝试使用 XStream 库将一个简单的对象序列化为 XML 文件。

这些导致以下异常,抱怨找不到类 Person。我尝试向 Person 类添加 XStream 注释,但这也没有成功。

使用 XStream 库来(反)序列化对象的正确方法是什么

Exception in thread "main" java.lang.NoClassDefFoundError: org/xmlpull/v1/XmlPullParserException
    at com.thoughtworks.xstream.XStream.<init>(XStream.java:350)
    at XMLTest.main(XMLTest.java:10)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
Caused by: java.lang.ClassNotFoundException: org.xmlpull.v1.XmlPullParserException
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 7 more

为了完整起见,我在下面添加我的代码。

import com.thoughtworks.xstream.XStream;

public class XMLTest {

    public static void main(String[] args) {

        Person john = new Person("John", "Doe", 1234);

        XStream xstream = new XStream();
        String xml = xstream.toXML(john);

        Person newJohn = (Person) xstream.fromXML(xml);

        System.out.println("Hi " + newJohn.getFirstname());
    }
}

public class Person {
    private String firstname;
    private String lastname;
    private int age;

    public Person(String firstname, String lastname, int age) {
        this.firstname = firstname;
        this.lastname = lastname;
        this.age = age;
    }

    public String getFirstname() {
        return firstname;
    }

    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }

    public String getLastname() {
        return lastname;
    }

    public void setLastname(String lastname) {
        this.lastname = lastname;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

【问题讨论】:

标签: java xml xstream


【解决方案1】:

使用

XStream xstream = new XStream(new StaxDriver());

改为。

解释是如果你这样做了

XStream xstream = new XStream(new StaxDriver());

那么你在类路径中需要 xstream-[version].jar、xpp3-[version].jar 和 xmlpull-[version].jar。”但是 XStream xstream = new XStream(new StaxDriver()); 不需要从 Java 6 开始的 XPP3 库

一个非常简单的解释和更多信息可以在repo-source获得

【讨论】:

  • 感谢您的回答,这确实解决了我的问题。您能否对这个解决方案多开一点,以便我可以接受这个作为一个体面的答案?
猜你喜欢
  • 2019-03-29
  • 1970-01-01
  • 1970-01-01
  • 2021-07-02
  • 1970-01-01
  • 2015-04-13
  • 1970-01-01
  • 1970-01-01
  • 2013-03-24
相关资源
最近更新 更多