在使用XMLEncoder时出现java.lang.Instantiation异常

3

我正在尝试在我的Java程序中使用XMLEncoder,但是我遇到了java.lang.InstantiationException。以下是我正在使用的代码:

   /*
       Method for serialization.
   */
   public void serializeToXml(Object obj) throws FileNotFoundException{

        FileOutputStream fos = new FileOutputStream("/home/neeraj/xmlOP.xml"); 
        XMLEncoder encoder  =  new XMLEncoder(fos);
        encoder.writeObject(obj);
        encoder.close();
    }


   public static void main(String [] args){


        String uuid = UUID.randomUUID().toString();

        SimpleDateFormat format = new SimpleDateFormat("dd/mm/yyyy");
        Date date = new Date();
        String tDate = format.format(date);

        ClassA a = new  ClassA(uuid,"expense","Pune",tDate,1,200,0,4);
        a.createAssociatedEvents(2);

        serializationExample serializer = new serializationExample();
        try {

            serializer.serializeToXml(a);

        } catch (FileNotFoundException e) {

            e.printStackTrace();
        }

}

除此之外:我还有另外两个类:classA和classB。这两个类都实现了Serializable接口。ClassA有一个ClassB的ArrayList。这两个类的所有字段都有getter和setter方法。具体的错误信息(堆栈跟踪)如下:
 java.lang.InstantiationException: classA continuing...

 java.lang.exception :XMLEncoder:discarding statement XMLEncoder.writeObject(classA);
 continuing.

我无法弄清楚出了什么问题或这些错误是什么意思。我应该如何修改代码以使之正常工作?

谢谢。

1个回答

6

XMLEncoder需要JavaBeans对象进行序列化,所以您需要在ClassA和ClassB中定义一个公共的默认构造函数(没有参数)。

JavaBeans约定请参见此处


好的,你的回答很有效,谢谢。不过我还有一个问题,我如何给 XML 元素指定特定的名称?现在我的 XML 格式非常冗长。我希望元素像这样显示:<element name>value</element name>。 - user3686864
我现在拥有的是:<void property = "property name"> <int>4</int></void>,这非常冗长且难以阅读。 - user3686864
2
@user3686864,听起来你需要查看像XStream这样的库,而不是使用XMLEncoder。 - Ian Roberts
很遗憾,XMLEncoder没有提供你想要的这种功能。 - Teletha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接