You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by sc...@apache.org on 2017/10/02 17:32:27 UTC
svn commit: r1810560 - in
/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima:
cas/impl/CASImpl.java cas/impl/XCASDeserializer.java
cas/impl/XmiCasDeserializer.java jcas/cas/Sofa.java
Author: schor
Date: Mon Oct 2 17:32:26 2017
New Revision: 1810560
URL: http://svn.apache.org/viewvc?rev=1810560&view=rev
Log:
[UIMA-5600] fix deserialization of sofa array data values
Modified:
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASImpl.java
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/XCASDeserializer.java
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiCasDeserializer.java
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/Sofa.java
Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASImpl.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASImpl.java?rev=1810560&r1=1810559&r2=1810560&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASImpl.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASImpl.java Mon Oct 2 17:32:26 2017
@@ -1902,12 +1902,29 @@ public class CASImpl extends AbstractCas
}
/**
+ * internal use - special setter for setting feature values, including
+ * special handling if the feature is for the sofaArray,
+ * when deserializing
+ * @param fs -
+ * @param feat -
+ * @param value -
+ */
+ public static void setFeatureValueMaybeSofa(TOP fs, FeatureImpl feat, TOP value) {
+ if (fs instanceof Sofa) {
+ assert feat.getCode() == sofaArrayFeatCode;
+ ((Sofa)fs).setLocalSofaData(value);
+ } else {
+ fs.setFeatureValue(feat, value);
+ }
+ }
+
+ /**
* Internal use, for cases where deserializing - special case setting sofString to skip updating the document annotation
* @param fs -
* @param feat -
* @param s -
*/
- public void setFeatureValueFromStringNoDocAnnotUpdate(FeatureStructureImplC fs, FeatureImpl feat, String s) {
+ public static void setFeatureValueFromStringNoDocAnnotUpdate(FeatureStructureImplC fs, FeatureImpl feat, String s) {
if (fs instanceof Sofa &&
feat.getCode() == sofaStringFeatCode) {
((Sofa)fs).setLocalSofaDataNoDocAnnotUpdate(s);
@@ -1922,7 +1939,7 @@ public class CASImpl extends AbstractCas
* @param feat the feature to update-
* @param s the string representation of the value, could be null
*/
- public void setFeatureValueFromString(FeatureStructureImplC fs, FeatureImpl feat, String s) {
+ public static void setFeatureValueFromString(FeatureStructureImplC fs, FeatureImpl feat, String s) {
final TypeImpl range = feat.getRangeImpl();
if (fs instanceof Sofa) {
// sofa has special setters
Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/XCASDeserializer.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/XCASDeserializer.java?rev=1810560&r1=1810559&r2=1810560&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/XCASDeserializer.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/XCASDeserializer.java Mon Oct 2 17:32:26 2017
@@ -895,7 +895,7 @@ public class XCASDeserializer {
String featName = "_ref_" + featFullName.substring(separatorOffset + 1);
ootsAttrs.add(new Pair(featName, Integer.toString(extId)));
}
- fs.setFeatureValue(fi, null);
+ CASImpl.setFeatureValueMaybeSofa(fs, fi, null);
} else {
// the sofa ref in annotationBase is set when the fs is created, not here
if (fi.getCode() != TypeSystemConstants.annotBaseSofaFeatCode) {
@@ -911,7 +911,7 @@ public class XCASDeserializer {
// handle case where feature is xyz[] (an array ref, not primitive) but the value of fs is FSArray
ts.fixupFSArrayTypes(fi.getRangeImpl(), fsInfo.fs);
- fs.setFeatureValue(fi, fsInfo.fs);
+ CASImpl.setFeatureValueMaybeSofa(fs, fi, fsInfo.fs);
}
}
}
Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiCasDeserializer.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiCasDeserializer.java?rev=1810560&r1=1810559&r2=1810560&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiCasDeserializer.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiCasDeserializer.java Mon Oct 2 17:32:26 2017
@@ -1081,7 +1081,7 @@ public class XmiCasDeserializer {
ByteArray byteArray = createOrUpdateByteArray(featVal, -1, existingByteArray);
if (byteArray != existingByteArray) {
- fs.setFeatureValue(fi, byteArray);
+ CASImpl.setFeatureValueMaybeSofa(fs, fi, byteArray);
}
} else { // not ByteArray, but encoded locally
String[] arrayVals = parseArray(featVal);
@@ -1112,14 +1112,14 @@ public class XmiCasDeserializer {
private void deserializeFsRef(String featVal, FeatureImpl fi, TOP fs) {
if (featVal == null || featVal.length() == 0) {
- fs.setFeatureValue(fi, null);
+ CASImpl.setFeatureValueMaybeSofa(fs, fi, null);
} else {
int xmiId = Integer.parseInt(featVal);
TOP tgtFs = maybeGetFsForXmiId(xmiId);
if (null == tgtFs) {
fixupToDos.add( () -> finalizeRefValue(xmiId, fs, fi));
} else {
- fs.setFeatureValue(fi, tgtFs);
+ CASImpl.setFeatureValueMaybeSofa(fs, fi, tgtFs);
ts.fixupFSArrayTypes(fi.getRangeImpl(), tgtFs);
}
}
@@ -1192,7 +1192,7 @@ public class XmiCasDeserializer {
CommonArrayFS existingArray = (CommonArrayFS) fs.getFeatureValue(fi);
CommonArrayFS casArray = createOrUpdateArray(fi.getRangeImpl(), featVals, -1, existingArray);
if (existingArray != casArray) {
- fs.setFeatureValue(fi, casArray);
+ CASImpl.setFeatureValueMaybeSofa(fs, fi, (TOP)casArray);
}
//add to nonshared fs to encompassing FS map
if (!fi.isMultipleReferencesAllowed()) { // ! multiple refs => value is not shared
@@ -1829,10 +1829,10 @@ public class XmiCasDeserializer {
// the element may be out of typesystem. In that case set it
// to null, but record the id so we can add it back on next serialization.
this.sharedData.addOutOfTypeSystemAttribute(fs, fi.getShortName(), Integer.toString(xmiId));
- fs.setFeatureValue(fi, null);
+ CASImpl.setFeatureValueMaybeSofa(fs, fi, null);
}
} else {
- fs.setFeatureValue(fi, tgtFs);
+ CASImpl.setFeatureValueMaybeSofa(fs, fi, tgtFs);
ts.fixupFSArrayTypes(fi.getRangeImpl(), tgtFs);
}
}
Modified: uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/Sofa.java
URL: http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/Sofa.java?rev=1810560&r1=1810559&r2=1810560&view=diff
==============================================================================
--- uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/Sofa.java (original)
+++ uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/jcas/cas/Sofa.java Mon Oct 2 17:32:26 2017
@@ -37,12 +37,12 @@ public class Sofa extends TOP implements
/* public static string for use where constants are needed, e.g. in some Java Annotations */
public final static String _TypeName = CAS.TYPE_NAME_SOFA;
- public final static String _FeatName_sofaNum = "sofaNum";
- public final static String _FeatName_sofaID = "sofaID";
- public final static String _FeatName_mimeType = "mimeType";
- public final static String _FeatName_sofaArray = "sofaArray";
- public final static String _FeatName_sofaString = "sofaString";
- public final static String _FeatName_sofaURI = "sofaURI";
+ public final static String _FeatName_sofaNum = "sofaNum"; // int
+ public final static String _FeatName_sofaID = "sofaID"; // string
+ public final static String _FeatName_mimeType = "mimeType"; // string
+ public final static String _FeatName_sofaArray = "sofaArray"; // TOP
+ public final static String _FeatName_sofaString = "sofaString"; // string
+ public final static String _FeatName_sofaURI = "sofaURI"; // string
public final static int typeIndexID = JCasRegistry.register(Sofa.class);