You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by re...@apache.org on 2021/07/30 12:01:39 UTC

[uima-uimaj] branch feature/UIMA-6374-Create-CAS-de--serialization-test-suite created (now 8320f36)

This is an automated email from the ASF dual-hosted git repository.

rec pushed a change to branch feature/UIMA-6374-Create-CAS-de--serialization-test-suite
in repository https://gitbox.apache.org/repos/asf/uima-uimaj.git.


      at 8320f36  [UIMA-6374] Create CAS (de)serialization test suite

This branch includes the following new commits:

     new 8320f36  [UIMA-6374] Create CAS (de)serialization test suite

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[uima-uimaj] 01/01: [UIMA-6374] Create CAS (de)serialization test suite

Posted by re...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rec pushed a commit to branch feature/UIMA-6374-Create-CAS-de--serialization-test-suite
in repository https://gitbox.apache.org/repos/asf/uima-uimaj.git

commit 8320f36a21c7b45f01669d45371f20be2a8c219f
Author: Richard Eckart de Castilho <re...@apache.org>
AuthorDate: Fri Jul 30 14:01:13 2021 +0200

    [UIMA-6374] Create CAS (de)serialization test suite
    
    - Expand test suite
    - Allow skipping tests that are known to fail
    - Enable usage from other modules such as uimaj-json
---
 uimaj-core/pom.xml                                 |   3 +-
 .../CasSerializationDeserialization_XCAS_Test.java |   9 +++++
 ...izationDeserialization_XMI_1_0_PRETTY_Test.java |   5 +++
 ...izationDeserialization_XMI_1_1_PRETTY_Test.java |   4 +++
 .../apache/uima/cas/serdes/SerDesAssuptions.java   |  33 +++++++++++++++++
 .../uima/cas/serdes/SerDesCasIOTestUtils.java      |   2 +-
 .../ProgrammaticallyCreatedCasDataSuite.java       |  40 ++++++++++++++++++++-
 .../cas/serdes/datasuites/XmiFileDataSuite.java    |   6 +++-
 .../cas/serdes/scenario/SerRefTestScenario.java    |   4 +++
 .../ser-ref/casWithSofaDataArray/cas.bin           | Bin 0 -> 2316 bytes
 .../casWithSofaDataArray/debug-typesystem.xml      |  17 +++++++++
 .../ser-ref/casWithSofaDataArray/debug.xmi         |   5 +++
 .../ser-ref/casWithSofaDataURI/cas.bin             | Bin 0 -> 2540 bytes
 .../casWithSofaDataURI/debug-typesystem.xml        |  17 +++++++++
 .../ser-ref/casWithSofaDataURI/debug.xmi           |   4 +++
 .../ser-ref/casWithSofaDataArray/cas.bin           | Bin 0 -> 188 bytes
 .../casWithSofaDataArray/debug-typesystem.xml      |  17 +++++++++
 .../ser-ref/casWithSofaDataArray/debug.xmi         |   5 +++
 .../ser-ref/casWithSofaDataURI/cas.bin             | Bin 0 -> 412 bytes
 .../casWithSofaDataURI/debug-typesystem.xml        |  17 +++++++++
 .../ser-ref/casWithSofaDataURI/debug.xmi           |   4 +++
 .../ser-ref/casWithSofaDataArray/cas.bin           | Bin 0 -> 2394 bytes
 .../casWithSofaDataArray/debug-typesystem.xml      |  17 +++++++++
 .../ser-ref/casWithSofaDataArray/debug.xmi         |   5 +++
 .../ser-ref/casWithSofaDataURI/cas.bin             | Bin 0 -> 2476 bytes
 .../casWithSofaDataURI/debug-typesystem.xml        |  17 +++++++++
 .../ser-ref/casWithSofaDataURI/debug.xmi           |   4 +++
 .../ser-ref/casWithSofaDataArray/cas.bin           | Bin 0 -> 2742 bytes
 .../casWithSofaDataArray/debug-typesystem.xml      |  17 +++++++++
 .../ser-ref/casWithSofaDataArray/debug.xmi         |   5 +++
 .../ser-ref/casWithSofaDataURI/cas.bin             | Bin 0 -> 2839 bytes
 .../casWithSofaDataURI/debug-typesystem.xml        |  17 +++++++++
 .../ser-ref/casWithSofaDataURI/debug.xmi           |   4 +++
 .../ser-ref/casWithSofaDataArray/cas.xcas          |  19 ++++++++++
 .../casWithSofaDataArray/debug-typesystem.xml      |  17 +++++++++
 .../ser-ref/casWithSofaDataArray/debug.xmi         |   5 +++
 .../ser-ref/casWithSofaDataURI/cas.xcas            |   3 ++
 .../casWithSofaDataURI/debug-typesystem.xml        |  17 +++++++++
 .../ser-ref/casWithSofaDataURI/debug.xmi           |   4 +++
 .../ser-ref/casWithSofaDataArray/data.xmi          |   5 +++
 .../casWithSofaDataArray/debug-typesystem.xml      |  17 +++++++++
 .../ser-ref/casWithSofaDataArray/debug.xmi         |   5 +++
 .../ser-ref/casWithSofaDataURI/data.xmi            |   4 +++
 .../casWithSofaDataURI/debug-typesystem.xml        |  17 +++++++++
 .../ser-ref/casWithSofaDataURI/debug.xmi           |   4 +++
 .../ser-ref/casWithSofaDataArray/data.xmi          |   5 +++
 .../casWithSofaDataArray/debug-typesystem.xml      |  17 +++++++++
 .../ser-ref/casWithSofaDataArray/debug.xmi         |   5 +++
 .../ser-ref/casWithSofaDataURI/data.xmi            |   4 +++
 .../casWithSofaDataURI/debug-typesystem.xml        |  17 +++++++++
 .../ser-ref/casWithSofaDataURI/debug.xmi           |   4 +++
 .../document.txt                                   |   1 +
 52 files changed, 444 insertions(+), 4 deletions(-)

