SANTUARIO-445: Streaming canonicalizers adding empty namespaces

git-svn-id: https://svn.apache.org/repos/asf/santuario/xml-security-java/trunk@1747576 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/xml/security/stax/impl/transformer/canonicalizer/Canonicalizer20010315_Excl.java b/src/main/java/org/apache/xml/security/stax/impl/transformer/canonicalizer/Canonicalizer20010315_Excl.java
index 195f3a8..bcbbc5a 100644
--- a/src/main/java/org/apache/xml/security/stax/impl/transformer/canonicalizer/Canonicalizer20010315_Excl.java
+++ b/src/main/java/org/apache/xml/security/stax/impl/transformer/canonicalizer/Canonicalizer20010315_Excl.java
@@ -111,6 +111,8 @@
                 String ns = xmlSecStartElement.getNamespaceURI(prefix);
                 if (ns == null && prefix.isEmpty()) {
                     ns = "";
+                } else if (ns == null) {
+                    continue;
                 }
 
                 final XMLSecNamespace comparableNamespace = XMLSecEventFactory.createXMLSecNamespace(prefix, ns);
diff --git a/src/test/java/org/apache/xml/security/test/dom/transforms/EmptyNamespaceTest.java b/src/test/java/org/apache/xml/security/test/dom/transforms/EmptyNamespaceTest.java
index eb6231e..6621a2d 100644
--- a/src/test/java/org/apache/xml/security/test/dom/transforms/EmptyNamespaceTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/transforms/EmptyNamespaceTest.java
@@ -20,10 +20,13 @@
 
 import org.apache.xml.security.c14n.implementations.Canonicalizer20010315Excl;
 import org.apache.xml.security.c14n.implementations.Canonicalizer20010315ExclOmitComments;
-import org.apache.xml.security.signature.XMLSignatureInput;
 import org.apache.xml.security.stax.impl.transformer.canonicalizer.Canonicalizer20010315_Excl;
 import org.apache.xml.security.stax.impl.transformer.canonicalizer.Canonicalizer20010315_ExclOmitCommentsTransformer;
+import org.junit.Assert;
+import org.w3c.dom.Document;
 
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
@@ -34,7 +37,7 @@
 
 public class EmptyNamespaceTest {
 
-    public static String message = "<SOAP-ENV:Body xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\" wsu:Id=\"XWSSGID-1465203363337-2063525437\">\n" +
+    private static final String message = "<SOAP-ENV:Body xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\" wsu:Id=\"XWSSGID-1465203363337-2063525437\">\n" +
             "\t<ec:SubmitRetrieveInterchangeAgreementsRequestResponse xmlns:ec=\"ec:services:wsdl:RetrieveInterchangeAgreementsRequest-2\" xmlns:ec1=\"ec:schema:xsd:CommonBasicComponents-0.1\">\n" +
             "\t\t<ns0:RetrieveInterchangeAgreementsResponse xmlns:ns0=\"ec:services:wsdl:RetrieveInterchangeAgreementsRequest-2\" xmlns:ns1=\"urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2\" xmlns:ns11=\"urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2\" xmlns:ns2=\"urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2\" xmlns:ns4=\"ec:schema:xsd:CommonBasicComponents-1\" xmlns:ns9=\"ec:schema:xsd:CommonAggregateComponents-2\">\n" +
             "\t\t\t<ns9:InterchangeAgreement>\n" +
@@ -55,14 +58,13 @@
             "\t\t\t\t\t<ns4:IntegrityLevelCode>0</ns4:IntegrityLevelCode>\n" +
             "\t\t\t\t\t<ns4:AvailabilityLevelCode>0</ns4:AvailabilityLevelCode>\n" +
             "\t\t\t\t</ns9:SecurityInformation>\n" +
-            "\t\t\t\t<ns2:DocumentTypeCode/>\n" +
+            "\t\t\t\t<ns2:DocumentTypeCode></ns2:DocumentTypeCode>\n" +
             "\t\t\t\t<ns2:ProfileID>Bundle</ns2:ProfileID>\n" +
             "\t\t\t</ns9:InterchangeAgreement>\n" +
             "\t\t</ns0:RetrieveInterchangeAgreementsResponse>\n" +
             "\t</ec:SubmitRetrieveInterchangeAgreementsRequestResponse>\n" +
             "</SOAP-ENV:Body>";
 
-
     @org.junit.Test
     public void doStAXTest() throws Exception {
         org.apache.xml.security.Init.init();
@@ -83,10 +85,10 @@
         transformer.transform(stream);
         transformer.doFinal();
         
-        // String result = outputStream.toString();
-        // System.out.println("Transformed: \n" + result);
+        String result = outputStream.toString();
+        Assert.assertEquals(message, result);
     }
-    
+
     @org.junit.Test
     public void doDOMTest() throws Exception {
         org.apache.xml.security.Init.init();
@@ -94,13 +96,17 @@
 
         Canonicalizer20010315Excl transformer = new Canonicalizer20010315ExclOmitComments();
 
-        InputStream stream = new ByteArrayInputStream(message.getBytes("UTF-8"));
+        final DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
+        documentBuilderFactory.setNamespaceAware(true);
+        documentBuilderFactory.setValidating(false);
+        final DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
+        final Document document = documentBuilder.parse(new ByteArrayInputStream(message.getBytes("UTF-8")));
 
         String inclusiveNamespaces = "SOAP-ENV ec ec1 ns0 ns1 ns11 ns2 ns4 ns9";
-        // byte[] output = 
-        transformer.engineCanonicalize(new XMLSignatureInput(stream), inclusiveNamespaces);
+        byte[] output =
+                transformer.engineCanonicalizeSubTree(document, inclusiveNamespaces);
 
-        // String result = new String(output, "UTF-8");
-        // System.out.println("Transformed: \n" + result);
+        String result = new String(output, "UTF-8");
+        Assert.assertEquals(message, result);
     }
 }
\ No newline at end of file