Główna » Java, Polecane

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ć.