Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Der XMLEncoder ist für so etwas gedacht.
Der speichert die Eigenschaften die per getter und setter zugänglich sind - http://xstream.codehaus.org/ wäre eine Alternative, die ähnlich funktioniert Hängt halt davon ab wie du es haben willst.
Ich Xstream mal getestet. Sehr schön, funktioniert problemlos.
Allerdings würde ich das, wenn geht mit Standard Java Routinen lösen. Daher lieber XMLEncoder.
Hier habe ich jedoch das Problem, das meine Obejkte nicht im XML Stream erscheinen, obwohl sie set & get Methoden haben, sowie die Fehlermeldung
java.lang.IllegalAccessException: Class java.beans.Statement can not access a member of class ForwardLookupMessage with modifiers ""
Continuing ...
java.lang.Exception: XMLEncoder: discarding statement XMLEncoder.writeObject(ForwardLookupMessage);
Continuing ...
import java.beans.XMLEncoder;
import java.io.*;
public class Starter {
public static void main(String[] args) {
Message test = new Message();
test.setEinText("BerendTest");
test.setEinWert(4711);
test.setMessageId(47112312);
try{
XMLEncoder e = new XMLEncoder( new BufferedOutputStream( new FileOutputStream("out.xml")));
e.writeObject(test);
e.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
mit der Messageklasse
Code:
import java.io.*;
public class Message implements Serializable {
//Felder
long messageId;
int einWert;
String einText;
//getter & setter
void setMessageId(long wert){messageId = wert;}
void setEinWert(int wert){einWert = wert;}
void setEinText(String wert){einText = wert;}
long getMessageId(){return messageId;}
int getEinWert(){return einWert;}
String getEinText(){return einText;}
}
Ich hab das ganze nochmal in ein einfaches Beispiel gepackt - was wieder eine andere Fehlermeldung auspuckt - mit der ich wieder nicht anfangen kann. Diesmal gar kein Output:
Code:
import java.beans.XMLEncoder;
import java.io.*;
public class Starter {
public static void main(String[] args) {
Message test = new Message(47112312, 4711, "Test");
/*test.setEinText("Test");
test.setEinWert(4711);
test.setMessageId(47112312);*/
try{
XMLEncoder e = new XMLEncoder( new BufferedOutputStream( new FileOutputStream("out.xml")));
e.writeObject(test);
e.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
mit der Messageklasse
Code:
import java.io.*;
public class Message implements Serializable {
//Felder
public long messageId;
public int einWert;
public String einText;
//Konstructor
public Message(long id, int wert, String text){
messageId = id;
einWert = wert;
einText = text;
}
//getter & setter
void setMessageId(long wert){messageId = wert;}
void setEinWert(int wert){einWert = wert;}
void setEinText(String wert){einText = wert;}
long getMessageId(){return messageId;}
int getEinWert(){return einWert;}
String getEinText(){return einText;}
}
Ich hab jetzt einen Konstruktor dabei, der auch public ist, das hat aber nichts geändert. Und mit der Fehlermeldung kann ich wieder nichts anfagen. Die InstantiationException tritt aber nicht in Zeile bei der Instanziierung des Objektes auf, sondern erst im try-Block.
Mach die Klassen, Methoden und Konstruktoren public (komplett alle modifier weg zu lassen ist eh Fusch)