2016-04-05 12 views
0

Bazı özel mareşaller oluşturdum ve ileti hizmetlerine erişmeye çalışıyorum. Takip koduna sahibim.src/groovy içinde hizmete erişme

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 
     } 
    } 
} 

ben ge değilim Aşağıdaki istisnayı tting

Boş nesne üzerinde getMessage() yöntemi çağrlanılamıyor. StackTrace aşağıdaki gibidir: java.lang.NullPointerException: org.hri.leaverequest.marshaller at : org.hri.leaverequest.marshaller.ErrorsMarshaller $ _register_closure1_closure2.doCall (26 ErrorsMarshaller.groovy) null nesne üzerine yöntem getMessage() çağırmak olamaz Grails.converters.JSON.convertAnother (JSON.java:162) at grails.converters adresinde bulunan grails.converters.JSON.value (JSON.java:202) adresinde yer almaktadır. .JSON.value (JSON.java:202) grails.converters.JSON.render adresinden (JSON.java:134) adresinden org.hri.leaverequest.CalendarController.processRequest (TakvimController.groovy: 154) grails.plugin adresinde .cache.web.filter.PageFragmentCachingFilter.doFilter (PageFragmentCachingFilter. Java: grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter.doFilter (GrailsAnonymousAuthenticationFilter.java:53) de grails.plugin.cache.web.filter.AbstractFilter.doFilter (AbstractFilter.java:63) 198) de grails.plugin.springsecurity.web.authentication.RequestHolderAuthenticationFilter.doFilter (RequestHolderAuthenticationFilter.java:49) grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter.doFilter (MutableLogoutFilter.java:82) java.util adresinde. java.lang.Thread.run de java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:615) de concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1145) (Thread.java:744)

+0

sürümü nedir? Bu paketlerin taranmasını yapılandırdın mı? –

+0

@JoshuaMoore sürüm 2.4, bu paketlerin taranmasını yapılandırmak için ne anlama geldiğini bilmiyorum. –

cevap

0

Grails sürümünüze bağlı olarak (bu durumda 2.x), paketleri "Yay fasulyesi taraması" na dahil etmeniz gerekebilir. senin Config.groovy bak ve bunları ekleyin: Grails

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

Mevcut kodumu aynı tutmaya devam ettiğimi ve sadece src/groovy paketimi grails.spring.bean.packages dosyasına eklediğimi varsayıyorum. Eğer bu doğruysa, bunu başarı ile yapmamıştım. Hala aynı hatayı yaşıyorum. –

+0

Mülkünüzü, enjeksiyonunuzdan kaldırın. –

+0

Aynı hata null nesnesine getMessage() yöntemini çağıramıyor. StackTrace aşağıdaki gibidir: java.lang.NullPointerException: org.hri.leaverequest.marshaller.ErrorsMarshaller $ _register_closure1_closure2.doCall de boş nesne \t üzerine yöntem getMessage() çağırmak olamaz (ErrorsMarshaller.groovy: 26) \t org.hri.leaverequest de .marshaller.ErrorsMarshaller $ _register_closure1.doCall (ErrorsMarshaller.groovy: 21) –