diff --git a/uimaj-core/pom.xml b/uimaj-core/pom.xml
index a4e4a5b..acfe6e2 100644
--- a/uimaj-core/pom.xml
+++ b/uimaj-core/pom.xml
@@ -274,8 +274,9 @@
                   <exclude>src/test/resources/CASTests/CasTypeOrderTestRef.txt</exclude>
                   <exclude>src/test/resources/CASTests/english.txt</exclude>
                   <exclude>src/test/resources/XmiFileDataSuite/README.md</exclude>
-                  <exclude>src/test/resources/XmiFileDataSuite/**/*.xmi</exclude> 
+                  <exclude>src/test/resources/XmiFileDataSuite/**/*.xmi</exclude>
                   <exclude>src/test/resources/XmiFileDataSuite/**/typesystem.xml</exclude> 
+                  <exclude>src/test/resources/ProgrammaticallyCreatedCasDataSuite/**/*</exclude>
                   <exclude>src/test/resources/CasSerializationDeserialization_*_Test/**/cas.*</exclude>
                   <exclude>src/test/resources/CasSerializationDeserialization_*_Test/**/data.*</exclude>
                   <exclude>src/test/resources/CasSerializationDeserialization_*_Test/**/debug.xmi</exclude>
diff --git a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_XCAS_Test.java b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_XCAS_Test.java
index cf0dc3c..bcf3c30 100644
--- a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_XCAS_Test.java
+++ b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_XCAS_Test.java
@@ -20,6 +20,7 @@ package org.apache.uima.cas.serdes;
 
 import static java.util.Arrays.asList;
 import static org.apache.uima.cas.SerialFormat.XCAS;
+import static org.apache.uima.cas.serdes.SerDesAssuptions.assumeNotKnownToFail;
 import static org.apache.uima.cas.serdes.SerDesCasIOTestUtils.createCasMaybeWithTypesystem;
 import static org.apache.uima.cas.serdes.SerDesCasIOTestUtils.desser;
 import static org.apache.uima.cas.serdes.SerDesCasIOTestUtils.serdes;
