package serializers.xml;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
import serializers.Serializer;
import data.media.MediaContent;
public abstract class BaseStaxMediaSerializer extends Serializer<MediaContent>
{
private final StaxSerializer _serializer = new StaxSerializer();
private final StaxDeserializer _deserializer;
protected BaseStaxMediaSerializer(boolean workingGetElementText)
{
_deserializer = new StaxDeserializer(workingGetElementText);
}
protected XMLStreamReader createReader(byte[] input) throws XMLStreamException {
return createReader(new ByteArrayInputStream(input));
}
protected abstract XMLStreamReader createReader(InputStream in) throws XMLStreamException;
protected abstract XMLStreamWriter createWriter(OutputStream output) throws XMLStreamException;
// // Public API
@Override
public MediaContent deserialize (byte[] array) throws XMLStreamException
{
XMLStreamReader parser = createReader(array);
MediaContent content = _deserializer.readDocument(parser);
parser.close();
return content;
}
@Override
public MediaContent[] deserializeItems(InputStream in, int numberOfItems) throws XMLStreamException
{
XMLStreamReader parser = createReader(in);
MediaContent[] result = _deserializer.readDocument(parser, numberOfItems);
parser.close();
return result;
}
@Override
public byte[] serialize(MediaContent content) throws Exception
{
ByteArrayOutputStream baos = outputStream(content);
XMLStreamWriter writer = createWriter(baos);
_serializer.writeDocument(writer, content);
writer.flush();
writer.close();
return baos.toByteArray();
}
@Override
public final void serializeItems(MediaContent[] items, OutputStream out) throws XMLStreamException
{
// XML requires single root, so add bogus "stream"
XMLStreamWriter writer = createWriter(out);
_serializer.writeDocument(writer, items);
writer.flush();
writer.close();
}
}