Технический форум

Технический форум (http://www.tehnari.ru/)
-   Форум программистов (http://www.tehnari.ru/f22/)
-   -   Сериализация объектов в java с помощью XMLEncoder (http://www.tehnari.ru/f22/t79322/)

GER 13.10.2012 23:05

Сериализация объектов в java с помощью XMLEncoder
 
Ой, простите, промахнулся разделом... Но, может, и здесь помогут.

В общем, проблема такова: мне надо сериализовать объект в XML файл. При использовании XMLEncoder пишет:
java.lang.IllegalAccessException: Class sun.reflect.misc.Trampoline can not access a member of class task4.Task4$Zachotka with modifiers "public"
Continuing ...
java.lang.Exception: XMLEncoder: discarding statement XMLEncoder.writeObject(Task4$Zachotka);
Continuing ...


Код

package task4;

import java.io.*;
import java.util.Scanner;
import java.beans.XMLEncoder;
import java.beans.XMLDecoder;


public class Task4 {

private static class Zachotka implements java.io.Serializable{
public Zachotka(){}
static class Session
{
int NumOfSubj;
int marks[];
String subjects[];

Session(Scanner eye) {
eye.nextInt();
this.NumOfSubj = eye.nextInt();
this.subjects = new String[NumOfSubj];
this.marks = new int[NumOfSubj];
for (int j = 0; j < NumOfSubj; ++j) {
this.subjects[j] = eye.next();
this.marks[j] = eye.nextInt();
}
}
}

static private String name, fam, otch;
static private int kyrs, grope, ClosedSession;
private static Session etap[] = new Session[10];
//public void writeObject(){}
Zachotka(Scanner eye) {

this.name = eye.next();
this.fam = eye.next();
this.otch = eye.next();
this.kyrs = eye.nextInt();
this.grope = eye.nextInt();
this.ClosedSession = eye.nextInt();
for (int i = 0; i < ClosedSession; ++i) {
etap[i] = new Session(eye);
}
}
}




public static void main(String[] args) throws FileNotFoundException {


try {
FileInputStream in = new FileInputStream("input.txt");
Scanner eye = new Scanner(in, "cp1251");
eye.useDelimiter("[-.,:=_;()?!\" \t\n\r]+");

Zachotka NZ = new Zachotka(eye);


FileOutputStream out = new FileOutputStream("Zachotka.xml");
XMLEncoder xmlEncoder = new XMLEncoder(out);
xmlEncoder.writeObject(NZ);
xmlEncoder.flush();
xmlEncoder.close();
}

catch (IOException e)
{
System.out.printf("Ошибка ввода");
}

}
}


Как, собственно надо описать класс, чтобы он сериализовался с помощью XMLEncoder ?tehno015

Тему перемещаю.

GER 15.10.2012 19:39

Собственно, разобрался, хотя и убил кучу времени. Использование XMLEncoder и XMLDecoder требует оформления сериализуемого класса по правилам JavaBean: Каждое поле класса должно иметь get и set методы в соответствии с соглашением об именах, класс должен иметь конструктор без параметров и т. д. в общем, :closed:

Gruvi 15.10.2012 21:28

Тема закрыта по просьбе автора.


Часовой пояс GMT +4, время: 17:07.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.