@@ -85,6 +86,10 @@ public class CasSerializationDeserialization_XCAS_Test {
   @ParameterizedTest
   @MethodSource("serDesScenarios")
   public void serializeDeserializeTest(Runnable aScenario) throws Exception {
+    assumeNotKnownToFail(aScenario, //
+            ".*casWithSofaDataArray",
+            "XCAS does not suport SofA data arrays during deserialiaztion");
+
     aScenario.run();
   }
 
@@ -97,6 +102,10 @@ public class CasSerializationDeserialization_XCAS_Test {
   @ParameterizedTest
   @MethodSource("roundTripDesSerScenarios")
   public void roundTripDeserializeSerializeTest(Runnable aScenario) throws Exception {
+    assumeNotKnownToFail(aScenario, //
+            ".*casWithSofaDataArray",
+            "XCAS does not suport SofA data arrays during deserialiaztion");
+
     aScenario.run();
   }
 
diff --git a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_XMI_1_0_PRETTY_Test.java b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_XMI_1_0_PRETTY_Test.java
index b2c1dc1..298c8d9 100644
--- a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_XMI_1_0_PRETTY_Test.java
+++ b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_XMI_1_0_PRETTY_Test.java
@@ -20,6 +20,7 @@ package org.apache.uima.cas.serdes;
 
 import static java.util.Arrays.asList;
 import static org.apache.uima.cas.SerialFormat.XMI_PRETTY;
+import static org.apache.uima.cas.serdes.SerDesAssuptions.assumeNotKnownToFail;
 import static org.apache.uima.cas.serdes.SerDesCasIOTestUtils.desser;
 import static org.apache.uima.cas.serdes.SerDesCasIOTestUtils.serdes;
 import static org.apache.uima.cas.serdes.datasuites.XmiFileDataSuite.DATA_XMI;
@@ -66,6 +67,7 @@ public class CasSerializationDeserialization_XMI_1_0_PRETTY_Test {
 
   private static List<DesSerTestScenario> roundTripDesSerScenarios() throws Exception {
     return SerDesCasIOTestUtils.roundTripDesSerScenarios(desSerCycles, CAS_FILE_NAME);
+
   }
 
   private static List<SerDesTestScenario> serDesScenarios() {
@@ -124,6 +126,9 @@ public class CasSerializationDeserialization_XMI_1_0_PRETTY_Test {
   @ParameterizedTest
   @MethodSource("roundTripDesSerScenarios")
   public void roundTripDeserializeSerializeTest(Runnable aScenario) throws Exception {
+    assumeNotKnownToFail(aScenario, //
+            ".*casWithSofaDataArray", "Round-trip does not exactly preserve XMI IDs");
+
     aScenario.run();
   }
 
diff --git a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_XMI_1_1_PRETTY_Test.java b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_XMI_1_1_PRETTY_Test.java
index 00a17b0..763c4b0 100644
--- a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_XMI_1_1_PRETTY_Test.java
+++ b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/CasSerializationDeserialization_XMI_1_1_PRETTY_Test.java
@@ -20,6 +20,7 @@ package org.apache.uima.cas.serdes;
 
 import static java.util.Arrays.asList;
 import static org.apache.uima.cas.SerialFormat.XMI_1_1_PRETTY;
+import static org.apache.uima.cas.serdes.SerDesAssuptions.assumeNotKnownToFail;
 import static org.apache.uima.cas.serdes.SerDesCasIOTestUtils.desser;
 import static org.apache.uima.cas.serdes.SerDesCasIOTestUtils.serdes;
 import static org.apache.uima.cas.serdes.datasuites.XmiFileDataSuite.DATA_XMI;
@@ -97,6 +98,9 @@ public class CasSerializationDeserialization_XMI_1_1_PRETTY_Test {
   @ParameterizedTest
   @MethodSource("roundTripDesSerScenarios")
   public void roundTripDeserializeSerializeTest(Runnable aScenario) throws Exception {
+    assumeNotKnownToFail(aScenario, //
+            ".*casWithSofaDataArray", "Round-trip does not exactly preserve XMI IDs");
+
     aScenario.run();
   }
 
diff --git a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/SerDesAssuptions.java b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/SerDesAssuptions.java
new file mode 100644
index 0000000..6ba69f5
--- /dev/null
+++ b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/SerDesAssuptions.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.uima.cas.serdes;
+
+import static org.junit.jupiter.api.Assumptions.assumeFalse;
+
+import java.util.regex.Pattern;
+
+public class SerDesAssuptions {
+  public static void assumeNotKnownToFail(Runnable aScenario, String... aPatternsAndReasons) {
+    for (int i = 0; i < aPatternsAndReasons.length; i += 2) {
+      String pattern = aPatternsAndReasons[i];
+      String reason = aPatternsAndReasons[i + 1];
+      assumeFalse(Pattern.matches(pattern, aScenario.toString()), "Skipped because: " + reason);
+    }
+  }
+}
diff --git a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/SerDesCasIOTestUtils.java b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/SerDesCasIOTestUtils.java
index e555aa3..827ad0b 100644
--- a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/SerDesCasIOTestUtils.java
+++ b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/SerDesCasIOTestUtils.java
@@ -240,7 +240,7 @@ public class SerDesCasIOTestUtils {
     }
   }
 
-  enum CasLoadOptions {
+  public enum CasLoadOptions {
     WITH_TSI
   }
 
diff --git a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/datasuites/ProgrammaticallyCreatedCasDataSuite.java b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/datasuites/ProgrammaticallyCreatedCasDataSuite.java
index 7f4e731..2fa283f 100644
--- a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/datasuites/ProgrammaticallyCreatedCasDataSuite.java
+++ b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/datasuites/ProgrammaticallyCreatedCasDataSuite.java
@@ -20,8 +20,10 @@ package org.apache.uima.cas.serdes.datasuites;
 
 import static java.util.Arrays.asList;
 
+import java.nio.charset.StandardCharsets;
 import java.util.List;
 
+import org.apache.uima.cas.ByteArrayFS;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.cas.serdes.transitions.CasSourceTargetConfiguration;
 import org.apache.uima.jcas.tcas.Annotation;
@@ -38,7 +40,19 @@ public class ProgrammaticallyCreatedCasDataSuite {
                     .build(),
             CasSourceTargetConfiguration.builder() //
                     .withTitle("casWithTextAndAnnotation") //
-                    .withSourceCasSupplier(ProgrammaticallyCreatedCasDataSuite::casWithTextAndAnnotation)
+                    .withSourceCasSupplier(
+                            ProgrammaticallyCreatedCasDataSuite::casWithTextAndAnnotation)
+                    .withTargetCasSupplier(CasCreationUtils::createCas) //
+                    .build(),
+            CasSourceTargetConfiguration.builder() //
+                    .withTitle("casWithSofaDataURI") //
+                    .withSourceCasSupplier(ProgrammaticallyCreatedCasDataSuite::casWithSofaDataURI)
+                    .withTargetCasSupplier(CasCreationUtils::createCas) //
+                    .build(),
+            CasSourceTargetConfiguration.builder() //
+                    .withTitle("casWithSofaDataArray") //
+                    .withSourceCasSupplier(
+                            ProgrammaticallyCreatedCasDataSuite::casWithSofaDataArray)
                     .withTargetCasSupplier(CasCreationUtils::createCas) //
                     .build());
   }
@@ -62,4 +76,28 @@ public class ProgrammaticallyCreatedCasDataSuite {
 
     return cas;
   }
+
+  public static CAS casWithSofaDataURI() throws Exception {
+    CAS cas = CasCreationUtils.createCas();
+    cas.setSofaDataURI(
+            ProgrammaticallyCreatedCasDataSuite.class
+                    .getResource("/ProgrammaticallyCreatedCasDataSuite/document.txt").toString(),
+            "text/plain");
+
+    return cas;
+  }
+
+  public static CAS casWithSofaDataArray() throws Exception {
+    CAS cas = CasCreationUtils.createCas();
+
+    byte[] byteArray = "This is a test".getBytes(StandardCharsets.UTF_8);
+    ByteArrayFS sofaDataArray = cas.createByteArrayFS(byteArray.length);
+    for (int i = 0; i < byteArray.length; i++) {
+      sofaDataArray.set(i, byteArray[i]);
+    }
+
+    cas.setSofaDataArray(sofaDataArray, "text/plain");
+
+    return cas;
+  }
 }
diff --git a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/datasuites/XmiFileDataSuite.java b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/datasuites/XmiFileDataSuite.java
index b0ac68c..ae7ddf2 100644
--- a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/datasuites/XmiFileDataSuite.java
+++ b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/datasuites/XmiFileDataSuite.java
@@ -48,9 +48,13 @@ public class XmiFileDataSuite {
           "XmiFileDataSuite");
 
   public static List<CasSourceTargetConfiguration> configurations() throws IOException {
+    return configurations(XMI_SUITE_BASE_PATH);
+  }
+
+  public static List<CasSourceTargetConfiguration> configurations(Path aBase) throws IOException {
     List<CasSourceTargetConfiguration> confs = new ArrayList<>();
 
-    try (Stream<Path> fileStream = Files.list(XMI_SUITE_BASE_PATH)
+    try (Stream<Path> fileStream = Files.list(aBase)
             .filter(p -> isDirectory(p) && !p.toFile().isHidden())) {
 
       fileStream.forEach(testSuiteFolder -> confs.add(buildConfiguration(testSuiteFolder)));
diff --git a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/scenario/SerRefTestScenario.java b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/scenario/SerRefTestScenario.java
index 351a3e2..fc6d15b 100644
--- a/uimaj-core/src/test/java/org/apache/uima/cas/serdes/scenario/SerRefTestScenario.java
+++ b/uimaj-core/src/test/java/org/apache/uima/cas/serdes/scenario/SerRefTestScenario.java
@@ -32,8 +32,11 @@ import org.apache.uima.cas.CAS;
 import org.apache.uima.cas.serdes.TestType;
 import org.apache.uima.cas.serdes.transitions.CasSourceTargetConfiguration;
 import org.assertj.core.internal.Failures;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class SerRefTestScenario implements Runnable {
+  private final Logger log = LoggerFactory.getLogger(getClass());
   private final String title;
   private final FailableSupplier<CAS, ?> sourceCasSupplier;
   private final Path referenceCasFile;
@@ -87,6 +90,7 @@ public class SerRefTestScenario implements Runnable {
     CAS sourceCas = createSourceCas();
 
     // Serialize CAS to target file
+    log.info("Serializing source CAS to {}", targetCasFile);
     serialize(sourceCas, targetCasFile);
 
     // Additionally, serialize the data as XMI and also write the type system
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithSofaDataArray/cas.bin b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithSofaDataArray/cas.bin
new file mode 100644
index 0000000..d57c1bb
Binary files /dev/null and b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithSofaDataArray/cas.bin differ
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithSofaDataArray/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithSofaDataArray/debug-typesystem.xml
new file mode 100644
index 0000000..07e327a
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithSofaDataArray/debug-typesystem.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<typeSystemDescription xmlns="http://uima.apache.org/resourceSpecifier">
+    <types>
+        <typeDescription>
+            <name>uima.tcas.DocumentAnnotation</name>
+            <description/>
+            <supertypeName>uima.tcas.Annotation</supertypeName>
+            <features>
+                <featureDescription>
+                    <name>language</name>
+                    <description/>
+                    <rangeTypeName>uima.cas.String</rangeTypeName>
+                </featureDescription>
+            </features>
+        </typeDescription>
+    </types>
+</typeSystemDescription>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithSofaDataArray/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithSofaDataArray/debug.xmi
new file mode 100644
index 0000000..89075f6
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithSofaDataArray/debug.xmi
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <cas:Sofa xmi:id="2" sofaNum="1" sofaID="_InitialView" mimeType="text/plain" sofaArray="1"/>
+    <cas:ByteArray xmi:id="1" elements="5468697320697320612074657374"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithSofaDataURI/cas.bin b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithSofaDataURI/cas.bin
new file mode 100644
index 0000000..6d6a93e
Binary files /dev/null and b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithSofaDataURI/cas.bin differ
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithSofaDataURI/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithSofaDataURI/debug-typesystem.xml
new file mode 100644
index 0000000..07e327a
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithSofaDataURI/debug-typesystem.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<typeSystemDescription xmlns="http://uima.apache.org/resourceSpecifier">
+    <types>
+        <typeDescription>
+            <name>uima.tcas.DocumentAnnotation</name>
+            <description/>
+            <supertypeName>uima.tcas.Annotation</supertypeName>
+            <features>
+                <featureDescription>
+                    <name>language</name>
+                    <description/>
+                    <rangeTypeName>uima.cas.String</rangeTypeName>
+                </featureDescription>
+            </features>
+        </typeDescription>
+    </types>
+</typeSystemDescription>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithSofaDataURI/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithSofaDataURI/debug.xmi
new file mode 100644
index 0000000..c9d8a61
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_TSI_Test/ser-ref/casWithSofaDataURI/debug.xmi
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text/plain" sofaURI="file:/Users/rec/git/GROUP-oss/uima-uimaj/uimaj-core/target/test-classes/ProgrammaticallyCreatedCasDataSuite/document.txt"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithSofaDataArray/cas.bin b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithSofaDataArray/cas.bin
new file mode 100644
index 0000000..1f1f618
Binary files /dev/null and b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithSofaDataArray/cas.bin differ
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithSofaDataArray/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithSofaDataArray/debug-typesystem.xml
new file mode 100644
index 0000000..07e327a
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithSofaDataArray/debug-typesystem.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<typeSystemDescription xmlns="http://uima.apache.org/resourceSpecifier">
+    <types>
+        <typeDescription>
+            <name>uima.tcas.DocumentAnnotation</name>
+            <description/>
+            <supertypeName>uima.tcas.Annotation</supertypeName>
+            <features>
+                <featureDescription>
+                    <name>language</name>
+                    <description/>
+                    <rangeTypeName>uima.cas.String</rangeTypeName>
+                </featureDescription>
+            </features>
+        </typeDescription>
+    </types>
+</typeSystemDescription>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithSofaDataArray/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithSofaDataArray/debug.xmi
new file mode 100644
index 0000000..89075f6
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithSofaDataArray/debug.xmi
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <cas:Sofa xmi:id="2" sofaNum="1" sofaID="_InitialView" mimeType="text/plain" sofaArray="1"/>
+    <cas:ByteArray xmi:id="1" elements="5468697320697320612074657374"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithSofaDataURI/cas.bin b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithSofaDataURI/cas.bin
new file mode 100644
index 0000000..70b804e
Binary files /dev/null and b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithSofaDataURI/cas.bin differ
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithSofaDataURI/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithSofaDataURI/debug-typesystem.xml
new file mode 100644
index 0000000..07e327a
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithSofaDataURI/debug-typesystem.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<typeSystemDescription xmlns="http://uima.apache.org/resourceSpecifier">
+    <types>
+        <typeDescription>
+            <name>uima.tcas.DocumentAnnotation</name>
+            <description/>
+            <supertypeName>uima.tcas.Annotation</supertypeName>
+            <features>
+                <featureDescription>
+                    <name>language</name>
+                    <description/>
+                    <rangeTypeName>uima.cas.String</rangeTypeName>
+                </featureDescription>
+            </features>
+        </typeDescription>
+    </types>
+</typeSystemDescription>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithSofaDataURI/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithSofaDataURI/debug.xmi
new file mode 100644
index 0000000..c9d8a61
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_BINARY_Test/ser-ref/casWithSofaDataURI/debug.xmi
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text/plain" sofaURI="file:/Users/rec/git/GROUP-oss/uima-uimaj/uimaj-core/target/test-classes/ProgrammaticallyCreatedCasDataSuite/document.txt"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithSofaDataArray/cas.bin b/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithSofaDataArray/cas.bin
new file mode 100644
index 0000000..460640d
Binary files /dev/null and b/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithSofaDataArray/cas.bin differ
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithSofaDataArray/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithSofaDataArray/debug-typesystem.xml
new file mode 100644
index 0000000..07e327a
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithSofaDataArray/debug-typesystem.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<typeSystemDescription xmlns="http://uima.apache.org/resourceSpecifier">
+    <types>
+        <typeDescription>
+            <name>uima.tcas.DocumentAnnotation</name>
+            <description/>
+            <supertypeName>uima.tcas.Annotation</supertypeName>
+            <features>
+                <featureDescription>
+                    <name>language</name>
+                    <description/>
+                    <rangeTypeName>uima.cas.String</rangeTypeName>
+                </featureDescription>
+            </features>
+        </typeDescription>
+    </types>
+</typeSystemDescription>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithSofaDataArray/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithSofaDataArray/debug.xmi
new file mode 100644
index 0000000..89075f6
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithSofaDataArray/debug.xmi
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <cas:Sofa xmi:id="2" sofaNum="1" sofaID="_InitialView" mimeType="text/plain" sofaArray="1"/>
+    <cas:ByteArray xmi:id="1" elements="5468697320697320612074657374"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithSofaDataURI/cas.bin b/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithSofaDataURI/cas.bin
new file mode 100644
index 0000000..002cd76
Binary files /dev/null and b/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithSofaDataURI/cas.bin differ
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithSofaDataURI/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithSofaDataURI/debug-typesystem.xml
new file mode 100644
index 0000000..07e327a
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithSofaDataURI/debug-typesystem.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<typeSystemDescription xmlns="http://uima.apache.org/resourceSpecifier">
+    <types>
+        <typeDescription>
+            <name>uima.tcas.DocumentAnnotation</name>
+            <description/>
+            <supertypeName>uima.tcas.Annotation</supertypeName>
+            <features>
+                <featureDescription>
+                    <name>language</name>
+                    <description/>
+                    <rangeTypeName>uima.cas.String</rangeTypeName>
+                </featureDescription>
+            </features>
+        </typeDescription>
+    </types>
+</typeSystemDescription>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithSofaDataURI/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithSofaDataURI/debug.xmi
new file mode 100644
index 0000000..c9d8a61
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_COMPRESSED_FILTERED_TSI_Test/ser-ref/casWithSofaDataURI/debug.xmi
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text/plain" sofaURI="file:/Users/rec/git/GROUP-oss/uima-uimaj/uimaj-core/target/test-classes/ProgrammaticallyCreatedCasDataSuite/document.txt"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithSofaDataArray/cas.bin b/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithSofaDataArray/cas.bin
new file mode 100644
index 0000000..42c58f2
Binary files /dev/null and b/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithSofaDataArray/cas.bin differ
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithSofaDataArray/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithSofaDataArray/debug-typesystem.xml
new file mode 100644
index 0000000..07e327a
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithSofaDataArray/debug-typesystem.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<typeSystemDescription xmlns="http://uima.apache.org/resourceSpecifier">
+    <types>
+        <typeDescription>
+            <name>uima.tcas.DocumentAnnotation</name>
+            <description/>
+            <supertypeName>uima.tcas.Annotation</supertypeName>
+            <features>
+                <featureDescription>
+                    <name>language</name>
+                    <description/>
+                    <rangeTypeName>uima.cas.String</rangeTypeName>
+                </featureDescription>
+            </features>
+        </typeDescription>
+    </types>
+</typeSystemDescription>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithSofaDataArray/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithSofaDataArray/debug.xmi
new file mode 100644
index 0000000..89075f6
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithSofaDataArray/debug.xmi
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <cas:Sofa xmi:id="2" sofaNum="1" sofaID="_InitialView" mimeType="text/plain" sofaArray="1"/>
+    <cas:ByteArray xmi:id="1" elements="5468697320697320612074657374"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithSofaDataURI/cas.bin b/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithSofaDataURI/cas.bin
new file mode 100644
index 0000000..d567692
Binary files /dev/null and b/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithSofaDataURI/cas.bin differ
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithSofaDataURI/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithSofaDataURI/debug-typesystem.xml
new file mode 100644
index 0000000..07e327a
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithSofaDataURI/debug-typesystem.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<typeSystemDescription xmlns="http://uima.apache.org/resourceSpecifier">
+    <types>
+        <typeDescription>
+            <name>uima.tcas.DocumentAnnotation</name>
+            <description/>
+            <supertypeName>uima.tcas.Annotation</supertypeName>
+            <features>
+                <featureDescription>
+                    <name>language</name>
+                    <description/>
+                    <rangeTypeName>uima.cas.String</rangeTypeName>
+                </featureDescription>
+            </features>
+        </typeDescription>
+    </types>
+</typeSystemDescription>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithSofaDataURI/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithSofaDataURI/debug.xmi
new file mode 100644
index 0000000..c9d8a61
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_SERIALIZED_TSI_Test/ser-ref/casWithSofaDataURI/debug.xmi
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text/plain" sofaURI="file:/Users/rec/git/GROUP-oss/uima-uimaj/uimaj-core/target/test-classes/ProgrammaticallyCreatedCasDataSuite/document.txt"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithSofaDataArray/cas.xcas b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithSofaDataArray/cas.xcas
new file mode 100644
index 0000000..8c41f75
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithSofaDataArray/cas.xcas
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?><CAS version="2">
+    <uima.cas.Sofa _indexed="0" _id="2" sofaNum="1" sofaID="_InitialView" mimeType="text/plain" _ref_sofaArray="1"/>
+    <uima.cas.ByteArray _id="1" size="14">
+        <i>84</i>
+        <i>104</i>
+        <i>105</i>
+        <i>115</i>
+        <i>32</i>
+        <i>105</i>
+        <i>115</i>
+        <i>32</i>
+        <i>97</i>
+        <i>32</i>
+        <i>116</i>
+        <i>101</i>
+        <i>115</i>
+        <i>116</i>
+    </uima.cas.ByteArray>
+</CAS>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithSofaDataArray/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithSofaDataArray/debug-typesystem.xml
new file mode 100644
index 0000000..07e327a
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithSofaDataArray/debug-typesystem.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<typeSystemDescription xmlns="http://uima.apache.org/resourceSpecifier">
+    <types>
+        <typeDescription>
+            <name>uima.tcas.DocumentAnnotation</name>
+            <description/>
+            <supertypeName>uima.tcas.Annotation</supertypeName>
+            <features>
+                <featureDescription>
+                    <name>language</name>
+                    <description/>
+                    <rangeTypeName>uima.cas.String</rangeTypeName>
+                </featureDescription>
+            </features>
+        </typeDescription>
+    </types>
+</typeSystemDescription>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithSofaDataArray/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithSofaDataArray/debug.xmi
new file mode 100644
index 0000000..89075f6
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithSofaDataArray/debug.xmi
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <cas:Sofa xmi:id="2" sofaNum="1" sofaID="_InitialView" mimeType="text/plain" sofaArray="1"/>
+    <cas:ByteArray xmi:id="1" elements="5468697320697320612074657374"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithSofaDataURI/cas.xcas b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithSofaDataURI/cas.xcas
new file mode 100644
index 0000000..cbcaf50
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithSofaDataURI/cas.xcas
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?><CAS version="2">
+    <uima.cas.Sofa _indexed="0" _id="1" sofaNum="1" sofaID="_InitialView" mimeType="text/plain" sofaURI="file:/Users/rec/git/GROUP-oss/uima-uimaj/uimaj-core/target/test-classes/ProgrammaticallyCreatedCasDataSuite/document.txt"/>
+</CAS>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithSofaDataURI/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithSofaDataURI/debug-typesystem.xml
new file mode 100644
index 0000000..07e327a
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithSofaDataURI/debug-typesystem.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<typeSystemDescription xmlns="http://uima.apache.org/resourceSpecifier">
+    <types>
+        <typeDescription>
+            <name>uima.tcas.DocumentAnnotation</name>
+            <description/>
+            <supertypeName>uima.tcas.Annotation</supertypeName>
+            <features>
+                <featureDescription>
+                    <name>language</name>
+                    <description/>
+                    <rangeTypeName>uima.cas.String</rangeTypeName>
+                </featureDescription>
+            </features>
+        </typeDescription>
+    </types>
+</typeSystemDescription>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithSofaDataURI/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithSofaDataURI/debug.xmi
new file mode 100644
index 0000000..c9d8a61
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XCAS_Test/ser-ref/casWithSofaDataURI/debug.xmi
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text/plain" sofaURI="file:/Users/rec/git/GROUP-oss/uima-uimaj/uimaj-core/target/test-classes/ProgrammaticallyCreatedCasDataSuite/document.txt"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithSofaDataArray/data.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithSofaDataArray/data.xmi
new file mode 100644
index 0000000..89075f6
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithSofaDataArray/data.xmi
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <cas:Sofa xmi:id="2" sofaNum="1" sofaID="_InitialView" mimeType="text/plain" sofaArray="1"/>
+    <cas:ByteArray xmi:id="1" elements="5468697320697320612074657374"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithSofaDataArray/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithSofaDataArray/debug-typesystem.xml
new file mode 100644
index 0000000..07e327a
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithSofaDataArray/debug-typesystem.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<typeSystemDescription xmlns="http://uima.apache.org/resourceSpecifier">
+    <types>
+        <typeDescription>
+            <name>uima.tcas.DocumentAnnotation</name>
+            <description/>
+            <supertypeName>uima.tcas.Annotation</supertypeName>
+            <features>
+                <featureDescription>
+                    <name>language</name>
+                    <description/>
+                    <rangeTypeName>uima.cas.String</rangeTypeName>
+                </featureDescription>
+            </features>
+        </typeDescription>
+    </types>
+</typeSystemDescription>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithSofaDataArray/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithSofaDataArray/debug.xmi
new file mode 100644
index 0000000..89075f6
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithSofaDataArray/debug.xmi
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <cas:Sofa xmi:id="2" sofaNum="1" sofaID="_InitialView" mimeType="text/plain" sofaArray="1"/>
+    <cas:ByteArray xmi:id="1" elements="5468697320697320612074657374"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithSofaDataURI/data.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithSofaDataURI/data.xmi
new file mode 100644
index 0000000..c9d8a61
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithSofaDataURI/data.xmi
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text/plain" sofaURI="file:/Users/rec/git/GROUP-oss/uima-uimaj/uimaj-core/target/test-classes/ProgrammaticallyCreatedCasDataSuite/document.txt"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithSofaDataURI/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithSofaDataURI/debug-typesystem.xml
new file mode 100644
index 0000000..07e327a
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithSofaDataURI/debug-typesystem.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<typeSystemDescription xmlns="http://uima.apache.org/resourceSpecifier">
+    <types>
+        <typeDescription>
+            <name>uima.tcas.DocumentAnnotation</name>
+            <description/>
+            <supertypeName>uima.tcas.Annotation</supertypeName>
+            <features>
+                <featureDescription>
+                    <name>language</name>
+                    <description/>
+                    <rangeTypeName>uima.cas.String</rangeTypeName>
+                </featureDescription>
+            </features>
+        </typeDescription>
+    </types>
+</typeSystemDescription>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithSofaDataURI/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithSofaDataURI/debug.xmi
new file mode 100644
index 0000000..c9d8a61
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_0_PRETTY_Test/ser-ref/casWithSofaDataURI/debug.xmi
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text/plain" sofaURI="file:/Users/rec/git/GROUP-oss/uima-uimaj/uimaj-core/target/test-classes/ProgrammaticallyCreatedCasDataSuite/document.txt"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithSofaDataArray/data.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithSofaDataArray/data.xmi
new file mode 100644
index 0000000..802947a
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithSofaDataArray/data.xmi
@@ -0,0 +1,5 @@
+<?xml version="1.1" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <cas:Sofa xmi:id="2" sofaNum="1" sofaID="_InitialView" mimeType="text/plain" sofaArray="1"/>
+    <cas:ByteArray xmi:id="1" elements="5468697320697320612074657374"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithSofaDataArray/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithSofaDataArray/debug-typesystem.xml
new file mode 100644
index 0000000..07e327a
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithSofaDataArray/debug-typesystem.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<typeSystemDescription xmlns="http://uima.apache.org/resourceSpecifier">
+    <types>
+        <typeDescription>
+            <name>uima.tcas.DocumentAnnotation</name>
+            <description/>
+            <supertypeName>uima.tcas.Annotation</supertypeName>
+            <features>
+                <featureDescription>
+                    <name>language</name>
+                    <description/>
+                    <rangeTypeName>uima.cas.String</rangeTypeName>
+                </featureDescription>
+            </features>
+        </typeDescription>
+    </types>
+</typeSystemDescription>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithSofaDataArray/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithSofaDataArray/debug.xmi
new file mode 100644
index 0000000..89075f6
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithSofaDataArray/debug.xmi
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <cas:Sofa xmi:id="2" sofaNum="1" sofaID="_InitialView" mimeType="text/plain" sofaArray="1"/>
+    <cas:ByteArray xmi:id="1" elements="5468697320697320612074657374"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithSofaDataURI/data.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithSofaDataURI/data.xmi
new file mode 100644
index 0000000..e0222d9
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithSofaDataURI/data.xmi
@@ -0,0 +1,4 @@
+<?xml version="1.1" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text/plain" sofaURI="file:/Users/rec/git/GROUP-oss/uima-uimaj/uimaj-core/target/test-classes/ProgrammaticallyCreatedCasDataSuite/document.txt"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithSofaDataURI/debug-typesystem.xml b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithSofaDataURI/debug-typesystem.xml
new file mode 100644
index 0000000..07e327a
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithSofaDataURI/debug-typesystem.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<typeSystemDescription xmlns="http://uima.apache.org/resourceSpecifier">
+    <types>
+        <typeDescription>
+            <name>uima.tcas.DocumentAnnotation</name>
+            <description/>
+            <supertypeName>uima.tcas.Annotation</supertypeName>
+            <features>
+                <featureDescription>
+                    <name>language</name>
+                    <description/>
+                    <rangeTypeName>uima.cas.String</rangeTypeName>
+                </featureDescription>
+            </features>
+        </typeDescription>
+    </types>
+</typeSystemDescription>
diff --git a/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithSofaDataURI/debug.xmi b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithSofaDataURI/debug.xmi
new file mode 100644
index 0000000..c9d8a61
--- /dev/null
+++ b/uimaj-core/src/test/resources/CasSerializationDeserialization_XMI_1_1_PRETTY_Test/ser-ref/casWithSofaDataURI/debug.xmi
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?><xmi:XMI xmlns:tcas="http:///uima/tcas.ecore" xmlns:xmi="http://www.omg.org/XMI" xmlns:cas="http:///uima/cas.ecore" xmi:version="2.0">
+    <cas:NULL xmi:id="0"/>
+    <cas:Sofa xmi:id="1" sofaNum="1" sofaID="_InitialView" mimeType="text/plain" sofaURI="file:/Users/rec/git/GROUP-oss/uima-uimaj/uimaj-core/target/test-classes/ProgrammaticallyCreatedCasDataSuite/document.txt"/>
+</xmi:XMI>
diff --git a/uimaj-core/src/test/resources/ProgrammaticallyCreatedCasDataSuite/document.txt b/uimaj-core/src/test/resources/ProgrammaticallyCreatedCasDataSuite/document.txt
new file mode 100644
index 0000000..83bfb5e
--- /dev/null
+++ b/uimaj-core/src/test/resources/ProgrammaticallyCreatedCasDataSuite/document.txt
@@ -0,0 +1 @@
+This is a simple example text document.