[ 
https://issues.apache.org/jira/browse/UIMA-5588?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16181139#comment-16181139
 ] 

Marshall Schor commented on UIMA-5588:
--------------------------------------

This is due to an edge case not properly handled.  In v3, subtypes of 
AnnotationBase (e.g., DocumentMetaAnnotation) are created in the view 
associated with the AnnotationBase.  

In one case, this results in a serialization order where the Sofa is serialized 
after the Annotation which references it.  This causes the bug.  
The case happens when you create an annotation in an empty CAS before you 
create the Sofa that goes with the initial view.  

I'm working on a general fix (not just for DocumentAnnotation kinds of things, 
but rather any subtype of AnnotationBase done in the initial view before the 
Sofa is created).

> uv3: NPE during deserialization under certain circumstances
> -----------------------------------------------------------
>
>                 Key: UIMA-5588
>                 URL: https://issues.apache.org/jira/browse/UIMA-5588
>             Project: UIMA
>          Issue Type: Bug
>          Components: Core Java Framework
>    Affects Versions: 3.0.0SDK-beta
>            Reporter: Richard Eckart de Castilho
>
> This was previously thought to be covered by UIMA-5586 - however, the problem 
> remains after the order of the deserialization had been fixed in UIMA-5586.
> When deserializing some binary CAS formats, there is a NPE in certain cases. 
> Here is an example that might serve for reproduction:
> {noformat}
>     @Test
>     public void test6LenientPlainUima() throws Exception
>     {
>         CAS source = JCasFactory.createJCas().getCas();
>         CAS target = JCasFactory.createJCas().getCas();
>         new DocumentMetaData(source.getJCas(), 0, 0).addToIndexes();
>         @SuppressWarnings("resource")
>         ByteArrayOutputStream bos = new ByteArrayOutputStream();
>         CasIOUtils.save(source, bos, COMPRESSED_FILTERED);
>         bos.close();
>         
>         CasIOUtils.load(new ByteArrayInputStream(bos.toByteArray()), target);
>     }
> {noformat}
> Mind this is a minimal code for reproduction. The same happens when 
> deserializing within the context of an initialized AnalysisEngine.
> The NPE only seems to be thrown when the `DocumentMetaData` is added via JCas:
> {noformat}
> java.lang.NullPointerException
>       at org.apache.uima.cas.impl.CASImpl.getView(CASImpl.java:2224)
>       at 
> org.apache.uima.cas.impl.BinaryCasSerDes6.deserializeAfterVersion(BinaryCasSerDes6.java:1892)
>       at 
> org.apache.uima.cas.impl.BinaryCasSerDes.reinit(BinaryCasSerDes.java:595)
>       at org.apache.uima.util.CasIOUtils.load(CasIOUtils.java:382)
>       at org.apache.uima.util.CasIOUtils.load(CasIOUtils.java:313)
>       at org.apache.uima.util.CasIOUtils.load(CasIOUtils.java:237)
>         ...
> {noformat}
> I have set up a similar test using only the plain CAS API which seems to work 
> fine:
> {noformat}
>     @Test
>     public void test6LenientPlainUima2() throws Exception
>     {
>         TypeSystemDescription tsd = new TypeSystemDescription_impl();
>         TypeDescription td = tsd.addType("DocumentMetaData", "", 
> CAS.TYPE_NAME_DOCUMENT_ANNOTATION);
>         td.addFeature("feat", "", CAS.TYPE_NAME_STRING);
>         
>         CAS source = CasCreationUtils.createCas(tsd, null, null, null);
>         CAS target = CasCreationUtils.createCas(tsd, null, null, null);
>         AnnotationFS dmd = source
>                 
> .createAnnotation(source.getTypeSystem().getType("DocumentMetaData"), 0, 0);
>         source.addFsToIndexes(dmd);
>         assertEquals("DocumentMetaData", 
> source.getDocumentAnnotation().getType().getName());
>         @SuppressWarnings("resource")
>         ByteArrayOutputStream bos = new ByteArrayOutputStream();
>         CasIOUtils.save(source, bos, COMPRESSED_FILTERED);
>         bos.close();
>         
>         CasIOUtils.load(new ByteArrayInputStream(bos.toByteArray()), target);
>     }
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to