0

私はJavaでシリアライゼーションXMLをいじっていて、少し立ち往生しています。このプログラムを実行すると、2 つの例外が発生し、原因がわかりません。

java.lang.InstantiationException: Ship
Continuing ...
java.lang.Exception: XMLEncoder: discarding statement XMLEncoder.writeObject(Ship);
Continuing ...

インターネットの例を使用すると正常に動作するため、シリアル化しようとしているクラスに問題があると思われます。

誰かが私が犯している間違いを指摘してもらえますか.

主要:

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 クラス:

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;
    }
}

シリアル化するオブジェクト(例外を引き起こす私のオブジェクト):

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 + "]";
    }

}

シリアル化するオブジェクト (動作するインターネットの例):

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;
    }

}
4

1 に答える 1