从控制器调用服务方法时出现空指针异常

时间:2015-02-20 22:33:56

标签: grails groovy nullpointerexception

我在服务类中有一个方法,必须从控制器调用。控制器和服务类代码如下 文件夹grails-app/services,文件FileFactoryService.groovy

package edu.rev.document
import grails.transaction.Transactional

Class FileFactoryService{
Document document = new Document()    // Domain object
    def build(byte[] fileArray){      
    String str = new String(fileArray, "UTF-8") // UTF encoding as invoice may contain negative values
    String[] lines = str.split("\\r?\\n") 
    document.version = lines[0].substring(0,1)
    document.name = lines[1].substring(0,25)
   }
   return document.properties.collect()
 }

控制器代码:文件夹:grails-app/controllers,文件:FileController.groovy

package edu.rev.document
 Class FileController{
    def fileFactoryService            
    def save(){
    def file = request.getFile('file')
    if(file.empty) {
        flash.message = "File cannot be empty"
    } else {
        def myList = fileService.build(file.getBytes())
        }    
    }

抛出的错误是

NullPointer exception when processing [POST]/../save Cannot invoke method build() on NULL object

你能否指出我可能犯下的错误?如果您需要任何其他信息,请告诉我

编辑:这是代码。只是一个抬头,从服务中取出并在控制器本身实现的相同逻辑工作完全正常。还有一件事,当我使用“。”时。服务中的运营商(比如说document.),它没有显示任何自动完成选项,如document.name

2 个答案:

答案 0 :(得分:4)

发布所有代码有助于发现错误。控制器类中的这一行

def myList = fileService.build(file.getBytes())

应该是

def myList = fileFactoryService.build(file.getBytes())

答案 1 :(得分:1)

在您的控制器类中,您将服务声明为:

  

def fileService

但是服务类的名称是:

Class FileFactoryService

要使Grails依赖注入工作,您需要将变量命名为类名:

def fileFactoryService

然后这应该有用。