Я хотел бы написать сервис в своем веб-приложении grails, чтобы применить xslt к некоторому xml. Следующий код выдает 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
}
}
Однако, когда я тестирую следующий аналогичный код с теми же значениями, я получаю желаемые результаты:
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
Мой код изначально стремился быть немного более эффективным, но на данный момент я просто пытаюсь заставить его работать: -)