首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XMLEncoder -运行时异常

XMLEncoder -运行时异常
EN

Stack Overflow用户
提问于 2013-04-15 07:17:53
回答 1查看 1.8K关注 0票数 0

我一直在使用java中的序列化-XML,我有点卡住了。当我运行这个程序时,我得到了两个异常,我不确定是什么原因:

代码语言:javascript
复制
java.lang.InstantiationException: Ship
Continuing ...
java.lang.Exception: XMLEncoder: discarding statement XMLEncoder.writeObject(Ship);
Continuing ...

我怀疑我试图序列化的类有问题,因为当我使用internet的一个例子时,它工作得很好。

有人能指出我犯了什么错误吗?

Main:

代码语言:javascript
复制
public class Main {

    private static final String XMLLocation = "xmlTest.xml";
    static ObjectSerializationToXML serializer = new ObjectSerializationToXML();

    public Main() {
        // TODO Auto-generated constructor stub
    }

    /**
     * @param args
     * @throws Exception 
     */
    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        Ship ship = new Ship("name", "324");
        serializer.serializeObjectToXML(XMLLocation, ship);

    }

}

对象序列化-XML类:

代码语言:javascript
复制
import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class ObjectSerializationToXML {

    /**
     * <span id="IL_AD10" class="IL_AD">This method</span> saves (serializes) any java bean object into xml file
     */
    public void serializeObjectToXML(String xmlFileLocation,
            Object objectToSerialize) throws Exception {
        FileOutputStream os = new FileOutputStream(xmlFileLocation);
        XMLEncoder encoder = new XMLEncoder(os);
        encoder.writeObject(objectToSerialize);
        encoder.close();
    }

    /**
     * Reads Java Bean Object From XML File
     */
    public Object deserializeXMLToObject(String xmlFileLocation)
            throws Exception {
        FileInputStream os = new FileInputStream(xmlFileLocation);
        XMLDecoder decoder = new XMLDecoder(os);
        Object deSerializedObject = decoder.readObject();
        decoder.close();

        return deSerializedObject;
    }
}

要序列化的对象(导致异常的我的对象):

代码语言:javascript
复制
public class Ship {

    private String name;
    private String yearBuilt;


    public Ship(String name, String yearBuilt) {
        this.name = name;
        this.yearBuilt = yearBuilt;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    public String getYearBuild() {
        return yearBuilt;
    }
    public void setYearBuild(String yearBuild) {
        this.yearBuilt = yearBuild;
    }
    @Override
    public String toString() {
        return "ship [name=" + name + ", yearBuilt=" + yearBuilt + "]";
    }

}

要序列化的对象(来自internet的有效示例):

代码语言:javascript
复制
public class MyBeanToSerialize {
    private String firstName;
    private String lastName;
    private int age;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        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;
    }

}
EN

回答 1

Stack Overflow用户

发布于 2017-05-10 18:07:18

当任何类包含参数化构造函数并试图序列化时,它应该只被默认构造函数实例化。因此,通过默认构造函数,XMLEncoder需要一个对象来序列化它。

Ship类必须在包含参数化构造函数时实现默认构造函数,因为每当Ship类变为可序列化时,它都会寻找默认构造函数来实例化XMLEncoder。

请根据下面的说明找到更正后的船级。

代码语言:javascript
复制
public class Ship {

private String name;
private String yearBuilt;


public Ship(String name, String yearBuilt) {
    this.name = name;
    this.yearBuilt = yearBuilt;
}

//Default constructor must be implemented for XMLEncoder serializing
public Ship() {
    super();
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}
public String getYearBuild() {
    return yearBuilt;
}
public void setYearBuild(String yearBuild) {
    this.yearBuilt = yearBuild;
}
@Override
public String toString() {
    return "ship [name=" + name + ", yearBuilt=" + yearBuilt + "]";
}

}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16005467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档