我需要在服务上传递我的xsl和read文件以生成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)
}
}
答案 0 :(得分:1)
每当我需要放置一些文件并从该文件中读取内容时,我就会创建一个目录,例如resources
目录中的web-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}"
}
}
答案 1 :(得分: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)
}
}