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