2016-04-05 63 views
0

我已經構建了一些自定義marshallers,並試圖訪問消息服務。我有以下代碼。從src/groovy訪問服務

resources.groovy

customObjectMarshallers(CustomObjectMarshallers){ 
    marshallers = [ 
     new PersonMarshaller(), 
     new DepartmentMarshaller(), 
     new ErrorsMarshaller() 
    ] 
} 

CustomObjectMarshallers

class CustomObjectMarshallers { 
    List marshallers = [] 

    def register(){ 
     marshallers.each { 
      it.register() 
     } 
    } 
} 

ErrorsMarshaller

class ErrorsMarshaller { 

    @Autowired 
    def MessageSource messageSource 

    void register(){ 

     JSON.registerObjectMarshaller(FieldError){ FieldError fieldError -> 

      def pMap = [:] 

      fieldError.properties.each { prop, val -> 
       println 'prop ' + prop 
       if(prop == 'rejected_value' || prop == 'arguments' || prop == 'class' || prop == 'codes' || prop == 'code' || prop == 'bindingFailure') { 
        return 
       } else if(prop == 'defaultMessage') { 
        pMap[prop] = messageSource.getMessage(val, fieldError, Locale.US) 
       } else { 
        pMap[prop] = MarshallerUtils.cleanPropertyValue(val) 
       }    
      } 

      return pMap 
     } 
    } 
} 

我GE以下例外

無法在空對象上調用方法getMessage()。堆棧跟蹤如下: 顯示java.lang.NullPointerException: 在org.hri.leaverequest.marshaller:在org.hri.leaverequest.marshaller.ErrorsMarshaller $ _register_closure1_closure2.doCall(26 ErrorsMarshaller.groovy)無法調用的方法getMessage,(),null對象 上.ErrorsMarshaller $ _register_closure1.doCall(ErrorsMarshaller.groovy:21) at grails.converters.JSON.value(JSON.java:202) at grails.converters.JSON.convertAnother(JSON.java:162) at grails.converters .JSON.value(JSON.java:202) at grails.converters.JSON.render(JSON.java:134) at org.hri.leaverequest.CalendarController.processRequest(CalendarController.groovy:154) at grails.plugin .cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter。的java:198) 在grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63) 在grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter.doFilter(GrailsAnonymousAuthenticationFilter.java:53) 在grails.plugin.springsecurity.web.authentication.RequestHolderAuthenticationFilter.doFilter(RequestHolderAuthenticationFilter.java:49) at grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter.doFilter(MutableLogoutFilter.java:82) at java.util。 concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:615) 在java.lang.Thread.run(Thread.java:744)

+0

什麼版本的Grails?你配置了這些軟件包的掃描嗎? –

+0

@JoshuaMoore版本2.4,我不知道這是什麼意思來配置掃描這些軟件包。 –

回答

0

根據您的Grails版本(本例中爲2.x),您可能需要在「Spring bean掃描」中包含這些軟件包。看看你的Config.groovy並添加它們:

// packages to include in Spring bean scanning 
grails.spring.bean.packages = ['com.example.my.package.here'] 
+0

我假設我繼續保持我現有的代碼相同,只需將我的src/groovy包添加到grails.spring.bean.packages?如果這是正確的,那麼我就沒有成功。我仍然遇到同樣的錯誤。 –

+0

從你的財產注入中刪除'def'。 –

+0

相同的錯誤無法在null對象上調用方法getMessage()。堆棧跟蹤如下: 顯示java.lang.NullPointerException:不能空對象 \t上調用的方法getMessage,()在org.hri.leaverequest.marshaller.ErrorsMarshaller $ _register_closure1_closure2.doCall(ErrorsMarshaller.groovy:26) \t在org.hri.leaverequest .marshaller.ErrorsMarshaller $ _register_closure1.doCall(ErrorsMarshaller。常規:21) –