DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUGĀ·
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=43197>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED ANDĀ·
INSERTED IN THE BUG DATABASE.

http://issues.apache.org/bugzilla/show_bug.cgi?id=43197

           Summary: Canonicalizer.canonicalizeSubtree(Node) omits namespaces
                    for Documents created with DocumentBuilder.newDocument()
           Product: Security
           Version: unspecified
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Canonicalization
        AssignedTo: security-dev@xml.apache.org
        ReportedBy: [EMAIL PROTECTED]


The output of Canonicalizer.canonicalizeSubtree(Node) omits namespaces when a
Document is passed that was created from scratch, i.e. using
DocumentBuilder.newDocument() and appending children manually. This problem
doesn't occur when a Document is passed that was created by parsing, i.e. by
using DocumentBuilder.parse(...).

Reproducible under:
ibm-jdk-1.5.0.4
sun-jdk-1.5.0.12

Using XML-security from Subversion, revision 568937 (checked out on Aug 23, 
2007)

The following JUnit test reproduces the bug:

import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import junit.framework.TestCase;

import org.apache.xml.security.c14n.CanonicalizationException;
import org.apache.xml.security.c14n.Canonicalizer;
import org.apache.xml.security.c14n.InvalidCanonicalizerException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

public class CanonicalizationTestCase extends TestCase {
    public void test() throws ParserConfigurationException, SAXException,
            IOException, TransformerException, InvalidCanonicalizerException,
            CanonicalizationException {
        org.apache.xml.security.Init.init();
        DocumentBuilderFactory _documentBuilderFactory = DocumentBuilderFactory
                .newInstance();
        _documentBuilderFactory.setNamespaceAware(true);
        TransformerFactory _transformerFactory = TransformerFactory
                .newInstance();
        String dummyXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><dummy
xmlns=\"http://dummyNS\";><child>this is a child</child></dummy>";
        String dummyNS = "http://dummyNS";;
        Document d1; // Document created from scratch
        Document d2; // Document created by parsing
        DocumentBuilder db1 = _documentBuilderFactory.newDocumentBuilder();
        d1 = db1.newDocument();
        Element dummyElement = d1.createElementNS(dummyNS, "dummy");
        Element childElement = d1.createElementNS(dummyNS, "child");
        childElement.setTextContent("this is a child");
        dummyElement.appendChild(childElement);
        d1.appendChild(dummyElement);
        DocumentBuilder db2 = _documentBuilderFactory.newDocumentBuilder();
        d2 = db2.parse(new InputSource(new StringReader(dummyXML)));

        // compare documents by serializing them to a String
        Transformer t = _transformerFactory.newTransformer();
        t.setOutputProperty(OutputKeys.METHOD, "xml");
        DOMSource source1 = new DOMSource(d1);
        StringWriter sw1 = new StringWriter();
        t.transform(source1, new StreamResult(sw1));
        DOMSource source2 = new DOMSource(d2);
        StringWriter sw2 = new StringWriter();
        t.transform(source2, new StreamResult(sw2));
        System.out.println(sw1.toString());
        System.out.println(sw2.toString());
        assertEquals(sw2.toString(), sw1.toString());

        // compare canonicalizations
        Canonicalizer c14n;
        c14n = Canonicalizer
               .getInstance("http://www.w3.org/TR/2001/REC-xml-c14n-20010315";);
        String output1 = new String(c14n.canonicalizeSubtree(d1));
        String output2 = new String(c14n.canonicalizeSubtree(d2));
        System.out.println(new String(output1));
        System.out.println(new String(output2));
        assertEquals(output2, output1);
    }
}

-- 
Configure bugmail: http://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.

Reply via email to