Почему стратегия исключений Mule такая болтливая?
В моем приложении Mule я настроил некоторые потоки для использования стратегии исключения catch для выполнения специальной обработки. В этих случаях я хочу вставить ошибку и исходную полезную нагрузку в хранилище объектов. Повсюду, стратегия исключений по умолчанию в порядке.
<flow name="saveLookup">
<vm:inbound-endpoint exchange-pattern="one-way" ref="Lookup_Save_VM" />
<component>
<spring-object bean="insertLookupMDCvalues"/>
</component>
<set-variable variableName="originalPayload" value="#[payload]"/>
<json:json-to-object-transformer returnClass="com.company.LookupData"/>
<set-variable variableName="transactionId" value="#[payload.transactionId]"/>
<transactional action="ALWAYS_BEGIN">
<logger message="${lookup.SQL}" level="INFO"/>
<jdbc:outbound-endpoint exchange-pattern="request-response" queryKey="saveLookup" queryTimeout="-1" connector-ref="JdbcConnector" />
<foreach collection="#[payload.transactional.lookupItems.items]">
<logger message="${lookup.item.SQL}" level="INFO" />
<jdbc:outbound-endpoint exchange-pattern="request-response" queryKey="saveLookupItem" queryTimeout="-1" connector-ref="JdbcConnector"/>
</foreach>
</transactional>
<component>
<spring-object bean="clearLookupMDCvalues"/>
</component>
<catch-exception-strategy>
<message-properties-transformer scope="invocation">
<add-message-property key="errorMap" value="#[['id' : transactionId, 'body' : originalPayload, 'error' : exception.summaryMessage]]"/>
</message-properties-transformer>
<choice>
<when expression="#[message.inboundProperties['resubmit']]">
<logger message="Resubmission of lookup data failed, saving to Dead Letter object store. ID=#[transactionId]" level="INFO"/>
<objectstore:store config-ref="lookupDeadLetterOS" key="#[transactionId]" overwrite="true" value-ref="#[errorMap]"/>
</when>
<otherwise>
<logger message="Saving lookup data failed, saving to Error object store. ID=#[transactionId]" level="INFO"/>
<objectstore:store config-ref="lookupErrorOS" key="#[transactionId]" overwrite="true" value-ref="#[errorMap]"/>
</otherwise>
</choice>
<set-payload value="Error: #[exception.summaryMessage]"/>
<component>
<spring-object bean="clearLookupMDCvalues"/>
</component>
</catch-exception-strategy>
</flow>
Моя проблема заключается в том, что при возникновении ошибки, скажем, исключения Null Pointer в компоненте foreach, я вижу четыре оператора журнала ERROR для каждого события:
Стек исключений: 1. null (java.lang.NullPointerException)...и так далее. Это зарегистрировано дважды.CatchMessagingExceptionStrategy - Сообщение. Не удалось выполнить выражение "payload.transactional.lookupItems.items". (Org.mule.api.expression.ExpressionRuntimeException). Полезная нагрузка сообщения имеет тип: LookupDataDefaultMessagingExceptionStrategy - Сообщение. Не удалось выполнить выражение «payload.transactional.lookupItems.items». (Org.mule.api.expression.ExpressionRuntimeException). Полезная нагрузка сообщения имеет тип: LookupDataЯ думал, что стратегия исключений для конкретного потока должна переопределять стратегию по умолчанию. Зачем дублировать сообщения журнала, и есть ли способ их скрыть? Я бы хотел избежать настройки стратегии исключений по умолчанию, поскольку в большинстве потоков это вполне приемлемое поведение.