Hello, Recently I tried to upgrade my project to use new Apache XML Security 1.2 for Java and found that now the library does c14n much MUCH more slowly than it was with 1.1.
Here is a simple test: import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.apache.commons.lang.time.StopWatch; import org.apache.xml.security.c14n.Canonicalizer; import org.w3c.dom.Document; import org.xml.sax.InputSource; public class Test { private final static int REPEAT = 1000; private StopWatch timer = new StopWatch(); private Canonicalizer canon = Canonicalizer.getInstance(Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS); private Document document; public Test(String file) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setNamespaceAware(true); factory.setValidating(false); DocumentBuilder builder = factory.newDocumentBuilder(); document = builder.parse(new InputSource(file)); } public void runTest() throws Exception { timer.start(); for (int i = 0; i < REPEAT; i++) { canon.canonicalizeSubtree(document); } timer.stop(); System.out.println("time spent " + String.valueOf(timer.getTime()) + " ms"); } public static void main(String[] args) throws Exception { org.apache.xml.security.Init.init(); Test test = new Test(args[0]); test.runTest(); } } Just drop commons-lang-2.0.jar, commons-logging.jar, xercesImpl.jar, xml-apis.jar and xmlsec.jarto the classpath and run java Test File.xml. Version 1.1 output: time spent 952 ms Version 1.2 output: time spent 29172 ms Where is the catch? Regards, Egor Pervuninski egor {dot} pervuninski {at} gmail {dot} com