You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@uima.apache.org by "Richard Eckart de Castilho (JIRA)" <de...@uima.apache.org> on 2017/09/26 10:32:00 UTC
[jira] [Updated] (UIMA-5588) uv3: NPE during deserialization under
certain circumstances
[ https://issues.apache.org/jira/browse/UIMA-5588?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Richard Eckart de Castilho updated UIMA-5588:
---------------------------------------------
Description:
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}
was:
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}
> 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)