Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Download Canonicalizer at http://apache.cs.utah.edu/santuario/java-library/1_5_5/xml-security-bin-1_5_5.zip
- */
- import javax.xml.transform.stream.StreamResult
- import javax.xml.transform.stream.StreamSource
- import javax.xml.transform.TransformerFactory
- import org.apache.xml.security.c14n.Canonicalizer
- // Initialize the security library
- org.apache.xml.security.Init.init()
- // Create some variables
- def error = false
- def fileInName = null
- def fileOutName = null
- def xsltName = null
- def indent = " "
- // Get arguments
- args.eachWithIndex() { arg, i ->
- def nextArg = i < args.length - 1 ? args[i+1] : null
- if(!error && nextArg) {
- try {
- switch(arg) {
- case "-in":
- fileInName = nextArg
- break
- case "-indent":
- if(nextArg == "true") {
- // This is the default, do nothing
- } else if( nextArg == "false") {
- indent = ""
- } else {
- error = true
- println "Indent argument must be true or false if it specified"
- }
- break
- case "-out":
- fileOutName = nextArg
- break
- case "-xslt":
- xsltName = nextArg
- break
- }
- } catch(Exception e) {
- error = true
- println "Syntax error in arguments"
- }
- }
- }
- // Make sure required arguments have been provided
- if(!error) {
- if(!fileInName) {
- error = true
- println 'An input file must be specified with the "-in" argument'
- }
- if(!xsltName) {
- error = true
- println 'An XSLT file must be specified with the "-xslt" argument'
- }
- }
- if(!error) {
- // Create some variables
- def ext = fileInName.tokenize('.').last()
- fileOutName = fileOutName ?: "${fileInName.lastIndexOf('.').with {it != -1 ? fileInName[0..<it] : fileInName}}_FORMATTED.${ext}"
- def fileIn = new File(fileInName)
- def fileOut = new File(fileOutName)
- def xsltFile = new File(xsltName)
- def temp1 = new File("./temp1")
- def temp2 = new File("./temp2")
- def os
- def is
- // Sort the XML attributes, remove comments, and remove extra whitespace
- println "Canonicalizing..."
- Canonicalizer c = Canonicalizer.getInstance(Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS)
- os = temp1.newOutputStream()
- c.setWriter(os)
- c.canonicalize(fileIn.getBytes())
- os.close()
- // Sort the XML elements
- println "Sorting..."
- def factory = TransformerFactory.newInstance()
- is = xsltFile.newInputStream()
- def transformer = factory.newTransformer(new StreamSource(is))
- is.close()
- is = temp1.newInputStream()
- os = temp2.newOutputStream()
- transformer.transform(new StreamSource(is), new StreamResult(os))
- is.close()
- os.close()
- // Write the XML output in "pretty print"
- println "Beautifying..."
- def parser = new XmlParser()
- def printer = new XmlNodePrinter(new IndentPrinter(fileOut.newPrintWriter(), indent, true))
- printer.print parser.parseText(temp2.getText())
- // Cleanup
- temp1.delete()
- temp2.delete()
- println "Done!"
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement