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>