bysouleater opened a new issue, #14616:
URL: https://github.com/apache/grails-core/issues/14616

   ### Steps to Reproduce
   Using Grails 3.2.8
   1.- Create domain class A
   ```
   @Resource(readOnly = false, formats = ['json', 'xml'], uri = "/a")
   class A {
       B b
   }
   ```
   2.- Create domain class B
   ```
   class B {
       String field1
       String field2
   }
   ```
   3.- Make POST call ignoring 1 property from associated class B on purpose
   ```
   POST http://localhost:8080/a
   {
       "b": {
           "field1": "test"
       }
   }
   ```
   ### Expected Behaviour
   ```
   400 Bad Request
   {
        "message": "Property field2 can't be null"
   }
   ```
   ### Actual Behaviour
   ```
   500 Internal Server Error
   2017-04-25 15:42:43.003 ERROR --- [nio-8080-exec-2] 
o.g.web.errors.GrailsExceptionResolver   : NullPointerException occurred when 
processing request: [POST] /a
   Stacktrace follows:
   
   java.lang.reflect.InvocationTargetException: null
        at 
org.grails.core.DefaultGrailsControllerClass$ReflectionInvoker.invoke(DefaultGrailsControllerClass.java:211)
        at 
org.grails.core.DefaultGrailsControllerClass.invoke(DefaultGrailsControllerClass.java:188)
        at 
org.grails.web.mapping.mvc.UrlMappingsInfoHandlerAdapter.handle(UrlMappingsInfoHandlerAdapter.groovy:90)
        at 
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
        at 
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
        at 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
        at 
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
        at 
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
        at 
org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55)
        at 
org.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:77)
        at 
org.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:67)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
   Caused by: java.lang.NullPointerException: null
        at 
org.hibernate.engine.internal.StatefulPersistenceContext.addEntity(StatefulPersistenceContext.java:468)
        at 
org.hibernate.action.internal.AbstractEntityInsertAction.makeEntityManaged(AbstractEntityInsertAction.java:126)
        at 
org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:279)
        at 
org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:254)
        at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:299)
        at 
org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:318)
        at 
org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:275)
        at 
org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:182)
        at 
org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:113)
        at 
org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192)
        at 
org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177)
        at 
org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:97)
        at 
org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:73)
        at 
org.grails.orm.hibernate.support.ClosureEventTriggeringInterceptor.onSaveOrUpdate(ClosureEventTriggeringInterceptor.java:81)
        at 
org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:651)
        at org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:643)
        at 
org.hibernate.engine.spi.CascadingActions$5.cascade(CascadingActions.java:218)
        at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:391)
        at 
org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:316)
        at 
org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:155)
        at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:104)
        at 
org.hibernate.event.internal.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:414)
        at 
org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:252)
        at 
org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:182)
        at 
org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:113)
        at 
org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192)
        at 
org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177)
        at 
org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:97)
        at 
org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:73)
        at 
org.grails.orm.hibernate.support.ClosureEventTriggeringInterceptor.onSaveOrUpdate(ClosureEventTriggeringInterceptor.java:81)
        at 
org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:651)
        at org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:643)
        at org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:638)
        at 
org.grails.orm.hibernate.AbstractHibernateGormInstanceApi$_performSave_closure3.doCall(AbstractHibernateGormInstanceApi.groovy:242)
        at 
org.grails.orm.hibernate.GrailsHibernateTemplate.doExecute(GrailsHibernateTemplate.java:286)
        at 
org.grails.orm.hibernate.GrailsHibernateTemplate.execute(GrailsHibernateTemplate.java:230)
        at 
org.grails.orm.hibernate.GrailsHibernateTemplate.execute(GrailsHibernateTemplate.java:116)
        at 
org.grails.orm.hibernate.AbstractHibernateGormInstanceApi.performSave(AbstractHibernateGormInstanceApi.groovy:241)
        at 
org.grails.orm.hibernate.AbstractHibernateGormInstanceApi.save(AbstractHibernateGormInstanceApi.groovy:158)
        at 
org.grails.datastore.gorm.GormEntity$Trait$Helper.save(GormEntity.groovy:151)
        at 
grails.rest.RestfulController.saveResource(RestfulController.groovy:297)
        at grails.rest.RestfulController.$tt__save(RestfulController.groovy:103)
        at 
grails.transaction.GrailsTransactionTemplate$2.doInTransaction(GrailsTransactionTemplate.groovy:96)
        at 
org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:133)
        at 
grails.transaction.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:93)
        ... 14 common frames omitted
   ```
   ### Environment Information
   
   - **Operating System**: Mac OSX Sierra
   - **Grails Version:** 3.2.8
   - **JDK Version:** 1.8
   
   ### Example Application
   
   For some reason, null validation of a missing field on the request body make 
this fail. If instead, you declare a property Double field3 and in the request 
body you send e.g. "field3": "something", the correct 400 Bad Request is 
triggered. Only fails when you omit one field of the sub-domain.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to