WSO2 ESB: заголовок, установленный в «последовательности», потерян в «последовательности» - PullRequest
0 голосов
/ 05 декабря 2018

У меня огромная проблема с передачей сообщений в WSO2.Вот в чем дело.

В своей последовательности я установил транспортный заголовок в своем сообщении, содержащий messageID, следующим образом:

<property name="MediationMessageId" scope="transport" expression="get-property('MessageID')"/>

Теперь я хочу получить доступ к этому свойству в outsequence,Но когда я пытаюсь получить доступ к нему в моем payloadFactory, все, что я получаю, это пустая строка:

<payloadFactory media-type="json">
    <format>{"mediationmessageid": "$1"}</format>
    <args>
        <arg evaluator="xml" expression="$ctx:MediationMessageId"/>
    </args>
</payloadFactory>

Результат:

{"mediationmessageid": ""}

Я что-то не так делаю?

Большое спасибо

EDIT: последовательность in и последовательность находятся в 2 отдельных файлах.Не знаю, может ли это оказать влияние.

Ответы [ 3 ]

0 голосов
/ 06 декабря 2018

Транспортный заголовок пропадет после использования вызова или отправки посредника для вызова внутренней службы.Бэкэнд устанавливает свои собственные транспортные заголовки (Response) в ответе.

Если вы хотите, чтобы ваше значение оставалось доступным после посредника вызова / отправки, вам необходимо установить его, например, в Synapse (область по умолчанию).Это существует для всей транзакции.Вы можете либо указать «default» в качестве области действия, либо не указывать ее вообще, и она будет установлена ​​на Synapse.

Если вам также необходимо отправить свойство с вашим сообщением в качестве транспортного заголовка (что и делает транспортная область), вам придется установить его дважды.Один раз в области по умолчанию и один раз в качестве транспортного заголовка.Например:

<property name="X-MediationMessageId" scope="transport" expression="get-property('MessageID')"/>
<property name="MediationMessageId" scope="default" expression="get-property('MessageID')"/>

И для извлечения используйте:

<payloadFactory media-type="json">
    <format>{"mediationmessageid": "$1"}</format>
    <args>
        <arg evaluator="xml" expression="$ctx:MediationMessageId"/>
    </args>
</payloadFactory> 

Подробнее о проверке области действия Документация wso2

0 голосов
/ 06 декабря 2018

Хорошо, после долгих потов и слез, я наконец-то победил монстра.

Вот рабочая конфигурация для последовательности in:

<property expression="get-property('MessageID')" name="MediationMessageId" scope="default" type="STRING"/>

И та, что для последовательности out:

<payloadFactory media-type="json">
    <format>{"MediationMessageId": "$1"}</format>
    <args>
        <arg evaluator="xml" expression="get-property('default', 'MediationMessageId')"/>
    </args>
</payloadFactory>

Это была просто путаница в сфере действия свойств ...

Спасибо всем, кто прочитал и задумался над этим вопросом.

0 голосов
/ 05 декабря 2018

ваша собственность находится в обычной области видимости, а не в транспортной области (где находятся заголовки сообщений и т. Д.), Поэтому вы должны получить к ней доступ следующим образом: $ctx:MediationMessageId

Также имеется опечатка, вы определилисвойство с CamelCase при попытке доступа со всеми строчными:)

...