I’d like to write a service in my grails web app to apply an xslt to some xml. The following code throws a java.lang.ArrayIndexOutOfBoundsException: -1:
import javax.xml.transform.TransformerFactory
import javax.xml.transform.Transformer
import javax.xml.transform.stream.StreamResult
import javax.xml.transform.stream.StreamSource
class RdfService {
static transactional = false
def transform(url){
def String wsdl= url.toString().toURL().text
def File xslt= new File("lib/SAWSDL_GRDDL.xsl")
def TransformerFactory factory = TransformerFactory.newInstance()
def Transformer transformer = factory.newTransformer(new StreamSource(new FileReader(xslt)))
def StringWriter out= new StringWriter()
transformer.transform(new StreamSource(new StringReader(wsdl)), new StreamResult(out))
println out
}
}
However, when I test the following similar code with the same values, I get the desired results:
import javax.xml.transform.TransformerFactory
import javax.xml.transform.stream.StreamResult
import javax.xml.transform.stream.StreamSource
def xml= new File("data/wsdl/EtaService.wsdl").text
def xslt= new File("data/SAWSDL_GRDDL.xsl")
def factory = TransformerFactory.newInstance()
def transformer = factory.newTransformer(new StreamSource(new FileReader(xslt)))
def out= new StringWriter()
transformer.transform( new StreamSource(new StringReader(xml)),
new StreamResult(out))
println out
My code was originally strived to be a bit more efficient, but at this point I’m just trying to get the thing to work 🙂
it was a hack, but I found out if i removed the XML tag, in the document it would process it appropriately.