import org.apache.uima.UIMAException;
import org.apache.uima.cas.SerialFormat;
import org.apache.uima.fit.factory.JCasFactory;
import org.apache.uima.jcas.JCas;
import org.apache.uima.jcas.cas.FSArray;
import org.apache.uima.util.CasIOUtils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class OddFeatureText {


    public static JCas createBadXmlInputJCas() throws UIMAException {
        JCas jCas = JCasFactory.createJCas();
        jCas.setDocumentText("text");
        jCas.setDocumentLanguage("en");
        Container container = new Container(jCas, 0, 4);
        FeatureRecord feature = new FeatureRecord(jCas);
        String oddName = "\uD80C\uDCA3";
        feature.setName(oddName);
        feature.setValue(1.0);
        feature.addToIndexes();
        FSArray features = new FSArray(jCas,1 );
        features.set(0, feature);
        container.setFeatures(features);
        container.addToIndexes();
        return jCas;
    }

    public static void main(String[] args) throws UIMAException, IOException {
        File xmiFile = new File("odd-feature-text.xmi");
        JCas jCas = createBadXmlInputJCas();
        OutputStream outputStream = new FileOutputStream(xmiFile);
        CasIOUtils.save(jCas.getCas(), outputStream, SerialFormat.XMI);
        InputStream inputStream = new FileInputStream(xmiFile);
        CasIOUtils.load(inputStream, JCasFactory.createJCas().getCas());
    }
}
