On 23.10.2013 17:12, Jens Grivolla wrote: > You can call typeSystemInit() yourself from process(jcas). >
Hmm... I get a compile error... Nevermind, I implemented Marshalls fix. > I just did exactly that this morning when switching an AE from > CasAnnotator_ImplBase to JCasAnnotator_ImplBase: > http://mail-archives.apache.org/mod_mbox/uima-user/200706.mbox/%3c2787e08a0706270648i668498cbq16d952c6711a6...@mail.gmail.com%3E > Thanks for the pointer. I have not found this mail. Peter > HTH, > Jens > > On 10/23/2013 02:36 PM, Peter Klügl wrote: >> Is it correct that the type system may not change if the analysis engine >> implementation extends JCasAnnotator_ImplBase? I somehow miss the method >> typeSystemInit(). Hmm, should I really switch to CasAnnotator_ImplBase, >> or do I have missed something? >> >> Peter >> >> On 23.10.2013 14:35, Peter Klügl (JIRA) wrote: >>> [ >>> https://issues.apache.org/jira/browse/UIMA-3357?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13802850#comment-13802850 >>> ] >>> >>> Peter Klügl commented on UIMA-3357: >>> ----------------------------------- >>> >>> Thanks for reporting this. I added a test for now. >>> >>> The problem is that the type system has changed, at least its >>> representation in java, but nobody told the analysis engine about >>> it. On the one hand, the environment of the script stores the known >>> types. This is initiated by {{initializeTypes()}} either if the >>> analysis engine was not initialized yet or if the analysis engine is >>> forced to update itself with each process call (parameter >>> reloadScript). On the other hand, the internal "indexing" (begin and >>> end map in RutaBasic) uses the current CAS, its annotations and >>> their types. So we have different type objects that cause problems. >>> >>> >>>> 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.0.1ruta, 2.1.0ruta >>>> Reporter: Daniel Maeurer >>>> Assignee: Peter Klügl >>>> 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) >>> >> >> >