NullPointerException генерируется при использовании Grails Promises - PullRequest
0 голосов
/ 01 мая 2018

Я использую Grails 2.5.6. У меня в контроллере создается Обещание, которое после завершения время от времени выдает ошибки, и я не могу понять, почему. Вот минимальная реализация:

// FooController.groovy
def bar()
{
  Promises.task {
    log.debug "Hello, Test!"
  }.onComplete {
    log.debug "Complete!"
  }.onError {
    log.debug "Error!"
  }
  render "OK"
}

Когда я в первый раз открываю "foo / bar" в браузере, я вижу "OK", как и ожидалось, и журнал показывает

2018-05-01 16:00:17,311 [Actor Thread 1] DEBUG - Hello, Test!
2018-05-01 16:00:17,322 [Actor Thread 2] DEBUG - Complete!

как и ожидалось. Однако при следующей загрузке я получаю исключение:

2018-05-01 16:00:21,890 [Actor Thread 4] DEBUG - Hello, Test!
Error |
2018-05-01 16:00:21,896 [Actor Thread 6] ERROR gpars.LoggingPoolFactory  - Async execution error: null
Message: null
    Line | Method
->> 1513 | notifyAttributeAssigned in org.apache.catalina.connector.Request
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|   1503 | setAttribute            in     ''
|    539 | setAttribute . . . . .  in org.apache.catalina.connector.RequestFacade
|    283 | setAttribute            in org.apache.catalina.core.ApplicationHttpRequest
|    431 | storeGrailsWebRequest . in org.codehaus.groovy.grails.web.util.WebUtils
|     55 | doCall                  in org.codehaus.groovy.grails.plugins.web.async.WebRequestPromsiseDecorator$_decorate_closure1
|     -1 | call . . . . . . . . .  in     ''
|     61 | doCall                  in org.grails.async.factory.gpars.GparsPromise$_onComplete_closure1
|     -1 | call . . . . . . . . .  in     ''
|     62 | run                     in groovyx.gpars.dataflow.DataCallback$1
|   1142 | runWorker . . . . . . . in java.util.concurrent.ThreadPoolExecutor
|    617 | run                     in java.util.concurrent.ThreadPoolExecutor$Worker
^    745 | run . . . . . . . . . . in java.lang.Thread

Обратите внимание, что при втором запуске закрытие onError не вызывается. Я проследил исключение до следующей строки в org.apache.catalina.connector.Request, но это насколько я получил:

private void notifyAttributeAssigned(String name, Object value, Object oldValue) {
  Context context = this.getContext();
  Object[] listeners = context.getApplicationEventListeners();
                              ^-- NullPointerException thrown here

Я, очевидно, что-то делаю не так, но я не вижу, что. Я долго бился об это, пожалуйста, помогите?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...