Сериализация

Feb 27, 2009 19:04


В целях возможности разработки приложений парами (desktop-приложение и web-приложение, функционально не отличающиеся) решил использовать дополнительный слой в модели: веб-сервисы. Начал с технологии SOAP, которая по спецификации не предусматривает возможность пересылки объектов каких-то своих хитрых классов (custom classes).

На помощь пришли два класса XMLEncoder и XMLDecoder, которые позволяют записывать в и читать из XML экземпляры классов, которые имеют доступный конструктор без аргументов и геттеры/сеттеры для всех полей, значения которых необходимы для восстановления объекта.

Ниже приведу свой вспомогательный класс со статическими шаблонными методами, позволяющими перегонять объект в байт-массив, который разрешено по спецификации SOAP пересылать, и обратно.

import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
public class Serializer {
    public static byte[] toByte(T t) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        XMLEncoder e = new XMLEncoder(new BufferedOutputStream(baos));
        e.writeObject(t);
        e.close();
        return baos.toByteArray();
    }
    public static T fromByte(byte[] bytes){
        ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
        return (T) new XMLDecoder(bais).readObject();
    }
}
Оригинал поста доступен здесь

разработка, ПО, Работа, java, Интересности

Previous post Next post
Up