I have some java code which I want to kick in from a coldfusion page

e.g. <cfobject type="Java" class="IRMark" name="myObj">
      <cfset ret=myObj.init("input.xml")

It ought to be simple enough, pass the file name to the class and get the 
base64 number back.
The Coldfusion documentation states: 
"Note: The init method is not a method of the object, but a ColdFusion 
identifier that calls the new function on the class constructor. So, if a Java 
object has an init method, a name conflict exists and you cannot call the 
object’s init method."
and I suspect this is where my problem lies but my java is still basic. I would 
be very grateful if anyone could at least give me a few pointers to solve this 
problem. I have tried lots of things without any success.

The Java Code:

import java.io.*;
import javax.xml.parsers.*;
import java.security.*;

import org.w3c.dom.*;

import org.apache.xml.security.signature.*;
import org.apache.xml.security.transforms.*;
import org.apache.xml.security.Init;

import org.bouncycastle.util.encoders.Base64;


/**
 * This code generates an IRmark value for an input document.
 * The value is a base64 encoded SHA1 digest of a signature
 * transform over a certain style of document. The value has
 * to be placed inside documents to be signed by the XPE when
 * used in a EDS/IR deployment.
 *
 * The code has a number of jar dependencies:-
 *      xmlsec.jar - The Apache XML Security Library
 *      log4j-1.2.5.jar - The Apache Log utility
 *  xalan.jar - Apache XSLT/XPath processor
 *  xercesImpl.jar - Apache XML processor
 *  bc-jce-jdk13-114.jar - Bouncy Castle JCE library
 *
 *  The Bouncy Castle JCE provider is automatically downloaded
 *  by the Apache XML sec library build so you may already have
 *  that.
 */

   
   public class IRMark {

   /**
    * Generate and print the IRmark.
    *
    * @param args - Pass the filename of the input document
    * @throws Exception
    */
        public static void main(String args[]) throws Exception {

                // Init the Apache XML security library
                Init.init();

                // Check we are given a file to work with
                if (args.length!=1) {
                        System.out.println("Use: IRmark <file> ");
                        return;
                }

                // Open the input file
                FileInputStream fis=null;
                try {
                        fis=new FileInputStream(args[0]);
                } catch (FileNotFoundException e) {
                        System.out.println("The file " + args[0] + " could not 
be opened.");
                        return;
                }

                // Load file into a byte array
                byte[] data=null;
                try {
                        int bytes=fis.available();
                        data=new byte[bytes];
                        fis.read(data);
                } catch (IOException e) {
                        System.out.println("Error reading file.");
                        e.printStackTrace();
                }

                // First part is to run the a transform over the input to 
extract the
                // fragment to be digested. This is done by setting up a 
Transforms
                // object from a Template and then executing against the input 
document

                // The transforms to be performed are specified by using the 
template XML below.
        String transformStr =
        "<?xml version='1.0'?>\n"
        + "<dsig:Transforms xmlns:dsig='http://www.w3.org/2000/09/xmldsig#' 
xmlns:gt='http://www.govtalk.gov.uk/CM/envelope' 
xmlns:ir='http://www.govtalk.gov.uk/taxation/CISrequest'>\n"
        + "<dsig:Transform 
Algorithm='http://www.w3.org/TR/1999/REC-xpath-19991116'>\n"
        + "<dsig:XPath>\n"
        + 
"count(ancestor-or-self::node()|/gt:GovTalkMessage/gt:Body)=count(ancestor-or-self::node())\n"
                + " and count(self::ir:IRmark)=0 \n"
                + " and count(../self::ir:IRmark)=0 \n"
                + "</dsig:XPath>\n"
        + "</dsig:Transform>\n"
        + "<dsig:Transform 
Algorithm='http://www.w3.org/TR/2001/REC-xml-c14n-20010315#'/>\n"
        + "</dsig:Transforms>\n"
        ;

                // Parse the transform details to create a document
                DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
                dbf.setNamespaceAware(true);
                DocumentBuilder db=dbf.newDocumentBuilder();
                Document doc=db.parse(new 
ByteArrayInputStream(transformStr.getBytes()));

                // Construct a Apache security Transforms object from that 
document
                Transforms transforms = new 
Transforms(doc.getDocumentElement(), null);

                // Now perform the transform on the input to get the results.
        XMLSignatureInput input = new XMLSignatureInput(data);
        XMLSignatureInput result = transforms.performTransforms(input);

        // Uncomment this line to see transform output
        // System.out.println(new String(result.getBytes()));

        // Second part is to run output via SHA1 digest
        // This is done via the standard java.security API
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(result.getBytes());
                byte[] digest=md.digest();

                // And finally print a Base64 of the digest with
                // The help of the BouncyCastle JCE library
                System.out.println("IRmark: " + new 
String(Base64.encode(digest)));
   }
}
Thanks A+

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
Create Web Applications With ColdFusion MX7 & Flex 2. 
Build powerful, scalable RIAs. Free Trial
http://www.adobe.com/products/coldfusion/flex2/?sdid=RVJS 

Archive: 
http://www.houseoffusion.com/groups/CF-Talk/message.cfm/messageid:275148
Subscription: http://www.houseoffusion.com/groups/CF-Talk/subscribe.cfm
Unsubscribe: 
http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=11502.10531.4

Reply via email to