I got a bit further on using Mark Mandels Javaloader.
The coldfusion code is:
<cfscript>
loadPaths = ArrayNew(1);
loadPaths[1] = expandPath("irmarkjars");
loadPaths[2] = expandPath("irmarkjars\jce-jdk13-114.jar");
loadPaths[3] = expandPath("irmarkjars\style-apachexml.jar");
loadPaths[4] = expandPath("irmarkjars\stylebook-1.0-b3_xalan-2.jar");
loadPaths[5] = expandPath("irmarkjars\xmlParserAPIs.jar");
loadPaths[6] = expandPath("irmarkjars\xmlsec.jar");
loadPaths[7] = expandPath("irmarkjars\jakarta-log4j-1.2.6.jar");
loadPaths[8] = expandPath("irmarkjars\xercesImpl.jar");
loadPaths[9] = expandPath("irmarkjars\xml-apis.jar");
loadPaths[10] = expandPath("irmarkjars\xalan.jar");
loader = createObject("component", "javaloader.JavaLoader").init(loadPaths);
IRMark = loader.create("IRMark");
ret = IRMark.init("input.xml");
</cfscript>
<cfoutput>#ret.doStuff()#</cfoutput>

The java code is: 
public class IRMark  {
     protected String filename;
  public IRMark (String filename) throws Exception
  {
    this.filename=filename;                                     
                }
      public String doStuff()throws Exception
      {
          // Init the Apache XML security library
                Init.init();
                
                                // Open the input file
                FileInputStream fis=null;
                try {
                        fis=new 
FileInputStream("C:\\CFusionMX7\\wwwroot\\tradesmen\\input.xml");
                } catch (FileNotFoundException e) {
                        return("The file " + filename + " could not be 
opened.");
                }                          
                // 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();
                        return("Error reading file.");
                }
                                // 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)));
                return filename;
   }            
}
The error message is now:
java.lang.NullPointerException
        at 
org.apache.xml.security.transforms.Transform.<init>(Transform.java:195)
        at 
org.apache.xml.security.transforms.Transforms.item(Transforms.java:329)
        at 
org.apache.xml.security.transforms.Transforms.performTransforms(Transforms.java:256)
        at IRMark.doStuff(IRMark.java:91)....etc

So I am still trying but things are a bit clearer...mmm.. what now?
A+

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
Deploy Web Applications Quickly across the enterprise with ColdFusion MX7 & 
Flex 2
Free Trial 
http://www.adobe.com/products/coldfusion/flex2/?sdid=RVJU

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

Reply via email to