Технический форум
Вернуться   Технический форум > Программирование > Форум программистов


Закрытая тема
 
Опции темы Опции просмотра
Старый 13.10.2012, 23:05   #1 (permalink)
GER
Member
 
Аватар для GER
 
Регистрация: 14.12.2010
Сообщений: 37
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 15
По умолчанию Сериализация объектов в 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 ?

Тему перемещаю.
GER вне форума  

Старый 13.10.2012, 23:05
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Можете просмотреть аналогичные темы, это в большинстве случаев полезно

Убрать повторение отображаемых объектов.
Где ошибка? (Java)
Программа на Java

Старый 15.10.2012, 19:39   #2 (permalink)
GER
Member
 
Аватар для GER
 
Регистрация: 14.12.2010
Сообщений: 37
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 15
По умолчанию

Собственно, разобрался, хотя и убил кучу времени. Использование XMLEncoder и XMLDecoder требует оформления сериализуемого класса по правилам JavaBean: Каждое поле класса должно иметь get и set методы в соответствии с соглашением об именах, класс должен иметь конструктор без параметров и т. д. в общем,
GER вне форума  
Старый 15.10.2012, 21:28   #3 (permalink)
Gruvi
VIP user
 
Аватар для Gruvi
 
Регистрация: 10.03.2011
Сообщений: 765
Записей в дневнике: 1
Сказал(а) спасибо: 10
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3453
По умолчанию

Тема закрыта по просьбе автора.
Gruvi вне форума  
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Закрытая тема


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.