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 2016/12/14 23:11:08 UTC

svn commit: r1774353 - in /uima/uimaj/branches/experiment-v3-jcas/uimaj-core: ./ src/main/java/ src/main/java/org/apache/uima/analysis_engine/impl/ src/main/java/org/apache/uima/cas/impl/ src/main/java/org/apache/uima/resource/metadata/impl/ src/main/j...

Author: schor
Date: Wed Dec 14 23:11:07 2016
New Revision: 1774353

URL: http://svn.apache.org/viewvc?rev=1774353&view=rev
Log:
[UIMA-5177] fix xml serialization API calls for namespaces so Saxon works.

Modified:
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/   (props changed)
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/pom.xml
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/   (props changed)
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/ResultSpecification_impl.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/TypeOrFeature_impl.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/XCASSerializer.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiCasDeserializer.java   (props changed)
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiCasSerializer.java   (contents, props changed)
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiSerializationSharedData.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/ConfigurationGroup_impl.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/Import_impl.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/MetaDataObjectSerializer_plain.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/MetaDataObject_impl.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/search/impl/Attribute_impl.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/search/impl/Filter_impl.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/search/impl/Style_impl.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/util/XMLSerializer.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/util/impl/XMLParser_impl.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/AnalysisEngine_implTest.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/java/org/apache/uima/util/   (props changed)
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/java/org/apache/uima/util/CasIOUtilsTest.java   (contents, props changed)
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/java/org/apache/uima/util/CasToInlineXmlTest.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/resources/   (props changed)
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/resources/TextAnalysisEngineImplTest/AggregateWithManyDelegates.xml

Propchange: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Dec 14 23:11:07 2016
@@ -4,4 +4,4 @@
 /uima/uimaj/branches/depend-on-parent-pom-4/uimaj-core:961329-961745
 /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-core:1436573-1462257
 /uima/uimaj/branches/mavenAlign/uimaj-core:933273-944396
