package serializers.xml; import java.io.*; import javax.xml.namespace.NamespaceContext; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import javax.xml.stream.XMLStreamWriter; import com.siemens.ct.exi.EXIFactory; import com.siemens.ct.exi.api.stream.StAXDecoder; import com.siemens.ct.exi.api.stream.StAXEncoder; import com.siemens.ct.exi.helpers.DefaultEXIFactory; import serializers.*; public class ExiExificient { public static void register(TestGroups groups) { groups.media.add(JavaBuiltIn.mediaTransformer, new ExificientSerializer(), new SerFeatures( SerFormat.XML, SerGraph.UNKNOWN, SerClass.ZERO_KNOWLEDGE, "" ) ); } public static final class ExificientSerializer extends BaseStaxMediaSerializer { private final static EXIFactory _exiFactory = DefaultEXIFactory.newInstance(); public ExificientSerializer() { // as of 0.9.1, getElementText() not implemented. Boo. super(false); } @Override public String getName() { return "xml/exi-manual"; } @Override protected XMLStreamReader createReader(InputStream in) throws XMLStreamException { try { StAXDecoder dec = new StAXDecoder(_exiFactory); dec.setInputStream(in); return dec; } catch (Exception e) { throw new XMLStreamException(e); } } @Override protected XMLStreamWriter createWriter(OutputStream out) throws XMLStreamException { try { StAXEncoder enc = new StAXEncoder(_exiFactory); enc.setOutputStream(out); // Hmmmmmh. And why does it not implement XMLStreamWriter?! return new WriterWrapper(enc); } catch (Exception e) { throw new XMLStreamException(e); } } } final static class WriterWrapper implements XMLStreamWriter { private final StAXEncoder _encoder; public WriterWrapper(StAXEncoder enc) { _encoder = enc; } @Override public void close() throws XMLStreamException { } @Override public void flush() throws XMLStreamException { } @Override public NamespaceContext getNamespaceContext() { return null; } @Override public String getPrefix(String arg0) throws XMLStreamException { return null; } @Override public Object getProperty(String arg0) throws IllegalArgumentException { return null; } @Override public void setDefaultNamespace(String arg0) throws XMLStreamException { } @Override public void setNamespaceContext(NamespaceContext arg0) throws XMLStreamException { } @Override public void setPrefix(String arg0, String arg1) throws XMLStreamException { } @Override public void writeAttribute(String localName, String value) throws XMLStreamException { _encoder.writeAttribute("", "", localName, value); } @Override public void writeAttribute(String nsURI, String localName, String value) throws XMLStreamException { _encoder.writeAttribute("", nsURI, localName, value); } @Override public void writeAttribute(String prefix, String nsURI, String localName, String value) throws XMLStreamException { _encoder.writeAttribute(prefix, nsURI, localName, value); } @Override public void writeCData(String data) throws XMLStreamException { _encoder.writeCData(data); } @Override public void writeCharacters(String text) throws XMLStreamException { _encoder.writeCharacters(text); } @Override public void writeCharacters(char[] text, int start, int len) throws XMLStreamException { _encoder.writeCharacters(text, start, len); } @Override public void writeComment(String text) throws XMLStreamException { _encoder.writeComment(text); } @Override public void writeDTD(String stuff) throws XMLStreamException { _encoder.writeDTD(stuff); } @Override public void writeDefaultNamespace(String arg0) throws XMLStreamException { // NOP } @Override public void writeEmptyElement(String localName) throws XMLStreamException { _encoder.writeStartElement("", "", localName); _encoder.writeEndElement(); } @Override public void writeEmptyElement(String nsURI, String localName) throws XMLStreamException { _encoder.writeStartElement("", localName, nsURI); _encoder.writeEndElement(); } @Override public void writeEmptyElement(String prefix, String localName, String nsURI) throws XMLStreamException { _encoder.writeStartElement(prefix, localName, nsURI); _encoder.writeEndElement(); } @Override public void writeEndDocument() throws XMLStreamException { _encoder.writeEndDocument(); } @Override public void writeEndElement() throws XMLStreamException { _encoder.writeEndElement(); } @Override public void writeEntityRef(String name) throws XMLStreamException { _encoder.writeEntityRef(name); } @Override public void writeNamespace(String arg0, String arg1) throws XMLStreamException { // NOP } @Override public void writeProcessingInstruction(String target) throws XMLStreamException { _encoder.writeProcessingInstruction(target); } @Override public void writeProcessingInstruction(String target, String data) throws XMLStreamException { _encoder.writeProcessingInstruction(target, data); } @Override public void writeStartDocument() throws XMLStreamException { _encoder.writeStartDocument(); } @Override public void writeStartDocument(String arg0) throws XMLStreamException { _encoder.writeStartDocument(); } @Override public void writeStartDocument(String arg0, String arg1) throws XMLStreamException { _encoder.writeStartDocument(); } @Override public void writeStartElement(String localName) throws XMLStreamException { _encoder.writeStartElement("", localName, ""); } @Override public void writeStartElement(String nsURI, String localName) throws XMLStreamException { _encoder.writeStartElement("", localName, nsURI); } @Override public void writeStartElement(String prefix, String localName, String nsURI) throws XMLStreamException { _encoder.writeStartElement(prefix, localName, nsURI); } } }