Я задал этот вопрос вчера, который Гэри решил. Это исправило проблему обработки ошибок (которая мне понадобится), но заставило меня обнаружить, что у меня периодически возникает проблема с преобразователем xslt, когда я получаю исключение при оценке шаблона в указанной строке c. И эта строка в шаблоне соответствует базовому совпадению.
Интересно, что эта ошибка возникает только иногда, часто оркестровка завершается, и я получаю ожидаемый ответ, но в других случаях кажется, что один из исполнителей Канальные потоки будут иметь исключение времени выполнения при совпадении шаблона преобразователя xslt. Я верю, что с моим сообщением происходит что-то нехорошее в ситуациях сбоя, но не удалось выяснить, почему это происходит периодически.
Я ненавижу задавать вопросы так часто, но я полностью остановился в этом вопросе и был бы признателен за любые отзывы, которые вы можете предоставить гуру интеграции.
Я получаю следующее сообщение об ошибке:
failure occurred in gateway sendAndReceive: error occurred in message handler, nested exception is java.lang.RuntimeException: Internal error evaluating template on line X
Где шаблон в этой строке находится ниже.
xslt
<xsl:template match="/">
<request>
...
</request>
</xsl:template>
context
<bean id="Splitter" class="com.MessageSplitter">
<property name="splitFieldName" value="boundIndexList" />
</bean>
<bean id="Aggregator" class="com.MessageAggregator">
<property name="wrapperNode" value="container" />
</bean>
<int:channel id="splitter_input" />
<int:channel id="splitter_output">
<int:dispatcher task-executor="executor"/>
</int:channel>
<task:executor id="executor" pool-size="4"/>
<int:channel id="aggregator_input" />
<int:splitter id="splitter" input-channel="splitter_input" output-channel="splitter_output"
ref="Splitter" method="splitHeaderParamByFieldName" />
<int:chain input-channel="splitter_output" output-channel="aggregator_input">
<!-- ***RuntimeException thrown here sometimes*** -->
<int-xml:xslt-transformer xsl-templates="XsltTemplate">
<int-xml:xslt-param name="customHeader" expression="headers.boundIndexList" />
</int-xml:xslt-transformer>
<int:gateway request-channel="outbound_gateway" error-channel="exception_errorChannel" />
</int:chain>
<bean id="messageStore" class="org.springframework.integration.store.SimpleMessageStore" />
<int:aggregator input-channel="aggregator_input" output-channel="aggregator_output"
ref="Aggregator" method="aggregateMessages" send-partial-result-on-expiry="false"
expire-groups-upon-completion="true" message-store="viewResRemoveMessageFromStore" />
splitter
public List<Message<String>> splitHeaderParamByFieldName(Message<String> message) throws XPathExpressionException {
List<Message<String>> result = new ArrayList<Message<String>>();
Object paramValue = message.getHeaders().get(splitFieldName);
if (paramValue instanceof List<?>) {
for (Object value : (List<?>) paramValue) {
Message<String> newMessage = MessageBuilder.withPayload(message.getPayload())
.copyHeaders(message.getHeaders())
.setHeader("customHeader", value)
.setHeader("receiveTimeout", 60000)
.build();
result.add(newMessage);
}
} else {
result.add(message);
}
return result;
}