package dima; import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.uima.UIMAException; import org.apache.uima.cas.impl.XCASDeserializer; import org.apache.uima.cas.impl.XCASSerializer; import org.apache.uima.fit.factory.JCasFactory; import org.apache.uima.jcas.JCas; import org.apache.uima.util.XMLSerializer; import org.xml.sax.SAXException; import java.io.IOException; import java.io.InputStream; import java.io.StringWriter; /** * XMI Cas serializer / de-serializer Helper. * <p/> * Date: 18.02.13 * Time: 14:47 * * @author Johannes Kirschnick */ public class UIMAXMLConverterHelper extends UIMAConverterHelper<String> { private static final Log LOG = LogFactory.getLog(UIMAXMLConverterHelper.class); private final XCASSerializer ser; private final boolean formattedOutput; /** * Creates a new instance of the XML serializer. * * @param formattedOutput if true the output will be XML pretty printed, otherwise it will be just on one line * @throws UIMAException in case of errors */ public UIMAXMLConverterHelper(boolean formattedOutput) throws UIMAException { this.formattedOutput = formattedOutput; JCas jCas = JCasFactory.createJCas(); ser = new XCASSerializer(jCas.getTypeSystem()); } @Override public String serialize(JCas jCas) throws IOException, SAXException { StringWriter writer = new StringWriter(); XMLSerializer xmlSer = new XMLSerializer(writer, formattedOutput); ser.serialize(jCas.getCas(), xmlSer.getContentHandler()); return writer.toString(); } @Override public JCas deserialize(InputStream inputStream, JCas newElement) throws IOException, UIMAException, InterruptedException, SAXException { try { newElement.reset(); // deserialize CAS XCASDeserializer.deserialize(inputStream, newElement.getCas()); //XmiCasDeserializer.deserialize(inputStream, newElement.getCas()); return newElement; } finally { IOUtils.closeQuietly(inputStream); } } }