package org.caudexorigo.xml; import java.io.InputStream; import java.io.OutputStream; import java.io.Writer; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import org.caudexorigo.io.UnsynchronizedByteArrayInputStream; import org.caudexorigo.io.UnsynchronizedStringWriter; public class JaxbConverter<T> { private Marshaller jaxb_marshaller; private Unmarshaller jaxb_unmarshaller; public JaxbConverter(Class<T> clazz) { this(clazz, false); } public JaxbConverter(Class<T> clazz, boolean prettyPrint) { super(); try { JAXBContext jaxb_ctx = JAXBContext.newInstance(clazz); jaxb_marshaller = jaxb_ctx.createMarshaller(); jaxb_unmarshaller = jaxb_ctx.createUnmarshaller(); if (prettyPrint) { jaxb_marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); } } catch (Throwable t) { throw new RuntimeException(t); } } public void toXml(T object, OutputStream out) { try { jaxb_marshaller.marshal(object, out); } catch (Throwable e) { throw new RuntimeException(e); } } public void toXml(T object, Writer out) { try { jaxb_marshaller.marshal(object, out); } catch (Throwable e) { throw new RuntimeException(e); } } public String toXml(T object) { try { UnsynchronizedStringWriter w = new UnsynchronizedStringWriter(); toXml(object, w); return w.toString(); } catch (Throwable e) { throw new RuntimeException(e); } } public T fromXml(InputStream xml) { try { @SuppressWarnings("unchecked") T object = (T) jaxb_unmarshaller.unmarshal(xml); return object; } catch (Throwable e) { throw new RuntimeException(e); } } public T fromXml(byte[] xml) { try { return fromXml(new UnsynchronizedByteArrayInputStream(xml)); } catch (Throwable e) { throw new RuntimeException(e); } } public T fromXml(String xml_string) { try { return fromXml(xml_string.getBytes()); } catch (Throwable e) { throw new RuntimeException(e); } } }