Почему Synapse не расширяет переменную в uri-шаблоне?

У меня есть последовательность WSO2 ESB 4.8.1, которая отправляет сообщение в конечную точку HTTP, определенную как

<http method="get" uri-template="http://host.example.com/v1/entity/{uri.var.id}/attributes/foo">

Свойство ранее задается XPath:

<property xmlns:ns="http://org.apache.synapse/xsd" name="uri.var.id" expression="//id" scope="default" type="STRING" />

Иногда он вызывает правильный URL-адрес, а иногда буквально вызывает http://host.example.com/v1/entity/{uri.var.id}/attributes/foo без подстановки переменной. Почему?


person Peter Taylor    schedule 17.09.2015    source источник


Ответы (1)


Могут быть и другие возможные причины, но мне кажется, что причиной моих проблем является побег. Если идентификатор представляет собой чистую буквенно-цифровую строку, он работает, но если он включает пробел, он не заменяется. Было бы полезнее зарегистрировать сообщение об ошибке и перейти к последовательности ошибок, но это то, что нужно поднять с WSO2.

Исправление, которое я нашел, заключается в том, чтобы включить XPath 2.0, отредактировав repository/conf/synapse.properties и раскомментировав synapse.xpath.dom.failover.enabled=true ; а затем использовать функцию экранирования XPath 2.0:

<property xmlns:ns="http://org.apache.synapse/xsd" name="uri.var.id" expression="encode-for-uri(//id)" scope="default" type="STRING"/>
person Peter Taylor    schedule 17.09.2015