Hallo Java-Community ;-)
Ich möchte ein Objekt mit Hilfe von java.beans.XMLEncode serialisieren. Bei der Serialisierung bestimmter Klassen möchte ich aber das Serialisierungsverhalten beeinflussen.
Mein Ziel ist es alle Attribute, die vom Typ Byte-Array sind, mit base64-Codierung zu speichern.
Da das noch etwas kompliziert ist, versuche ich erst einmal die Serialisierung von Strings zu verändern.
Mein folgendes Beispiel soll für den zu serialisierenden String noch die Länge ausgeben. Aber das tut der Serialisierer nicht ;-)
(die Klasse Test hat nur ein Attribut vom Typ String)
Ergebnis:
Kann mir jemand zu diesem Problem ein paar Tipps geben?
Viele Grüße
SEA
Ich möchte ein Objekt mit Hilfe von java.beans.XMLEncode serialisieren. Bei der Serialisierung bestimmter Klassen möchte ich aber das Serialisierungsverhalten beeinflussen.
Mein Ziel ist es alle Attribute, die vom Typ Byte-Array sind, mit base64-Codierung zu speichern.
Da das noch etwas kompliziert ist, versuche ich erst einmal die Serialisierung von Strings zu verändern.
Mein folgendes Beispiel soll für den zu serialisierenden String noch die Länge ausgeben. Aber das tut der Serialisierer nicht ;-)
(die Klasse Test hat nur ein Attribut vom Typ String)
Code:
import java.beans.Encoder;
import java.beans.Expression;
import java.beans.PersistenceDelegate;
import java.beans.XMLEncoder;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
public class XMLSerTester2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
ByteArrayOutputStream baos = new ByteArrayOutputStream();
XMLEncoder xmlos = new XMLEncoder(baos);
xmlos.writeObject(new Test("Hallo"));
xmlos.writeObject(new byte[]{1, 2, 3});
xmlos.setPersistenceDelegate(Test.class, new PersistenceDelegate() {
protected Expression instantiate(Object oldInstance, Encoder out) {
return new Expression(oldInstance, oldInstance.getClass(),
"length", new Object[] { oldInstance.toString().length() });
}
});
xmlos.close();
System.out.println(new String(baos.toByteArray()));
try {
baos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Ergebnis:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.6.0_05" class="java.beans.XMLDecoder">
<object class="Test">
<void property="string">
<string>Hallo</string>
</void>
</object>
<array class="byte" length="3">
<void index="0">
<byte>1</byte>
</void>
<void index="1">
<byte>2</byte>
</void>
<void index="2">
<byte>3</byte>
</void>
</array>
</java>
Kann mir jemand zu diesem Problem ein paar Tipps geben?
Viele Grüße
SEA