Daniel Maeurer created UIMA-3357:
------------------------------------

             Summary: CONTAINS fails when running script as AE in a pipeline 
with a new CAS
                 Key: UIMA-3357
                 URL: https://issues.apache.org/jira/browse/UIMA-3357
             Project: UIMA
          Issue Type: Bug
          Components: ruta, uimaFIT
    Affects Versions: 2.1.0ruta, 2.0.1ruta
            Reporter: Daniel Maeurer
            Priority: Minor


When running my Ruta script as an analysis engine in a pipeline, it does not 
work correctly when creating a new CAS and processing the pipeline a second 
time with the new CAS. 
While reusing the old cas with "cas.reset()" is working, creating a new CAS 
results in failing rules including "CONTAINS" in the ruta script.

The ruta script used in the example:
{code:title=mystic.ruta|borderStyle=solid}
PACKAGE de.tudarmstadt.algo.vpino.ruta;
DECLARE test;
Document{CONTAINS(CW)->MARK(test)};
{code}

The following Java class can reproduce the error. It creates four xmi files. 
The last xmi file is missing the annotations created with rules including 
"CONTAINS".

{code:title=MysticPipe.java|borderStyle=solid}
package org.uimafit.pipeline;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.uima.UIMAFramework;
import org.apache.uima.analysis_engine.AnalysisEngine;
import org.apache.uima.analysis_engine.AnalysisEngineDescription;
import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
import org.apache.uima.cas.CAS;
import org.apache.uima.cas.impl.XmiCasSerializer;
import org.apache.uima.fit.factory.AnalysisEngineFactory;
import org.apache.uima.fit.pipeline.SimplePipeline;
import org.apache.uima.resource.ResourceInitializationException;
import org.apache.uima.resource.metadata.ResourceMetaData;
import org.apache.uima.util.CasCreationUtils;
import org.apache.uima.util.InvalidXMLException;
import org.apache.uima.util.XMLInputSource;
import org.apache.uima.util.XMLSerializer;
import org.xml.sax.SAXException;

public class MysticPipe {

        public static void main(String[] args) throws Exception {
                working("This is a test.", initPipeline());
                failing("This is a test.", initPipeline());
        }

        private static AnalysisEngine initPipeline() throws 
ResourceInitializationException, IOException, InvalidXMLException {
                File specFile = new 
File("./descriptor/de/tudarmstadt/algo/vpino/ruta/mysticEngine.xml");
                XMLInputSource in = new XMLInputSource(specFile);
                AnalysisEngineDescription ruta = (AnalysisEngineDescription) 
UIMAFramework.getXMLParser().parseResourceSpecifier(in);
                return AnalysisEngineFactory.createEngine(ruta);
        }

        private static void working(String input, AnalysisEngine theEngine) 
throws ResourceInitializationException, AnalysisEngineProcessException, 
IOException,
                SAXException {
                final List<ResourceMetaData> metaData = new 
ArrayList<ResourceMetaData>();
                metaData.add(theEngine.getMetaData());
                final CAS cas = CasCreationUtils.createCas(metaData);
                System.out.println("create a new cas...");
                cas.setDocumentLanguage("de");
                cas.setDocumentText(input);
                SimplePipeline.runPipeline(cas, theEngine);
                writeXmiFile(cas, "works_test1");//CHECK
                //THE DIFFERENCE
                cas.reset();
                //END DIFFERENCE
                System.out.println("create a new cas...");
                cas.setDocumentLanguage("de");
                cas.setDocumentText(input);
                SimplePipeline.runPipeline(cas, theEngine);
                writeXmiFile(cas, "works_test2");//CHECK
        }

        private static void failing(String input, AnalysisEngine theEngine) 
throws ResourceInitializationException, AnalysisEngineProcessException, 
IOException,
                SAXException {
                final List<ResourceMetaData> metaData = new 
ArrayList<ResourceMetaData>();
                metaData.add(theEngine.getMetaData());
                final CAS cas = CasCreationUtils.createCas(metaData);
                System.out.println("create a new cas...");
                cas.setDocumentLanguage("de");
                cas.setDocumentText(input);
                SimplePipeline.runPipeline(cas, theEngine);
                writeXmiFile(cas, "works_test3"); // CHECK
                //THE DIFFERENCE
                final CAS cas2 = CasCreationUtils.createCas(metaData);
                //END DIFFERENCE
                System.out.println("create a new cas...");
                cas2.setDocumentLanguage("de");
                cas2.setDocumentText(input);
                SimplePipeline.runPipeline(cas2, theEngine);
                writeXmiFile(cas2, "fail_test4"); //FAIL
                return;
        }
        
        public static void writeXmiFile(CAS aCas, String Fname) throws 
IOException, SAXException {
                File outFile = new File("output", Fname + ".xmi");
                OutputStream out = null;

                try {
                        // out = new StringOutputStream();
                        out = new FileOutputStream(outFile);
                        XmiCasSerializer ser = new 
XmiCasSerializer(aCas.getTypeSystem());
                        XMLSerializer xmlSer = new XMLSerializer(out, false);
                        ser.serialize(aCas, xmlSer.getContentHandler());
                } finally {
                        if (out != null) {
                                out.close();
                        }
                }
        }
}
{code}



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to