Szybka konwersja obiektu na i z XML’a
26 February 2010
Brak komentarzy
Często pisząc krótkie “spike’i” (dla nie wtajemniczonych mianem spike określa się testowe/demonstracyjne aplikacje, lub ich zmodyfikowane fragmenty) potrzebujemy gdzieś zapisać lub przesłać obiekt Javy w formacie XML’a. Znajdziemy całą masę rozwiązań wspomagających to zadanie, jednak gdy zależy nam na czasie, niekiedy najprostsze rozwiązania są najlepsze.
Oto bardzo szybki przykład takiego zadania:
package com.konri.spikes.xml; import java.beans.XMLDecoder; import java.beans.XMLEncoder; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.UnsupportedEncodingException; import java.text.MessageFormat; public class Sample { public static void main(String[] args) throws UnsupportedEncodingException { SampleObj sampleObj = new SampleObj(); sampleObj.setLabel("This is test message"); sampleObj.setValue(123); sampleObj.setCheck(true); String res = write(sampleObj); System.out.println("XML:\n" + res); SampleObj sampleObj2 = read(res); System.out.println("Loaded object: " + sampleObj2); } public static class SampleObj { private String label; private boolean check; private int value; public String getLabel() { return label; } public void setLabel(String label) { this.label = label; } public boolean isCheck() { return check; } public void setCheck(boolean check) { this.check = check; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } @Override public String toString() { return MessageFormat.format("SampleObj [check={0}, label={1}, value={2}]", check, label, value); } } public static String write(SampleObj obj) throws UnsupportedEncodingException { ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); XMLEncoder encoder = new XMLEncoder(new BufferedOutputStream( byteArrayOutputStream)); encoder.writeObject(obj); encoder.close(); return byteArrayOutputStream.toString("UTF-8"); } public static SampleObj read(String xml) throws UnsupportedEncodingException { XMLDecoder decoder = new XMLDecoder(new BufferedInputStream( new ByteArrayInputStream(xml.getBytes("UTF-8")))); SampleObj o = (SampleObj) decoder.readObject(); decoder.close(); return o; } }
A oto wynik:
XML: <?xml version="1.0" encoding="UTF-8"?> <java version="1.6.0_17"> <object> <void property="check"> <boolean>true</boolean> </void> <void property="label"> <string>This is test message</string> </void> <void property="value"> <int>123</int> </void> </object> </java> Readed object: SampleObj [check=true, label=This is test message, value=123]










Zostaw odpowiedź!
Musisz się zalogować aby móc komentować.