I'll have to think about this, probably in the morning, when there are more neurons available :-).
-Marshall On 11/30/2017 5:04 PM, Richard Eckart de Castilho wrote: > Hi, > > after DKPro Core can be made to on UIMA v3, I'm looking next into WebAnno. > It uses serialized CASes and CAS addresses a lot, so I am very curious > if/how well it works with v3. > > However, I have a small problem that may or may not be related to the v3 > upgrade. As part of upgrading WebAnno from v2 to v3, I am also upgrading > it from DKPro Core 1.7.0 to 1.9.0-SNAPSHOT (v3 branch). We have had some > changes in the type system from 1.7.0 to 1.9.0 on of which I am now hitting: > > The supertype of the annotation > "de.tudarmstadt.ukp.dkpro.core.api.segmentation.type.Document" > has changed from "uima.tcas.Annotation" in 1.7.0 to > "de.tudarmstadt.ukp.dkpro.core.api.segmentation.type.Div" in 1.9.0 and it > appears that the v3 CAS deserialization code is validating JCas classes > against > the data being read from a serialized CAS: > >> 2017-11-30 22:38:58 ERROR [admin] AnnotationPage - Error: The JCas class: >> "de.tudarmstadt.ukp.dkpro.core.api.segmentation.type.Document" has >> supertype: "de.tudarmstadt.ukp.dkpro.core.api.segmentation.type.Div" which >> doesn't match the UIMA type >> "de.tudarmstadt.ukp.dkpro.core.api.segmentation.type.Document"'s supertype >> "uima.tcas.Annotation". >> org.apache.uima.cas.CASRuntimeException: The JCas class: >> "de.tudarmstadt.ukp.dkpro.core.api.segmentation.type.Document" has >> supertype: "de.tudarmstadt.ukp.dkpro.core.api.segmentation.type.Div" which >> doesn't match the UIMA type >> "de.tudarmstadt.ukp.dkpro.core.api.segmentation.type.Document"'s supertype >> "uima.tcas.Annotation". >> at >> org.apache.uima.cas.impl.FSClassRegistry.validateSuperClass(FSClassRegistry.java:460) >> ~[uimaj-core-3.0.0-beta.jar:3.0.0-beta] >> at >> org.apache.uima.cas.impl.FSClassRegistry.maybeLoadJCasAndSubtypes(FSClassRegistry.java:391) >> ~[uimaj-core-3.0.0-beta.jar:3.0.0-beta] >> at >> org.apache.uima.cas.impl.FSClassRegistry.maybeLoadJCasAndSubtypes(FSClassRegistry.java:435) >> ~[uimaj-core-3.0.0-beta.jar:3.0.0-beta] >> at >> org.apache.uima.cas.impl.FSClassRegistry.maybeLoadJCasAndSubtypes(FSClassRegistry.java:435) >> ~[uimaj-core-3.0.0-beta.jar:3.0.0-beta] >> at >> org.apache.uima.cas.impl.FSClassRegistry.maybeLoadJCasAndSubtypes(FSClassRegistry.java:435) >> ~[uimaj-core-3.0.0-beta.jar:3.0.0-beta] >> at >> org.apache.uima.cas.impl.FSClassRegistry.loadJCasForTSandClassLoader(FSClassRegistry.java:334) >> ~[uimaj-core-3.0.0-beta.jar:3.0.0-beta] >> at >> org.apache.uima.cas.impl.FSClassRegistry.getGeneratorsForClassLoader(FSClassRegistry.java:871) >> ~[uimaj-core-3.0.0-beta.jar:3.0.0-beta] >> at >> org.apache.uima.cas.impl.TypeSystemImpl.getGeneratorsForClassLoader(TypeSystemImpl.java:2651) >> ~[uimaj-core-3.0.0-beta.jar:3.0.0-beta] >> at >> org.apache.uima.cas.impl.TypeSystemImpl.commit(TypeSystemImpl.java:1393) >> ~[uimaj-core-3.0.0-beta.jar:3.0.0-beta] >> at org.apache.uima.cas.impl.CASImpl.commitTypeSystem(CASImpl.java:1532) >> ~[uimaj-core-3.0.0-beta.jar:3.0.0-beta] >> at >> org.apache.uima.cas.impl.BinaryCasSerDes.reinit(BinaryCasSerDes.java:314) >> ~[uimaj-core-3.0.0-beta.jar:3.0.0-beta] >> at >> org.apache.uima.cas.impl.Serialization.deserializeCASComplete(Serialization.java:129) >> ~[uimaj-core-3.0.0-beta.jar:3.0.0-beta] > > I wonder if that is really necessary and whether it can be turned off or > worked around. > Is this just a consistency check or does the deserialization really produce > invalid results > in such a case? > > Normally (i.e. v2), I would expect that I should be able to deserialize any > CAS data into a CAS instance no matter if there are JCas classes available > and no matter > what their inheritance hierarchy is. I may not be able to use the JCas > classes to access > this particular deserialized CAS, but via the CAS interface, it should at > least be possible > to access all the data. > > If there is no way to do a "lenient loading" directly from the serialized > CAS, at least it > would be good if there was a way to load the serialized data into a CAS, > write that out > again in another format (XMI or an other binary format supporting lenient > loading) and > to load it back in to the desired target type system, i.e. the one which > matches the JCas > classes that are on the classpath. > > Cheers, > > -- Richard
