Hi, I am testing the samples for running XML signature validation on JDK 1.2.2. The code works fine on JDK 1.4.2 but I must run it on JDK 1.2.2 as our server supports 1.2.2. But it is giving me the following runtime errors:
org.apache.xml.security.signature.XMLSignatureException: The Reference for URI has no XMLSignatureInput Original Exception was org.apache.xml.security.signature.MissingResourceFailureException: The Reference for URI has no XMLSignatureInput Original Exception was org.apache.xml.security.signature.ReferenceNotInitializedException: and so on.... I have copied the org folder that contains the w3c classes from JSDK 1.4.4 and included it in the classpath. The sample code is as follows.. import java.io.*; import java.lang.reflect.*; import java.security.PublicKey; import java.security.cert.*; import java.util.*; import javax.xml.transform.TransformerException; import org.apache.xpath.XPathAPI; import org.w3c.dom.*; import org.apache.xml.security.c14n.*; import org.apache.xml.security.exceptions.XMLSecurityException; import org.apache.xml.security.signature.*; import org.apache.xml.security.keys.*; import org.apache.xml.security.keys.content.*; import org.apache.xml.security.keys.content.x509.*; import org.apache.xml.security.keys.keyresolver.*; import org.apache.xml.security.keys.storage.*; import org.apache.xml.security.keys.storage.implementations.*; import org.apache.xml.security.utils.*; import org.apache.xml.security.Init; import org.apache.xml.security.samples.utils.resolver.OfflineResolver; /** * * * * * @author $Author: geuerp $ * */ public class VerifySignature2 { /** * Method main * * @param unused */ public static void main(String unused[]) { boolean schemaValidate = false; final String signatureSchemaFile = "data/xmldsig-core-schema.xsd"; // String signatureFileName = "data/ie/baltimore/merlin-examples/merlin-xmldsig-fifteen/signature-enveloping-rsa.xml"; String signatureFileName = "signature.xml"; if (schemaValidate) { System.out.println("We do schema-validation"); } javax.xml.parsers.DocumentBuilderFactory dbf = javax.xml.parsers.DocumentBuilderFactory.newInstance(); if (schemaValidate) { dbf.setAttribute("http://apache.org/xml/features/validation/schema",Boolean.TRUE); dbf.setAttribute("http://apache.org/xml/features/dom/defer-node-expansion", Boolean.TRUE); dbf.setValidating(true); dbf.setAttribute("http://xml.org/sax/features/validation", Boolean.TRUE); } dbf.setNamespaceAware(true); dbf.setAttribute("http://xml.org/sax/features/namespaces", Boolean.TRUE); if (schemaValidate) { dbf.setAttribute("http://apache.org/xml/properties/schema/external-schemaLocation", Constants.SignatureSpecNS + " " + signatureSchemaFile); } try { // File f = new File("signature.xml"); File f = new File(signatureFileName); System.out.println("Try to verify " + f.toURL().toString()); javax.xml.parsers.DocumentBuilder db = dbf.newDocumentBuilder(); db.setErrorHandler(new org.apache.xml.security.utils.IgnoreAllErrorHandler()); if (schemaValidate) { db.setEntityResolver(new org.xml.sax.EntityResolver() { public org.xml.sax.InputSource resolveEntity(String publicId, String systemId) throws org.xml.sax.SAXException { if (systemId.endsWith("xmldsig-core-schema.xsd")) { try { return new org.xml.sax.InputSource(new FileInputStream(signatureSchemaFile)); } catch (FileNotFoundException ex) { throw new org.xml.sax.SAXException(ex); } } else { return null; } } }); } org.w3c.dom.Document doc = db.parse(new java.io.FileInputStream(f)); Element nscontext = XMLUtils.createDSctx(doc, "ds",Constants.SignatureSpecNS); Element sigElement = (Element) XPathAPI.selectSingleNode(doc,"//ds:Signature[1]", nscontext); XMLSignature signature = new XMLSignature(sigElement, f.toURL().toString()); signature.addResourceResolver(new OfflineResolver()); // XMLUtils.outputDOMc14nWithComments(signature.getElement(), System.out); KeyInfo ki = signature.getKeyInfo(); if (ki != null) { if (ki.containsX509Data()) { System.out.println("X509Data element present in the KeyInfo"); } X509Certificate cert = signature.getKeyInfo().getX509Certificate(); if (cert != null) { /* System.out.println( "I try to verify the signature using the X509 Certificate: " + cert); */ System.out.println("The XML signature in file "+ f.toURL().toString() + " is " + (signature.checkSignatureValue(cert) ? "valid (good)" : "invalid !!!!! (bad)")); } else { System.out.println("Did not find a Certificate"); PublicKey pk = signature.getKeyInfo().getPublicKey(); if (pk != null) { /* System.out.println( "I try to verify the signature using the public key: " + pk); */ System.out.println("The XML signature in file " + f.toURL().toString() + " is "+ (signature.checkSignatureValue(pk) ? "valid (good)" : "invalid !!!!! (bad)")); } else { System.out.println("Did not find a public key, so I can't check the signature"); } } } else { System.out.println("Did not find a KeyInfo"); } } catch (Exception ex) { ex.printStackTrace(); } } static { org.apache.xml.security.Init.init(); } } __________________________________ Do you Yahoo!? Yahoo! Finance Tax Center - File online. File on time. http://taxes.yahoo.com/filing.html