-/uima/uimaj/trunk/uimaj-core:1690273-1703264,1756659,1756914,1757094,1757287-1757385,1757523
+/uima/uimaj/trunk/uimaj-core:1690273-1703264,1756659,1756914,1757094,1757287-1757385,1757523,1769119,1773486-1774106

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/pom.xml
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/pom.xml?rev=1774353&r1=1774352&r2=1774353&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/pom.xml (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/pom.xml Wed Dec 14 23:11:07 2016
@@ -56,6 +56,7 @@
   <properties>
     <uimaScmProject>${project.artifactId}</uimaScmProject>
     <postNoticeText>${ibmNoticeText}</postNoticeText>
+    <maven.surefire.heap>650M</maven.surefire.heap>
   </properties>
   
 	<dependencies>
@@ -72,6 +73,34 @@
 			<version>${project.parent.version}</version>
 			<scope>test</scope>
 		</dependency>
+				<!--  Uncomment one of these to add Saxon8 or 9 to the classpath for JUnit tests. 
+		      1 fails due to different formatting and a dropped xmlns attribute, 
+		      5 work when run separately or by mvn, but fail when running all tests from Eclipse:
+		          Caused by: org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element '....'
+	    -->
+
+   <!--
+		<dependency>
+		  <groupId>net.sf.saxon</groupId>
+		  <artifactId>Saxon-HE</artifactId>
+		  <version>9.7.0-14</version>
+		  <scope>test</scope>
+		</dependency>
+    	
+ 
+		<dependency>
+		  <groupId>net.sf.saxon</groupId>
+    	  <artifactId>saxon</artifactId>
+    	  <version>8.7</version>
+    	  <scope>test</scope>
+		</dependency>
+		<dependency>
+		  <groupId>net.sf.saxon</groupId>
+    	  <artifactId>saxon-dom</artifactId>
+    	  <version>8.7</version>
+    	  <scope>test</scope>
+		</dependency>
+  -->
 		
     <!-- For decompiling recompiling jcas experiments -->
     <!--

Propchange: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Dec 14 23:11:07 2016
@@ -5,4 +5,4 @@
 /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-core/src/main/java:1436573-1462257
 /uima/uimaj/branches/mavenAlign/uimaj-core/src/main/java:933273-944396
 /uima/uimaj/branches/test-parent-pom-6/uimaj-core/src/main/java:1024030
-/uima/uimaj/trunk/uimaj-core/src/main/java:1690273-1703264,1756659,1756914,1757094,1757287-1757385,1757523
+/uima/uimaj/trunk/uimaj-core/src/main/java:1690273-1703264,1756659,1756914,1757094,1757287-1757385,1757523,1769119,1773486-1774106

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/ResultSpecification_impl.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/ResultSpecification_impl.java?rev=1774353&r1=1774352&r2=1774353&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/ResultSpecification_impl.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/ResultSpecification_impl.java Wed Dec 14 23:11:07 2016
@@ -470,7 +470,7 @@ public final class ResultSpecification_i
    */
   @Override
   protected XmlizationInfo getXmlizationInfo() {
-    return new XmlizationInfo("resultSpecification", null,
+    return new XmlizationInfo("resultSpecification", "",
             new PropertyXmlInfo[] { new PropertyXmlInfo("resultTypesAndFeatures", null) });
   }
 

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/TypeOrFeature_impl.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/TypeOrFeature_impl.java?rev=1774353&r1=1774352&r2=1774353&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/TypeOrFeature_impl.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/TypeOrFeature_impl.java Wed Dec 14 23:11:07 2016
@@ -143,7 +143,7 @@ public class TypeOrFeature_impl extends
       // if allAnnotatorFeatures is true, write that as an attribute
       if (isAllAnnotatorFeatures()) {
         AttributesImpl attrs = new AttributesImpl();
-        attrs.addAttribute("", "allAnnotatorFeatures", "allAnnotatorFeatures", null, "true");
+        attrs.addAttribute("", "allAnnotatorFeatures", "allAnnotatorFeatures", "", "true");
         serializer.outputStartElement(node, namespace, "type", "type", attrs);
 //        aContentHandler.startElement(getXmlizationInfo().namespace, "type", "type", attrs);
       } else {

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/XCASSerializer.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/XCASSerializer.java?rev=1774353&r1=1774352&r2=1774353&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/XCASSerializer.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/XCASSerializer.java Wed Dec 14 23:11:07 2016
@@ -318,7 +318,8 @@ public class XCASSerializer {
 
     private void startElement(String tag, Attributes attrs, int num) throws SAXException {
       numChildren = num;
-      ch.startElement("", "", tag, attrs);
+      // Saxon requirement? Can't set just one of localName & qName to ""
+      ch.startElement("", tag, tag, attrs);
     }
 
     private void endElement(String tag) throws SAXException {

Propchange: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiCasDeserializer.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Dec 14 23:11:07 2016
@@ -5,4 +5,4 @@
 /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiCasDeserializer.java:1436573-1462257
 /uima/uimaj/branches/mavenAlign/uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiCasDeserializer.java:933273-944396
 /uima/uimaj/branches/test-parent-pom-6/uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiCasDeserializer.java:1024030
-/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiCasDeserializer.java:1690273-1758857
+/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiCasDeserializer.java:1690273-1758857,1773486-1774106

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiCasSerializer.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiCasSerializer.java?rev=1774353&r1=1774352&r2=1774353&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiCasSerializer.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiCasSerializer.java Wed Dec 14 23:11:07 2016
@@ -85,7 +85,7 @@ import org.xml.sax.helpers.AttributesImp
  *       that were set aside when deserializing, and are to be "merged" back in when serializing
  *   <li>(S) a Marker (default: null) if supplied, where the separation between "new" and previously
  *       exisiting FeatureStructures are in the CAS; causes "delta" serialization, where only the 
- *       new and changed FeatureStructures are serailized.
+ *       new and changed FeatureStructures are serialized.
  * </ul>
  * 
  * Once the XmiCasSerializer instance is configured, the serialize method is called
@@ -696,7 +696,7 @@ public class XmiCasSerializer {
      */
     void writeNullObject() throws SAXException {
       workAttrs.clear();
-      addAttribute(workAttrs, ID_ATTR_NAME, "0");
+      addIdAttribute(workAttrs, "0");
       XmlElementName elemName = uimaTypeName2XmiElementName("uima.cas.NULL");
       startElement(elemName, workAttrs, 0);
       endElement(elemName);
@@ -737,8 +737,8 @@ public class XmiCasSerializer {
         endElement(xmlElementName);        
 
       } else {
-
-        workAttrs.addAttribute("", "", "elements", "CDATA", arrayToString(fsArray, typeClass));
+        // Saxon requirement? - can't omit (by using "") just one of localName & qName
+        workAttrs.addAttribute("", "elements", "elements", "CDATA", arrayToString(fsArray, typeClass));
         startElement(xmlElementName, workAttrs, 0);
         endElement(xmlElementName);      
       }
@@ -811,7 +811,7 @@ public class XmiCasSerializer {
         OotsElementData oed = it.next();
         workAttrs.clear();
         // Add ID attribute
-        addAttribute(workAttrs, ID_ATTR_NAME, oed.xmiId);
+        addIdAttribute(workAttrs, oed.xmiId);
 
         // Add other attributes
         Iterator<XmlAttribute> attrIt = oed.attributes.iterator();
@@ -968,7 +968,7 @@ public class XmiCasSerializer {
 //                reportWarning("Warning: multiple references to a ListFS.  Reference identity will not be preserved.");
 //              }
               for (String string : listOfStrings) {
-                childElements.add(new XmlElementNameAndContents(new XmlElementName(null, featName,
+                childElements.add(new XmlElementNameAndContents(new XmlElementName("", featName,
                         featName), string));
               }
             }
@@ -983,7 +983,7 @@ public class XmiCasSerializer {
         } // end of switch
         
         if (attrValue != null && featName != null) {
-          addAttribute(attrs, featName, attrValue, null);
+          addAttribute(attrs, featName, attrValue, "");
         }
       } // end of for loop over all features
       
@@ -1139,7 +1139,7 @@ public class XmiCasSerializer {
       // break for strings containing spaces. So use child elements instead.
       
       for (String s : stringArray._getTheArray()) {
-        resultList.add(new XmlElementNameAndContents(new XmlElementName(null, featName, featName),
+        resultList.add(new XmlElementNameAndContents(new XmlElementName("", featName, featName),
             s));
       }
     }
@@ -1195,12 +1195,11 @@ public class XmiCasSerializer {
     
     private void startElement(XmlElementName name, Attributes attrs, int aNumChildren)
         throws SAXException {
-//      numChildren = aNumChildren;
-      // don't include NS URI here. That causes XMI serializer to
-      // include the xmlns attribute in every element. Instead we
-      // explicitly added these attributes to the root element.
+      // Previously the NS URI was omitted, claiming:	
+      //    >>> That causes XMI serializer to include the xmlns attribute in every element <<<
+      // But without it Saxon omits process namespaces
       ch.startElement(
-          ""/* name.nsUri */, 
+          name.nsUri, 
           name.localName, 
           name.qName, 
           attrs);
@@ -1222,8 +1221,17 @@ public class XmiCasSerializer {
     //   http://www.w3.org/TR/xmlschema-2/
     //     decimal string boolean 
     private void addAttribute(AttributesImpl attrs, String attrName, String attrValue, String type) {
-      final int index = attrName.lastIndexOf(':') + 1;
-      attrs.addAttribute("", attrName.substring(index), attrName, type, attrValue);
+      // Provide identical values for the qName & localName (although Javadocs indicate that both can be omitted!)
+      attrs.addAttribute("", attrName, attrName, type, attrValue);
+      // Saxon throws an exception if either omitted:
+      //     "Saxon requires an XML parser that reports the QName of each element"
+      //     "Parser configuration problem: namespsace reporting is not enabled"
+      // The IBM JRE implementation produces bad xml if the qName is omitted,
+      //     but handles a missing localName correctly
+    }
+
+    private void addIdAttribute(AttributesImpl attrs, String attrValue) {
+      attrs.addAttribute(XMI_NS_URI, "id", ID_ATTR_NAME, CDATA_TYPE, attrValue);
     }
 
     private void addText(String text) throws SAXException {
@@ -1239,7 +1247,7 @@ public class XmiCasSerializer {
     @Override
     protected boolean writeFsStart(TOP fs, int typeCode /* ignored */) {
       workAttrs.clear();
-      addAttribute(workAttrs, ID_ATTR_NAME, cds.getXmiId(fs));
+      addIdAttribute(workAttrs, cds.getXmiId(fs));
       return false;  // ignored
     }
    

Propchange: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiCasSerializer.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Dec 14 23:11:07 2016
@@ -5,4 +5,4 @@
 /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiCasSerializer.java:1436573-1462257
 /uima/uimaj/branches/mavenAlign/uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiCasSerializer.java:933273-944396
 /uima/uimaj/branches/test-parent-pom-6/uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiCasSerializer.java:1024030
-/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiCasSerializer.java:1690273-1758858
+/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiCasSerializer.java:1690273-1758858,1769119,1773486-1774106

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiSerializationSharedData.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiSerializationSharedData.java?rev=1774353&r1=1774352&r2=1774353&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiSerializationSharedData.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/XmiSerializationSharedData.java Wed Dec 14 23:11:07 2016
@@ -274,7 +274,7 @@ public class XmiSerializationSharedData
   
   public static void addOutOfTypeSystemFeature(OotsElementData oed, String featName, List<String> featVals) {
     oed.multiValuedFeatures.add(new NameMultiValue(featName, featVals));
-    XmlElementName elemName = new XmlElementName(null,featName,featName);
+    XmlElementName elemName = new XmlElementName("",featName,featName);
     for (String val : featVals) {
       oed.childElements.add(new XmlElementNameAndContents(elemName, val));
     }    

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/ConfigurationGroup_impl.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/ConfigurationGroup_impl.java?rev=1774353&r1=1774352&r2=1774353&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/ConfigurationGroup_impl.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/ConfigurationGroup_impl.java Wed Dec 14 23:11:07 2016
@@ -122,7 +122,7 @@ public class ConfigurationGroup_impl ext
     for (int i = 1; i < names.length; i++) {
       buf.append(' ').append(names[i]);
     }
-    attrs.addAttribute("", "names", "names", null, buf.toString());
+    attrs.addAttribute("", "names", "names", "", buf.toString());
     return attrs;
   }
 

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/Import_impl.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/Import_impl.java?rev=1774353&r1=1774352&r2=1774353&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/Import_impl.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/Import_impl.java Wed Dec 14 23:11:07 2016
@@ -179,10 +179,10 @@ public class Import_impl extends MetaDat
     String namespace = getXmlizationInfo().namespace;
     AttributesImpl attrs = new AttributesImpl();
     if (getName() != null) {
-      attrs.addAttribute("", "name", "name", null, getName());
+      attrs.addAttribute("", "name", "name", "", getName());
     }
     if (getLocation() != null) {
-      attrs.addAttribute("", "location", "location", null, getLocation());
+      attrs.addAttribute("", "location", "location", "", getLocation());
     }
     Node node = serializer.findMatchingSubElement("import");
     serializer.outputStartElement(node, namespace, "import", "import", attrs);

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/MetaDataObjectSerializer_plain.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/MetaDataObjectSerializer_plain.java?rev=1774353&r1=1774352&r2=1774353&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/MetaDataObjectSerializer_plain.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/MetaDataObjectSerializer_plain.java Wed Dec 14 23:11:07 2016
@@ -74,10 +74,10 @@ class MetaDataObjectSerializer_plain imp
 
   @Override
   public void writeSimpleValueWithTag(String className, Object o, Node node) throws SAXException {
-    outputStartElement(node, null, className, className, EMPTY_ATTRIBUTES);
+    outputStartElement(node, "", className, className, EMPTY_ATTRIBUTES);
     String valStr = o.toString();
     ch.characters(valStr.toCharArray(),  0,  valStr.length());
-    outputEndElement(node, null,  className,  className);
+    outputEndElement(node, "",  className,  className);
   }
   
   @Override
@@ -97,6 +97,13 @@ class MetaDataObjectSerializer_plain imp
     }
     ch.startElement(aNamespace, localname, qname, attributes);
   }
+
+  // only used for default prefix, passing "" as prefix
+  // if ever used for others, need to add endPrefixMapping(String prefix) as well
+  // https://issues.apache.org/jira/browse/UIMA-5177 
+  public void startPrefixMapping(String prefix, String uri) throws SAXException {
+    ch.startPrefixMapping(prefix, uri);
+  }
   
   @Override
   public void outputEndElement(Node node, String aNamespace, String localname, String qname) throws SAXException {

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/MetaDataObject_impl.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/MetaDataObject_impl.java?rev=1774353&r1=1774352&r2=1774353&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/MetaDataObject_impl.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/MetaDataObject_impl.java Wed Dec 14 23:11:07 2016
@@ -863,7 +863,9 @@ public abstract class MetaDataObject_imp
     AttributesImpl attrs = getXMLAttributes();
     
     if (aWriteDefaultNamespaceAttribute && inf.namespace != null) {
-      attrs.addAttribute("", "xmlns", "xmlns", null, inf.namespace);
+//      attrs.addAttribute("", "xmlns", "xmlns", "xs:string", inf.namespace);  // NOTE:  Saxon appears to ignore this ??
+      // this is the way to add a default namespace, correctly.  Works with Saxon and non-Saxon
+      ((MetaDataObjectSerializer_plain)serializer).startPrefixMapping("", inf.namespace); 
     }
     
     // start element
@@ -1131,7 +1133,7 @@ public abstract class MetaDataObject_imp
 
           // write a tag for the value, with a "key" attribute
           AttributesImpl attrs = new AttributesImpl();
-          attrs.addAttribute("", aKeyXmlAttribute, aKeyXmlAttribute, null, key); // are these nulls OK?
+          attrs.addAttribute("", aKeyXmlAttribute, aKeyXmlAttribute, "", key); // nulls not OK - must use ""
           Node innerMatchingNode = getMatchingNode(sc, aValueTagName);
           serializer.outputStartElement(innerMatchingNode, aNamespace, aValueTagName, aValueTagName, attrs);
 

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/search/impl/Attribute_impl.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/search/impl/Attribute_impl.java?rev=1774353&r1=1774352&r2=1774353&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/search/impl/Attribute_impl.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/search/impl/Attribute_impl.java Wed Dec 14 23:11:07 2016
@@ -82,8 +82,8 @@ public class Attribute_impl extends Meta
    */
   protected AttributesImpl getXMLAttributes() {
     AttributesImpl attrs = super.getXMLAttributes();
-    attrs.addAttribute("", "name", "name", null, getName());
-    attrs.addAttribute("", "value", "value", null, getValue());
+    attrs.addAttribute("", "name", "name", "", getName());
+    attrs.addAttribute("", "value", "value", "", getValue());
     return attrs;
   }
 

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/search/impl/Filter_impl.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/search/impl/Filter_impl.java?rev=1774353&r1=1774352&r2=1774353&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/search/impl/Filter_impl.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/search/impl/Filter_impl.java Wed Dec 14 23:11:07 2016
@@ -113,7 +113,7 @@ public class Filter_impl extends MetaDat
           throws SAXException {
     // write the element's start tag
     AttributesImpl attrs = new AttributesImpl();
-    attrs.addAttribute("", "syntax", "syntax", null, getSyntax());
+    attrs.addAttribute("", "syntax", "syntax", "", getSyntax());
 
     // start element
     aContentHandler.startElement("", "filter", "filter", attrs);

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/search/impl/Style_impl.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/search/impl/Style_impl.java?rev=1774353&r1=1774352&r2=1774353&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/search/impl/Style_impl.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/search/impl/Style_impl.java Wed Dec 14 23:11:07 2016
@@ -109,7 +109,7 @@ public class Style_impl extends MetaData
    */
   protected AttributesImpl getXMLAttributes() {
     AttributesImpl attrs = super.getXMLAttributes();
-    attrs.addAttribute("", "name", "name", null, getName());
+    attrs.addAttribute("", "name", "name", "", getName());
     return attrs;
   }
 

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/util/XMLSerializer.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/util/XMLSerializer.java?rev=1774353&r1=1774352&r2=1774353&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/util/XMLSerializer.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/util/XMLSerializer.java Wed Dec 14 23:11:07 2016
@@ -49,6 +49,13 @@ import org.xml.sax.ext.LexicalHandler;
  * Utility class that generates XML output from SAX events or DOM nodes.
  */
 public class XMLSerializer {
+
+  // See Javadocs for javax.xml.transform.TransformerFactory for details on how the TransformerFactory is found:
+  //  the class specified in the system property: javax.xml.transform.TransformerFactory 
+  //  or the value of this property in <jre>/lib/jaxp.properties
+  //  or the class found in any jar that has an entry: META-INF/service/javax.xml.transform.TransformerFactory
+  //  or a platform default.
+  
   private static final SAXTransformerFactory transformerFactory = (SAXTransformerFactory) SAXTransformerFactory
           .newInstance();
 
@@ -73,6 +80,10 @@ public class XMLSerializer {
         mTransformer.setOutputProperty(OutputKeys.INDENT, "yes");
         mTransformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
         mTransformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
+        //   Saxon appears to ignore the above and use a default of 3 unless the following is used
+        //mTransformer.setOutputProperty("{http://saxon.sf.net/}indent-spaces", "4");
+        //   But this fails on Saxon9-HE with:
+        //     net.sf.saxon.trans.LicenseException: Requested feature (custom serialization) requires Saxon-PE
         mTransformer.setOutputProperty(OutputKeys.METHOD, "xml");
       }
 

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/util/impl/XMLParser_impl.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/util/impl/XMLParser_impl.java?rev=1774353&r1=1774352&r2=1774353&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/util/impl/XMLParser_impl.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/util/impl/XMLParser_impl.java Wed Dec 14 23:11:07 2016
@@ -163,6 +163,7 @@ public class XMLParser_impl implements X
         
       XMLReader reader = parser.getXMLReader();
       reader.setFeature("http://xml.org/sax/features/namespace-prefixes", true);
+      // reader.setFeature("http://xml.org/sax/features/namespaces", true);  // Is this needed?
 
       // enable validation if requested
       if (mSchemaValidationEnabled && aNamespaceForSchema != null && aSchemaUrl != null) {

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/AnalysisEngine_implTest.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/AnalysisEngine_implTest.java?rev=1774353&r1=1774352&r2=1774353&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/AnalysisEngine_implTest.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/AnalysisEngine_implTest.java Wed Dec 14 23:11:07 2016
@@ -84,6 +84,7 @@ import org.apache.uima.resource.metadata
 import org.apache.uima.resource.metadata.impl.NameValuePair_impl;
 import org.apache.uima.resource.metadata.impl.TypePriorities_impl;
 import org.apache.uima.resource.metadata.impl.TypeSystemDescription_impl;
+import org.apache.uima.test.junit_extension.FileCompare;
 import org.apache.uima.test.junit_extension.JUnitExtension;
 import org.apache.uima.util.InvalidXMLException;
 import org.apache.uima.util.Level;
@@ -92,6 +93,7 @@ import org.apache.uima.util.XMLInputSour
 import org.apache.uima.util.XMLParser;
 import org.apache.uima.util.XMLSerializer;
 import org.apache.uima.util.impl.ProcessTrace_impl;
+import org.custommonkey.xmlunit.XMLAssert;
 import org.xml.sax.ContentHandler;
 
 import junit.framework.TestCase;
@@ -1567,6 +1569,7 @@ public class AnalysisEngine_implTest ext
     // set the amount to a value which will show up if used
     // indent should not be used because we're using a parser mode which preserves
     // comments and ignorable white space.
+    // NOTE: Saxon appears to force the indent to be 3 - which is what the input file now uses.
     xmlSerializer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
     ContentHandler contentHandler = xmlSerializer.getContentHandler();
     contentHandler.startDocument();
@@ -1574,10 +1577,15 @@ public class AnalysisEngine_implTest ext
     contentHandler.endDocument();
     os.close();
     
+    String inXml = FileCompare.file2String(inFile);
+    String cloneXml = FileCompare.file2String(cloneFile);
+    XMLAssert.assertXMLEqual(inXml,  cloneXml);
     // When building from a source distribution the descriptor may not have
     // appropriate line-ends so compute the length as if always 1 byte.
     int diff = fileLength(cloneFile) - fileLength(inFile);
     // One platform inserts a blank line and a final newline, so don't insist on perfection
+    // NOTE:  This fails with Saxon as it omits the xmlns attribute (why?) and omits the newlines between adjacent comments.
+    // It also produces many differences in indentation if the input is not indented by 3
     assertTrue("File size changed by "+diff+" should be no more than 2", diff >= -2 && diff <= 2);
 
     // Initialize all delegates and check the initialization order (should be declaration order)

Propchange: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/java/org/apache/uima/util/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Dec 14 23:11:07 2016
@@ -4,4 +4,4 @@
 /uima/uimaj/branches/depend-on-parent-pom-4/uimaj-core/src/test/java/org/apache/uima/util:961329-961745
 /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-core/src/test/java/org/apache/uima/util:1436573-1462257
 /uima/uimaj/branches/mavenAlign/uimaj-core/src/test/java/org/apache/uima/util:933273-944396
-/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/util:1690273-1759824
+/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/util:1690273-1759824,1769119,1773486-1774106

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/java/org/apache/uima/util/CasIOUtilsTest.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/java/org/apache/uima/util/CasIOUtilsTest.java?rev=1774353&r1=1774352&r2=1774353&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/java/org/apache/uima/util/CasIOUtilsTest.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/java/org/apache/uima/util/CasIOUtilsTest.java Wed Dec 14 23:11:07 2016
@@ -97,6 +97,9 @@ public class CasIOUtilsTest extends Test
     FileOutputStream docOS = new FileOutputStream(casFile);
     CasIOUtils.save(cas, docOS, SerialFormat.XMI);
     docOS.close();
+    // NOTE - when Saxon saves the cas it omits the prefixes. 
+    //   e.g. produces: <NULL id="0"/>   instead of:    <cas:NULL xmi:id="0"/>
+    // This causes JUnit test failure "unknown type NULL"
     
     // Use a CAS initialized with the "correct" type system or with a different type system?
     CAS casToUse = leniently ? cas2 : cas;

Propchange: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/java/org/apache/uima/util/CasIOUtilsTest.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Dec 14 23:11:07 2016
@@ -4,4 +4,4 @@
 /uima/uimaj/branches/depend-on-parent-pom-4/uimaj-core/src/test/java/org/apache/uima/util/CasIOUtilsTest.java:961329-961745
 /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-core/src/test/java/org/apache/uima/util/CasIOUtilsTest.java:1436573-1462257
 /uima/uimaj/branches/mavenAlign/uimaj-core/src/test/java/org/apache/uima/util/CasIOUtilsTest.java:933273-944396
-/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/util/CasIOUtilsTest.java:1690273-1759847
+/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/util/CasIOUtilsTest.java:1690273-1759847,1769119,1773486-1774106

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/java/org/apache/uima/util/CasToInlineXmlTest.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/java/org/apache/uima/util/CasToInlineXmlTest.java?rev=1774353&r1=1774352&r2=1774353&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/java/org/apache/uima/util/CasToInlineXmlTest.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/java/org/apache/uima/util/CasToInlineXmlTest.java Wed Dec 14 23:11:07 2016
@@ -21,6 +21,8 @@ package org.apache.uima.util;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.InputStream;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 
 import org.apache.uima.UIMAFramework;
 import org.apache.uima.cas.CAS;
@@ -34,13 +36,26 @@ import org.apache.uima.resource.metadata
 import org.apache.uima.test.junit_extension.JUnitExtension;
 import org.apache.uima.testTypeSystem_arrays.OfShorts;
 import org.apache.uima.testTypeSystem_arrays.OfStrings;
+import org.custommonkey.xmlunit.XMLAssert;
 
 import junit.framework.TestCase;
 
 
 public class CasToInlineXmlTest extends TestCase {
-
-  private final String EOL = System.getProperty("line.separator");
+ 
+  private final String IND = saxonVersion() == null ? "    " : "   ";   // Saxon defaults to an indent of 3
+  
+  private String saxonVersion() {
+    String version = null;
+    try {
+      Class<?> saxonVersionClass = Class.forName("net.sf.saxon.Version");
+      Method versionMethod = saxonVersionClass.getMethod("getProductVersion");
+      version = (String) versionMethod.invoke(null);
+      return version;
+    } catch (Exception e) {
+      return null;
+    }
+  }
 
   public void testCAStoString() throws Exception {
     // create a source CAS by deserializing from XCAS
@@ -62,12 +77,14 @@ public class CasToInlineXmlTest extends
     CasToInlineXml transformer = new CasToInlineXml();
     assertTrue(transformer.isFormattedOutput());
     String formattedXml = transformer.generateXML(cas, null);
+    // canonicalize line ends to \n 
+    formattedXml = canonicalizeNl(formattedXml);
 //    System.out.println(formattedXml);
     // start compare at <Document> because some impls put a nl in front of it (Linux), others don't (Windows)
-    assertTrue(formattedXml.contains("<Document>"+EOL+"    <uima.tcas.DocumentAnnotation"));
-    assertTrue(formattedXml.contains("confidence=\"0.0\">" + EOL
-            + "            <org.apache.uima.testTypeSystem.Owner"));
-    assertTrue(formattedXml.contains("</uima.tcas.DocumentAnnotation>"+EOL+"</Document>"));
+    assertTrue(formattedXml.contains("<Document>\n" + IND + "<uima.tcas.DocumentAnnotation"));
+    assertTrue(formattedXml.contains("confidence=\"0.0\">\n" 
+            + IND+IND+IND+"<org.apache.uima.testTypeSystem.Owner"));
+    assertTrue(formattedXml.contains("</uima.tcas.DocumentAnnotation>\n" + "</Document>"));
     
     // Check unformatted output does not add whitespace or line breaks
     transformer.setFormattedOutput(false);
@@ -120,10 +137,11 @@ public class CasToInlineXmlTest extends
     System.out.println(result);
     int s = result.indexOf("<Document>");
     result = result.substring(s);
-    String expected = "<Document>" + EOL +
-        "    <uima.tcas.DocumentAnnotation sofa=\"Sofa\" begin=\"0\" end=\"17\" language=\"x-unspecified\">" + EOL +
-        "        <org.apache.uima.testTypeSystem_arrays.OfStrings sofa=\"Sofa\" begin=\"0\" end=\"0\" f1Strings=\"[0s,1s,2s]\"/>" + EOL +
-        "        <org.apache.uima.testTypeSystem_arrays.OfShorts sofa=\"Sofa\" begin=\"0\" end=\"0\" f1Shorts=\"[0,1,2]\"/>1 2 3 4 5 6 7 8 9</uima.tcas.DocumentAnnotation>" + EOL +
+    result = canonicalizeNl(result);
+    String expected = "<Document>\n" +
+        IND+"<uima.tcas.DocumentAnnotation sofa=\"Sofa\" begin=\"0\" end=\"17\" language=\"x-unspecified\">\n" +
+        IND+IND+"<org.apache.uima.testTypeSystem_arrays.OfStrings sofa=\"Sofa\" begin=\"0\" end=\"0\" f1Strings=\"[0s,1s,2s]\"/>\n"  +
+        IND+IND+"<org.apache.uima.testTypeSystem_arrays.OfShorts sofa=\"Sofa\" begin=\"0\" end=\"0\" f1Shorts=\"[0,1,2]\"/>1 2 3 4 5 6 7 8 9</uima.tcas.DocumentAnnotation>\n" +
         "</Document>";
     for (int i = 0; i < result.length(); i++ ) {
       if (result.charAt(i) != expected.charAt(i)) {
@@ -131,6 +149,12 @@ public class CasToInlineXmlTest extends
         break;
       }
     }
-    assertEquals(expected, result.trim());
+    XMLAssert.assertXMLEqual(expected, result);
+//    assertEquals(expected, result.trim());
+  }
+  
+  private String canonicalizeNl(String s) {
+    s = s.replaceAll("\r\n", "\n");
+    return s.replaceAll("\r", "\n");
   }
 }

Propchange: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/resources/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Dec 14 23:11:07 2016
@@ -4,4 +4,4 @@
 /uima/uimaj/branches/depend-on-parent-pom-4/uimaj-core/src/test/resources:961329-961745
 /uima/uimaj/branches/filteredCompress-uima-2498/uimaj-core/src/test/resources:1436573-1462257
 /uima/uimaj/branches/mavenAlign/uimaj-core/src/test/resources:933273-944396
-/uima/uimaj/trunk/uimaj-core/src/test/resources:1690273-1772742
+/uima/uimaj/trunk/uimaj-core/src/test/resources:1690273-1772742,1773486-1774106

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/resources/TextAnalysisEngineImplTest/AggregateWithManyDelegates.xml
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/resources/TextAnalysisEngineImplTest/AggregateWithManyDelegates.xml?rev=1774353&r1=1774352&r2=1774353&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/resources/TextAnalysisEngineImplTest/AggregateWithManyDelegates.xml (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/resources/TextAnalysisEngineImplTest/AggregateWithManyDelegates.xml Wed Dec 14 23:11:07 2016
@@ -21,123 +21,125 @@
     Descriptor for testing the editing and copying of an aggregate.
     
     Note: Blank lines outside comments in this first section are not preserved
+    
+    Note: The indent-amount is now 3 so the testManyDelagates JUnit test almost works with Saxon!
 -->
 <analysisEngineDescription xmlns="http://uima.apache.org/resourceSpecifier">
 
-  <frameworkImplementation>org.apache.uima.java</frameworkImplementation>
-  <primitive>false</primitive>
+   <frameworkImplementation>org.apache.uima.java</frameworkImplementation>
+   <primitive>false</primitive>
 
-  <!-- Test that order of declarations is preserved when re-written  -->
-  <delegateAnalysisEngineSpecifiers>
-    <delegateAnalysisEngine key="D">
-      <import location="TestPrimitiveTae2.xml"/>
-    </delegateAnalysisEngine>
-    <delegateAnalysisEngine key="C">
-      <import location="TestPrimitiveTae2.xml"/>
-    </delegateAnalysisEngine>
-    <delegateAnalysisEngine key="B">
-      <import location="TestPrimitiveTae2.xml"/>
-    </delegateAnalysisEngine>
-    <delegateAnalysisEngine key="A">
-      <import location="TestPrimitiveTae2.xml"/>
-    </delegateAnalysisEngine>
-    <delegateAnalysisEngine key="F">
-      <import location="TestPrimitiveTae2.xml"/>
-    </delegateAnalysisEngine>
-    <delegateAnalysisEngine key="E">
-      <import location="TestPrimitiveTae2.xml"/>
-    </delegateAnalysisEngine>
-  </delegateAnalysisEngineSpecifiers>
-  <!-- The above declaration order should be preserved when the UIMA APIs are used to parse and -->
-  <!-- serialize back to disk  -->
-  <analysisEngineMetaData>
-    <name>AggregateWithManyDelegates</name>
-    <version>1.0</version>
-    <configurationParameters searchStrategy="language_fallback">
-      <configurationParameter>              <!-- First parameter -->
-        <name>StringParam</name>
-        <description>This is a string parameter</description>
-        <type>String</type>
-        <multiValued>false</multiValued>
-        <mandatory>false</mandatory>
-        <overrides>
-          <parameter>A/StringParam</parameter>
-          <parameter>B/StringParam</parameter>
-        </overrides>
-      </configurationParameter>
-      <configurationParameter>
-        <name>IntArrayParam</name>
-        <description>Array of integers</description>
-        <type>Integer</type>
-        <multiValued>true</multiValued>
-        <mandatory>false</mandatory>
-        <overrides>
-          <parameter>A/IntArrayParam</parameter>
-        </overrides>
-      </configurationParameter>
-      <configurationParameter>
-        <name>IntArrayParam1</name>
-        <description>Array of integers</description>
-        <type>Integer</type>
-        <multiValued>true</multiValued>
-        <mandatory>false</mandatory>
-        <overrides>
-          <parameter>B/IntArrayParam</parameter>
-        </overrides>
-      </configurationParameter>
-    </configurationParameters>
+   <!-- Test that order of declarations is preserved when re-written  -->
+   <delegateAnalysisEngineSpecifiers>
+      <delegateAnalysisEngine key="D">
+         <import location="TestPrimitiveTae2.xml"/>
+      </delegateAnalysisEngine>
+      <delegateAnalysisEngine key="C">
+         <import location="TestPrimitiveTae2.xml"/>
+      </delegateAnalysisEngine>
+      <delegateAnalysisEngine key="B">
+         <import location="TestPrimitiveTae2.xml"/>
+      </delegateAnalysisEngine>
+      <delegateAnalysisEngine key="A">
+         <import location="TestPrimitiveTae2.xml"/>
+      </delegateAnalysisEngine>
+      <delegateAnalysisEngine key="F">
+         <import location="TestPrimitiveTae2.xml"/>
+      </delegateAnalysisEngine>
+      <delegateAnalysisEngine key="E">
+         <import location="TestPrimitiveTae2.xml"/>
+      </delegateAnalysisEngine>
+   </delegateAnalysisEngineSpecifiers>
+   <!-- The above declaration order should be preserved when the UIMA APIs are used to parse and -->
+   <!-- serialize back to disk  -->
+   <analysisEngineMetaData>
+      <name>AggregateWithManyDelegates</name>
+      <version>1.0</version>
+      <configurationParameters searchStrategy="language_fallback">
+         <configurationParameter>              <!-- First parameter -->
+            <name>StringParam</name>
+            <description>This is a string parameter</description>
+            <type>String</type>
+            <multiValued>false</multiValued>
+            <mandatory>false</mandatory>
+            <overrides>
+               <parameter>A/StringParam</parameter>
+               <parameter>B/StringParam</parameter>
+            </overrides>
+         </configurationParameter>
+         <configurationParameter>
+            <name>IntArrayParam</name>
+            <description>Array of integers</description>
+            <type>Integer</type>
+            <multiValued>true</multiValued>
+            <mandatory>false</mandatory>
+            <overrides>
+               <parameter>A/IntArrayParam</parameter>
+            </overrides>
+         </configurationParameter>
+         <configurationParameter>
+            <name>IntArrayParam1</name>
+            <description>Array of integers</description>
+            <type>Integer</type>
+            <multiValued>true</multiValued>
+            <mandatory>false</mandatory>
+            <overrides>
+               <parameter>B/IntArrayParam</parameter>
+            </overrides>
+         </configurationParameter>
+      </configurationParameters>
 
-    <!-- Start of parameter settings -->
+      <!-- Start of parameter settings -->
 
-    <configurationParameterSettings>
-      <nameValuePair>
-        <name>StringParam</name>
-        <value>
-          <string>this is a string</string>
-        </value>
-      </nameValuePair>
-      <nameValuePair>
-        <name>IntArrayParam</name>
-        <value>
-          <array>           <!-- an array of 2 integers -->
-            <integer>1</integer>
-            <integer>2</integer>
-          </array>
-        </value>
-      </nameValuePair>
-      <nameValuePair>
-        <name>IntArrayParam1</name>
-        <value>
-          <array>
-            <integer>3</integer>
-            <integer>4</integer>
-          </array>
-        </value>
-      </nameValuePair>
-    </configurationParameterSettings>
-    <flowConstraints>
-      <fixedFlow>
-        <node>A</node>
-        <node>B</node>
-        <node>C</node>
-        <node>D</node>
-        <node>E</node>
-        <node>F</node>
-      </fixedFlow>
-    </flowConstraints>
-    <fsIndexCollection/>
-    <capabilities>
-      <capability>
-        <inputs/>
-        <outputs/>
-        <languagesSupported/>
-      </capability>
-    </capabilities>
-    <operationalProperties>
-      <modifiesCas>true</modifiesCas>
-      <multipleDeploymentAllowed>true</multipleDeploymentAllowed>
-      <outputsNewCASes>false</outputsNewCASes>
-    </operationalProperties>
-  </analysisEngineMetaData>
-  <resourceManagerConfiguration/>
+      <configurationParameterSettings>
+         <nameValuePair>
+            <name>StringParam</name>
+            <value>
+               <string>this is a string</string>
+            </value>
+         </nameValuePair>
+         <nameValuePair>
+            <name>IntArrayParam</name>
+            <value>
+               <array>           <!-- an array of 2 integers -->
+                  <integer>1</integer>
+                  <integer>2</integer>
+               </array>
+            </value>
+         </nameValuePair>
+         <nameValuePair>
+            <name>IntArrayParam1</name>
+            <value>
+               <array>
+                  <integer>3</integer>
+                  <integer>4</integer>
+               </array>
+            </value>
+         </nameValuePair>
+      </configurationParameterSettings>
+      <flowConstraints>
+         <fixedFlow>
+            <node>A</node>
+            <node>B</node>
+            <node>C</node>
+            <node>D</node>
+            <node>E</node>
+            <node>F</node>
+         </fixedFlow>
+      </flowConstraints>
+      <fsIndexCollection/>
+      <capabilities>
+         <capability>
+            <inputs/>
+            <outputs/>
+            <languagesSupported/>
+         </capability>
+      </capabilities>
+      <operationalProperties>
+         <modifiesCas>true</modifiesCas>
+         <multipleDeploymentAllowed>true</multipleDeploymentAllowed>
+         <outputsNewCASes>false</outputsNewCASes>
+      </operationalProperties>
+   </analysisEngineMetaData>
+   <resourceManagerConfiguration/>
 </analysisEngineDescription>