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/13 20:57:29 UTC

svn commit: r1774106 - in /uima/uimaj/trunk/uimaj-core: ./ src/main/java/org/apache/uima/resource/metadata/impl/ src/test/java/org/apache/uima/analysis_engine/impl/ src/test/java/org/apache/uima/util/

Author: schor
Date: Tue Dec 13 20:57:29 2016
New Revision: 1774106

URL: http://svn.apache.org/viewvc?rev=1774106&view=rev
Log:
[UIMA-5177] fixes to properly handle serialization of xml descriptors using default namespaces. Also fix CasToInlineXmlTests to better handle differences in writing of end of line char sequences.

Modified:
    uima/uimaj/trunk/uimaj-core/pom.xml
    uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/MetaDataObjectSerializer_plain.java
    uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/MetaDataObject_impl.java
    uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/AnalysisEngine_implTest.java
    uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/util/CasToInlineXmlTest.java

Modified: uima/uimaj/trunk/uimaj-core/pom.xml
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/pom.xml?rev=1774106&r1=1774105&r2=1774106&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/pom.xml (original)
+++ uima/uimaj/trunk/uimaj-core/pom.xml Tue Dec 13 20:57:29 2016
@@ -80,14 +80,15 @@
 		          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.4</version>
+		  <version>9.7.0-14</version>
 		  <scope>test</scope>
 		</dependency>
-		
+    	
+ 
 		<dependency>
 		  <groupId>net.sf.saxon</groupId>
     	  <artifactId>saxon</artifactId>
@@ -100,14 +101,13 @@
     	  <version>8.7</version>
     	  <scope>test</scope>
 		</dependency>
-		-->
-		
-		<!-- dependency>
+
+		<dependency>    jackson stuff moved to uimaj-json project
 			<groupId>com.fasterxml.jackson.core</groupId>
 	    <artifactId>jackson-core</artifactId>
 	    <version>2.4.2</version>
-		</dependency-->
-		
+		</dependency>
+      -->		
 		<!-- This next dependency is used to enable findbug rule suppression annotations
 		     Currently commented out - till more thought given to this. 
 		     For instance, we don't want to accidentally distribute this dependency in builds

Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/MetaDataObjectSerializer_plain.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/MetaDataObjectSerializer_plain.java?rev=1774106&r1=1774105&r2=1774106&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/MetaDataObjectSerializer_plain.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/MetaDataObjectSerializer_plain.java Tue Dec 13 20:57:29 2016
@@ -19,6 +19,7 @@
 
 package org.apache.uima.resource.metadata.impl;
 
+import org.apache.uima.util.XMLSerializer.CharacterValidatingContentHandler;
 import org.w3c.dom.Node;
 import org.xml.sax.Attributes;
 import org.xml.sax.ContentHandler;
@@ -97,6 +98,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/trunk/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/MetaDataObject_impl.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/MetaDataObject_impl.java?rev=1774106&r1=1774105&r2=1774106&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/MetaDataObject_impl.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/MetaDataObject_impl.java Tue Dec 13 20:57:29 2016
@@ -863,7 +863,9 @@ public abstract class MetaDataObject_imp
     AttributesImpl attrs = getXMLAttributes();
     
     if (aWriteDefaultNamespaceAttribute && inf.namespace != null) {
-      attrs.addAttribute("", "xmlns", "xmlns", "", inf.namespace);  // NOTE:  Saxon appears to ignore this ??
+//      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

Modified: uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/AnalysisEngine_implTest.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/AnalysisEngine_implTest.java?rev=1774106&r1=1774105&r2=1774106&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/AnalysisEngine_implTest.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/analysis_engine/impl/AnalysisEngine_implTest.java Tue Dec 13 20:57:29 2016
@@ -87,6 +87,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;
@@ -95,7 +96,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.apache.uima.util.impl.Settings_impl;
+import org.custommonkey.xmlunit.XMLAssert;
 import org.xml.sax.ContentHandler;
 
 /**
@@ -1578,6 +1579,9 @@ 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);

Modified: uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/util/CasToInlineXmlTest.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/util/CasToInlineXmlTest.java?rev=1774106&r1=1774105&r2=1774106&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/util/CasToInlineXmlTest.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/util/CasToInlineXmlTest.java Tue Dec 13 20:57:29 2016
@@ -38,12 +38,11 @@ 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;
 
 
 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() {
@@ -78,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+IND+"<uima.tcas.DocumentAnnotation"));
-    assertTrue(formattedXml.contains("confidence=\"0.0\">" + EOL
+    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>"+EOL+"</Document>"));
+    assertTrue(formattedXml.contains("</uima.tcas.DocumentAnnotation>\n" + "</Document>"));
     
     // Check unformatted output does not add whitespace or line breaks
     transformer.setFormattedOutput(false);
@@ -136,10 +137,11 @@ public class CasToInlineXmlTest extends
     System.out.println(result);
     int s = result.indexOf("<Document>");
     result = result.substring(s);
-    String expected = "<Document>" + EOL +
-        IND+"<uima.tcas.DocumentAnnotation sofa=\"Sofa\" begin=\"0\" end=\"17\" language=\"x-unspecified\">" + EOL +
-        IND+IND+"<org.apache.uima.testTypeSystem_arrays.OfStrings sofa=\"Sofa\" begin=\"0\" end=\"0\" f1Strings=\"[0s,1s,2s]\"/>" + EOL +
-        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>" + 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)) {
@@ -147,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");
   }
 }