This is a true bug. I've reported it in Jira: https://issues.apache.org/jira/browse/UIMA-3603
I've added a fix and implemented some new tests for edge cases, including this one which was failing. Will check it in shortly. -Marshall On 2/6/2014 2:16 PM, Marshall Schor wrote: > I can reproduce this with a simple bit of top level code; the failure seems to > depend on an unusual order of making Feature Structures, and setting up the > DocumentAnnotation instance. > > I'll take a look. > > -Marshall > > On 2/6/2014 7:38 AM, Peter Klügl wrote: >> I can fix the xmiCAS if I change the address of the DocumentAnnotation >> to be lower than the Year... >> >> Peter >> >> Am 06.02.2014 13:23, schrieb Peter Klügl: >>> Hi, >>> >>> if I open the following xmiCAS in the CAS Editor, remove the Year >>> annotation and try to save the file, then I get the same exception. The >>> other annotations are removable... >>> >>> <?xml version="1.0" encoding="UTF-8"?> >>> <xmi:XMI xmlns:Title="http:///uima/ruta/example/Title.ecore" >>> xmlns:cas="http:///uima/cas.ecore" >>> xmlns:type="http:///org/apache/uima/ruta/type.ecore" >>> xmlns:xmi="http://www.omg.org/XMI" >>> xmlns:Author="http:///uima/ruta/example/Author.ecore" >>> xmlns:tcas="http:///uima/tcas.ecore" >>> xmlns:example="http:///uima/ruta/example.ecore" xmi:version="2.0"> >>> <cas:NULL xmi:id="0"/> >>> <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" >>> mimeType="text" sofaString="Ogren, P.V., Wetzler, P.G., Bethard, S.: >>> ClearTK: A UIMA Toolkit for Statistical Natural Language Processing. In: >>> UIMA for NLP workshop at LREC 08. (2008) "/> >>> <example:Year xmi:id="8" sofa="1" begin="148" end="154"/> >>> <example:Author xmi:id="12" sofa="1" begin="0" end="40"/> >>> <example:Title xmi:id="16" sofa="1" begin="41" end="109"/> >>> <tcas:DocumentAnnotation xmi:id="20" sofa="1" begin="0" end="156" >>> language="x-unspecified"/> >>> <cas:View sofa="1" members="8 12 16 20"/> >>> </xmi:XMI> >>> >>> >>> Peter >>> >>> Am 06.02.2014 12:56, schrieb Peter Klügl: >>>> Hi, >>>> >>>> has anyone seen the following exception. I have no idea what can cause >>>> this problem. (the typeCode is 0 or something causing the feats int >>>> array to be null). I added the method that causes the problem below. It >>>> just removes some annotations dependent of its type. >>>> >>>> I was thinking that the problem is caused by removing annotations that >>>> are indexed and are the value of the feature of another indexed >>>> annotation. However, that works for almost all types. I would assume >>>> that this functionality would not depend on the actual type or the order >>>> in the type system, right? >>>> >>>> Any ideas is greatly appreciated. >>>> >>>> java.lang.NullPointerException >>>> at >>>> org.apache.uima.cas.impl.XmiCasSerializer$XmiCasDocSerializer.enqueueFeatures(XmiCasSerializer.java:593) >>>> at >>>> org.apache.uima.cas.impl.XmiCasSerializer$XmiCasDocSerializer.enqueueFeaturesOfIndexed(XmiCasSerializer.java:521) >>>> at >>>> org.apache.uima.cas.impl.XmiCasSerializer$XmiCasDocSerializer.serialize(XmiCasSerializer.java:241) >>>> at >>>> org.apache.uima.cas.impl.XmiCasSerializer$XmiCasDocSerializer.access$700(XmiCasSerializer.java:108) >>>> at >>>> org.apache.uima.cas.impl.XmiCasSerializer.serialize(XmiCasSerializer.java:1551) >>>> at >>>> org.apache.uima.cas.impl.XmiCasSerializer.serialize(XmiCasSerializer.java:1616) >>>> at >>>> org.apache.uima.cas.impl.XmiCasSerializer.serialize(XmiCasSerializer.java:1567) >>>> at >>>> org.apache.uima.ruta.testing.ui.handlers.RerunActionHandler.writeXmi(RerunActionHandler.java:652) >>>> at >>>> org.apache.uima.ruta.testing.ui.handlers.RerunActionHandler.access$0(RerunActionHandler.java:647) >>>> at >>>> org.apache.uima.ruta.testing.ui.handlers.RerunActionHandler$RerunHandlerJob.writeCleanInputFiles(RerunActionHandler.java:378) >>>> at >>>> org.apache.uima.ruta.testing.ui.handlers.RerunActionHandler$RerunHandlerJob.evalRutaWithClassPathScript(RerunActionHandler.java:196) >>>> at >>>> org.apache.uima.ruta.testing.ui.handlers.RerunActionHandler$RerunHandlerJob.run(RerunActionHandler.java:182) >>>> at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) >>>> >>>> >>>> private void prepareCas(CAS cas) { >>>> if (!includedTypes.isEmpty()) { >>>> // exclude all other types if there are some included types >>>> excludedTypes = new ArrayList<String>(); >>>> List<Type> types = >>>> cas.getTypeSystem().getProperlySubsumedTypes(cas.getAnnotationType()); >>>> for (Type type : types) { >>>> if (!includedTypes.contains(type.getName())) { >>>> excludedTypes.add(type.getName()); >>>> } >>>> } >>>> } >>>> if (includedTypes.isEmpty() && excludedTypes.isEmpty()) { >>>> // remove all annotation in default settings >>>> String documentText = cas.getDocumentText(); >>>> cas.reset(); >>>> cas.setDocumentText(documentText); >>>> } else { >>>> List<AnnotationFS> toRemove = new LinkedList<AnnotationFS>(); >>>> AnnotationIndex<AnnotationFS> annotationIndex = >>>> cas.getAnnotationIndex(); >>>> for (AnnotationFS annotationFS : annotationIndex) { >>>> Type type = annotationFS.getType(); >>>> String typeName = type.getName(); >>>> if (includedTypes.contains(typeName) || >>>> !excludedTypes.contains(typeName)) { >>>> toRemove.add(annotationFS); >>>> } >>>> } >>>> for (AnnotationFS each : toRemove) { >>>> if (!cas.getDocumentAnnotation().equals(each)) { >>>> cas.removeFsFromIndexes(each); >>>> } >>>> } >>>> } >>>> } >>>> >
