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