1

我需要传递我的 xsl 并读取服务上的文件以生成 pdf。我总是收到类似的错误消息

文档为空(您的 XSLT 样式表可能有问题)。 Stacktrace 如下: 消息:文档为空(您的 XSLT 样式表可能有问题)。

我还自动装配 bean resource.xml 或 resource.groovy 上的文件

class MyClassHolder{
   Resource template
}

//in my controller

class MyController{
   method(){
   File resource = classHolder.template.file
   def reader = new FileReader(resource)
   myservice.convert(reader)
    }
}
4

2 回答 2

1

每当我需要放置一些文件并从该文件中读取内容时,我都会创建一个目录,例如resourcesweb-app目录中并读取服务中的内容,例如:

import org.codehaus.groovy.grails.web.context.ServletContextHolder as SCH

class MyService {
    def readFile() {
        def servletContext = SCH.servletContext
        def file = servletContext.getResource('/resources/example.xsl').getContent()
        println "Content = ${file}"
    }
}
于 2013-08-15T07:19:41.313 回答
0

如果您将它放在 web-app 文件夹中,并且您使用的是 Grails 2,则可以使用 Grails 资源定位器。

class MyService {
    def grailsResourceLocator
    def templateResource

    @PostConstruct
    init() {
        templateResource = grailsResourceLocator.findResourceForURI('/resources/example.xsl')
    }
    def convert() {
        // no need to pass in resource or filereader, can use file or inputStream
        def templateFile = templateResource.file
        def templateStream = templateResource.inputStream
    }
}
class MyController {
    MyService myService

    method() {
        myService.convert()
    }
}

实用提示:要在 Spock 中模拟它,请使用 GroovyPageStaticResourceLoader

@TestFor(MyService)
class MyServiceSpec extends Specification {
    def setup() {
        service.grailsResourceLocator = Mock(GroovyPageStaticResourceLocator)
    }
}
于 2015-11-30T17:28:53.093 回答