2013-12-07 8 views
2

В течение org.mule.component.BindingInvocationHandler метод вызова Mule пытается получить текущее событие от RequestContext.getEvent(); Но значение идет как Null, и мы получаем NullPointerException. В чем причина того, что устанавливает CurrentEvent из RequestContext null?Mule, возвращающий null, когда RequestContext.getEvent()

Обновление: Мы используем java.util.concurrent.ExecutorService для вызова метода, связанного с BindingInvocationHandler.

ответ

2

RequestContext.getEvent() использует ThreadLocal, чтобы узнать о событии в полете, поэтому, возможно, вы вызываете его из потока, который не является тем, который обрабатывает MuleEvent?

Если это так, вы можете попробовать клонирование события, а затем передать его в свой поток и восстановить его как текущее событие с RequestContext.setEvent(xxx).

Ожидать турбулентность, поскольку это не маленький подвиг, хотя Мул делает это внутренне.

Используйте событие newThreadCopy(), чтобы получить копию, которую можно обработать другой нитью Мула, не выдавая исключения.

+0

Точно, мы вызываем его с помощью механизма резьбонарезания. который использует Cached ThreadPool - java.util.concurrent.ExecutorService. Как мы можем получить эту ошибку, если нам все еще нужно использовать ExecutorService –

+1

В моем ответе добавлено несколько предложений. –

+0

Благодарим вас, я попробую ваше предложение и ответьте в ближайшее время. –

Смежные вопросы