in src/main/java/org/apache/uima/json/jsoncas2/ser/FeatureStructureDeserializer.java [304:369]
private FeatureStructure createSofaFS(CAS aCas, JsonParser aParser, DeserializationContext aCtxt)
throws IOException {
int sofaNum = -1;
String sofaID = null;
String mimeType = null;
String sofaURI = null;
String sofaString = null;
FeatureStructure sofaArray = null;
aParser.nextValue();
while (aParser.currentToken() != JsonToken.END_OBJECT) {
String fieldName = aParser.currentName();
switch (fieldName) {
case FEATURE_BASE_NAME_SOFANUM:
sofaNum = aParser.getValueAsInt();
break;
case FEATURE_BASE_NAME_SOFAID:
sofaID = aParser.getValueAsString();
break;
case FEATURE_BASE_NAME_SOFAMIME:
mimeType = aParser.getValueAsString();
break;
case FEATURE_BASE_NAME_SOFAURI:
sofaURI = aParser.getValueAsString();
break;
case FEATURE_BASE_NAME_SOFASTRING:
sofaString = aParser.getValueAsString();
break;
case REF_FEATURE_PREFIX + FEATURE_BASE_NAME_SOFAARRAY: {
FeatureStructureToIdIndex fsIdx = FeatureStructureToIdIndex.get(aCtxt);
int sofaArrayId = aParser.getValueAsInt();
sofaArray = fsIdx.get(sofaArrayId)
.orElseThrow(() -> new JsonParseException(aParser, "The SofA array with ID "
+ sofaArrayId + " must come before the SofAFS referencing it."));
break;
}
default:
throw new JsonParseException(aParser, "Unexpeced field in SofA: " + fieldName);
}
aParser.nextValue();
}
if (sofaID == null) {
throw new JsonParseException(aParser, "SofA must have a sofaID");
}
CAS view = createOrGetView(aCas, sofaID);
if (sofaURI != null) {
view.setSofaDataURI(sofaURI, mimeType);
} else if (sofaString != null) {
view.setSofaDataString(sofaString, mimeType);
OffsetConversionMode.initConverter(aCtxt, sofaID, sofaString);
} else if (sofaArray != null) {
view.setSofaDataArray(sofaArray, mimeType);
}
SofaFS sofa = view.getSofa();
if (sofa != null) {
return sofa;
}
return ((CASImpl) view).getSofaRef();
}