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

Reply via email to