Hi, I am signing a XML document having external references. I created my own Resolver (extending ResourceResolverSpi) that returns a XMLSignatureInput object. My resolver works fine with version 1.1 but not with version 1.2. Here is the code...
public XMLSignatureInput engineResolve(Attr uri, String baseURI) throws ResourceResolverException { String uriValue = uri.getValue(); XMLSignatureInput result = null; try { URIContent content = this.resolve(uriValue, baseURI); // TODO: FOR VERSION 1.2. May be it is a bug !!! /* java.io.ByteArrayOutputStream bou = new java.io.ByteArrayOutputStream(); imtf.ch.atlas.core.io.Copier.copy(content.getInputStream(), bou); result = new XMLSignatureInput(bou.toByteArray()); */ // TODO: This is the correct code for VERSION 1.1 and should be the same for VERSION 1.2 result = new XMLSignatureInput(content.getInputStream()); result.setSourceURI(uri.getNodeName()); result.setMIMEType(content.getContentType()); } catch (Exception e) { throw new ResourceResolverException("Could not resolve uri [" + uri + "].", e, uri, baseURI); } return result; } When I sign the document using version 1.1 it is ok, when I sign it with version 1.2, I got the exception bellow. The inputstream given to the XMLSignatureInput is a FileInputStream. For version 1.2, if I copy it into a ByteArrayOutputStream it works (see comment code into my Resolver). Can you have a look and give me a feedback, I think it is a bug. Regards. Yvan -------- Exception at level 1 -------- Message: Unable to sign the XML document. Class: imtf.ch.atlas.sphinx2.SphinxException -------- Exception at level 2 -------- Message: Resetting to invalid mark Class: org.apache.xml.security.signature.XMLSignatureException Stack trace: org.apache.xml.security.signature.XMLSignatureException: Resetting to invalid mark Original Exception was org.apache.xml.security.signature.ReferenceNotInitializedException: Resetting to invalid mark Original Exception was java.io.IOException: Resetting to invalid mark at org.apache.xml.security.signature.XMLSignature.sign(Unknown Source) at imtf.ch.atlas.sphinx2.xmlsig.Signer.sign(Signer.java:480) at test.imtf.ch.atlas.sphinx2.xml.XMLSignatureTest.testSignAndVerify_ExternalNo tSignedCase1(XMLSignatureTest.java:98) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39 ) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl .java:25) at java.lang.reflect.Method.invoke(Method.java:324) at junit.framework.TestCase.runTest(TestCase.java:154) at junit.framework.TestCase.runBare(TestCase.java:127) at junit.framework.TestResult$1.protect(TestResult.java:106) at junit.framework.TestResult.runProtected(TestResult.java:124) at junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:118) at junit.framework.TestSuite.runTest(TestSuite.java:208) at junit.framework.TestSuite.run(TestSuite.java:203) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRu nner.java:421) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner. java:305) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner .java:186) org.apache.xml.security.signature.ReferenceNotInitializedException: Resetting to invalid mark Original Exception was java.io.IOException: Resetting to invalid mark at org.apache.xml.security.signature.Reference.calculateDigest(Unknown Source) at org.apache.xml.security.signature.Reference.generateDigestValue(Unknown Source) at org.apache.xml.security.signature.Manifest.generateDigestValues(Unknown Source) at org.apache.xml.security.signature.XMLSignature.sign(Unknown Source) at imtf.ch.atlas.sphinx2.xmlsig.Signer.sign(Signer.java:480) at test.imtf.ch.atlas.sphinx2.xml.XMLSignatureTest.testSignAndVerify_ExternalNo tSignedCase1(XMLSignatureTest.java:98) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39 ) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl .java:25) at java.lang.reflect.Method.invoke(Method.java:324) at junit.framework.TestCase.runTest(TestCase.java:154) at junit.framework.TestCase.runBare(TestCase.java:127) at junit.framework.TestResult$1.protect(TestResult.java:106) at junit.framework.TestResult.runProtected(TestResult.java:124) at junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:118) at junit.framework.TestSuite.runTest(TestSuite.java:208) at junit.framework.TestSuite.run(TestSuite.java:203) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRu nner.java:421) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner. java:305) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner .java:186) java.io.IOException: Resetting to invalid mark at java.io.BufferedInputStream.reset(BufferedInputStream.java:370) at org.apache.xml.security.signature.XMLSignatureInput.updateOutputStream(Unkno wn Source) at org.apache.xml.security.signature.Reference.calculateDigest(Unknown Source) at org.apache.xml.security.signature.Reference.generateDigestValue(Unknown Source) at org.apache.xml.security.signature.Manifest.generateDigestValues(Unknown Source) at org.apache.xml.security.signature.XMLSignature.sign(Unknown Source) at imtf.ch.atlas.sphinx2.xmlsig.Signer.sign(Signer.java:480) at test.imtf.ch.atlas.sphinx2.xml.XMLSignatureTest.testSignAndVerify_ExternalNo tSignedCase1(XMLSignatureTest.java:98) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39 ) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl .java:25) at java.lang.reflect.Method.invoke(Method.java:324) at junit.framework.TestCase.runTest(TestCase.java:154) at junit.framework.TestCase.runBare(TestCase.java:127) at junit.framework.TestResult$1.protect(TestResult.java:106) at junit.framework.TestResult.runProtected(TestResult.java:124) at junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:118) at junit.framework.TestSuite.runTest(TestSuite.java:208) at junit.framework.TestSuite.run(TestSuite.java:203) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRu nner.java:421) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner. java:305) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner .java:186)