Attached is the testcase that shows the problem. I'll check-in the test into the 
workspace later.

Vishal

Berin Lautenbach wrote:
> 
> Vishal,
> 
> Not good!  Be interested to see what Raul comes back with.  Either way
> it would be great to have a test case in the interop tests that can
> replicate the problem.
> 
> Cheers,
>         Berin
> 
> Vishal Mahajan wrote:
> 
> > All,
> >
> > In the Java Library, I observe a couple of things whose combined result
> > seems to be erroneous.
> >
> > Consider the following example document -
> > <foo>text1
> > text2</foo>
> > Also assume that the dom representation of this document as - A DOM
> > element named "foo" having two child text nodes - "text1" and "\ntext2".
> >
> > 1. In XMLSignatureInput, method getNodeSet() delegates the task of
> > forming the resultant node-set to XMLUtils.getSetWith*Comments(). This
> > method populates the node-set with both the text nodes.
> >
> > 2. When this node-set is sent for exclusive canonicalization, the method
> > CanonicalizerBase.canonicalizeXPathNodeSet(Node, NameSpaceSymbTable)
> > comes into picture. In the switch block of this method, for the
> > TEXT_NODE case, the text node as well all its right hand side siblings
> > are written to the output stream. Hence, for the above example, the c14n
> > output would come out to be:
> >
> > <foo>text1
> > text2
> > text2</foo>
> >
> > I am not sending a testcase along but that shouldn't be difficult to
> > write. Comments?
> >
> > Regards,
> > Vishal
> >
> >
> >
import java.io.*;

import org.w3c.dom.*;

import javax.xml.transform.*;
import javax.xml.transform.stream.*;
import javax.xml.transform.dom.*;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;

import 
org.apache.xml.security.c14n.implementations.Canonicalizer20010315ExclOmitComments;
import org.apache.xml.security.signature.XMLSignatureInput;

public class C14nTest {

    public static void main(String[] args) throws Exception {

        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document doc = builder.newDocument();
        Element foo = doc.createElement("foo");
        Text text1 = doc.createTextNode("text1");
        Text text2 = doc.createTextNode("text2");
        doc.appendChild(foo);
        foo.appendChild(text1);
        foo.appendChild(text2);

        nodeToString(foo);

        org.apache.xml.security.Init.init();

        Canonicalizer20010315ExclOmitComments c14n =
                new Canonicalizer20010315ExclOmitComments();
        byte[] buf =
            c14n.engineCanonicalizeXPathNodeSet(
                (new XMLSignatureInput(foo)).getNodeSet());
        System.out.println("\n" + new String(buf));
    }

    private static void nodeToString(Node node) throws Exception {
           TransformerFactory factory = TransformerFactory.newInstance();
           Transformer transformer = factory.newTransformer();
           transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
           DOMSource source = new DOMSource(node);
           StreamResult result = new StreamResult(System.out);
           transformer.transform(source, result);
    }
}

Reply via email to