Я начал использовать si-xml: xpath-router, но наткнулся на контрольно-пропускной пункт. Я использую правильный маршрутизатор, но неправильную реализацию? Если я использую неправильный маршрутизатор, какой из них я должен использовать, то есть маршрутизатор по умолчанию, тип полезной нагрузки или, может быть, простое выражение SpEL?
Вариант использования:
Мне нужно направить сообщение на основе содержимого полезной нагрузки. Запрос содержит элемент, и «действие», которое мне нужно выполнить, содержится в одном, если его атрибуты см. Ниже в атрибуте «команда» .
Пример входящего запроса (поступает от веб-службы).
<Request>
<Records>
<Record>
<data key="name" value="Jack Bauer" />
<data key="command" value="sendSMS" />
</Record>
</Records>
</Request>
псевдокод был:
- маршалловское сообщение.
- маршрут, основанный на значении, через xpath-router
но я получаю ошибку:
неподдерживаемый тип полезной нагрузки [javax.xml.transform.dom.DOMResult]
Чтобы решить эту проблему, я попытался:
добавление атрибута «результирующий преобразователь» к бину-преобразователю с помощью ResultToDocumentTransformer. ошибка = не удалось определить имя канала ''
добавление атрибута "тип результата" в преобразователь с использованием StringResult. ошибка = неподдерживаемый тип полезной нагрузки [org.springframework.xml.transform.StringResult]
добавив оба вышеперечисленных. ошибка = не удалось определить имя канала ''
добавление атрибута «оценивать как строку» с использованием значения true. ошибка = неподдерживаемый тип полезной нагрузки.
Исходный файл конфигурации ниже:
<gateway id="gateway" default-request-channel="requestChannel"
service-interface="foo.SomeClass" />
<beans:bean id="marshaller"
class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<beans:property name="classesToBeBound">
<beans:list>
<beans:value>com.foo.Request</beans:value>
<beans:value>com.foo.Record</beans:value>
<beans:value>com.foo.Data</beans:value>
</beans:list>
</beans:property>
</beans:bean>
<chain input-channel="requestChannel">
<poller max-messages-per-poll="10" task-executor="executor">
<interval-trigger interval="5000" />
</poller>
<si-xml:marshalling-transformer marshaller="marshaller"/>
<si-xml:xpath-router id="instockRouter" resolution-required="true">
<si-xml:xpath-expression expression="/Request/Records/Record/data[@key='command']"/>
<si-xml:mapping value="sendSMS" channel="SMSChannel"/>
</si-xml:xpath-router>
</chain>
<task:executor id="executor" pool-size="8"/>