У меня есть 2 пользовательских действия, выполняемые одно за другим в одном и том же сервисе, подобном этому
<actions mep="RequestResponse">
<action name="ActionA" class="ClassA"/>
<action name="ActionB" class="ClassB"/>
</actions>
Предположим, что ActionA выполняет некоторые проверки по полученному сообщению. Если проверки показали, что сообщение является недействительным, как вы отправляете ответ вызывающему об этом сбое?
Прямо сейчас в своих действиях я установил ответ в сообщении на ActionA и поставил в нем отметку, указывающую, что я обнаружил ошибку в ActionA и проверках ActionB на эту отметку перед выполнением его кода. Я нашел этот метод полезным, но обременительным, потому что все мои действия должны начинаться с:
if (!markIspressent) {
//Code goes here
}
return message.
Я попытался установить ответное сообщение в ActionA и вернуть null
, чтобы остановить конвейер, но это не работает. Я также попробовал другой метод, который я нашел, бросая ActionProcessingFaultException(message,"SomeTextGoesInHere")
, но он также не работает.
Моя главная проблема с этим вторым состоит в том, что ESB пытается повторно обработать сообщение, которое выдало это исключение, и я не вижу ответ, который я установил в сообщении, пока ESB не сдастся и не отправит его обратно. Но это сдача занимает до 60-х годов.
Поэтому мой вопрос заключается в том, как вы можете отправить ответное сообщение сообщателю, прежде чем достигнуть конца конвейера службы.
Спасибо