Мул - как я могу использовать переменную set-session в http: listener?

У меня composite-source состоит из двух http:listener в Mule;

Я хочу установить переменную на основе каждого из слушателей после получения запросов от этих слушателей;

но эта ошибка возникает при развертывании в mule 3.6.0:

org.mule.module.launcher.DeploymentInitException: SAXParseException: cvc-complex-type.2.4.a: Invalid content was found starting with element 'set-session-variable'. One of '{"http://www.mulesoft.org/schema/mule/core":annotations, "http://www.mulesoft.org/schema/mule/http":response-builder, "http://www.mulesoft.org/schema/mule/http":error-response-builder}' is expected.

Что я должен делать??

Вот мой код:

<composite-source doc:name="Composite Source">
  <http:listener config-ref="HTTP_Listener_Configuration_Source1"
    path="/" doc:name="HTTP">
        <set-session-variable doc:name="Session Variable" value="#[x]" variableName="x" />
  </http:listener>
  <http:listener config-ref="HTTP_Listener_Configuration_Source2"
                path="/" doc:name="HTTP">
        <set-session-variable doc:name="Session Variable" value="#[y]" variableName="x" />
  </http:listener>
</composite-source>

P.S. Я сделал это с http:inbound-endpoint


person Mojtaba    schedule 24.05.2015    source источник
comment
OOC а работает ли у вас сингл http:listener не в composite-source?   -  person David Dossot    schedule 25.05.2015
comment
Нет, ошибка все еще возникает, я что-то пропустил?   -  person Mojtaba    schedule 26.05.2015


Ответы (1)


Помещать здесь set-session-variable незаконно: схема Mule не позволяет этого.

Причина в том, что http:listener не является обычным endpoint, как http:inbound-endpoint, поэтому не поддерживает такого рода вложение, как это делают все другие конечные точки.

Это прискорбно и, надеюсь, что-то, что в конечном итоге будет исправлено. А пока вам нужно найти другой способ различать запросы, поступающие между этими двумя слушателями.

Для этого я рекомендую вам проверить все свойства входящих сообщений, которые они создали, в поисках отличия. Я ожидаю, что здесь можно будет использовать свойство MULE_, но вам нужно будет проверить его в своем конкретном контексте с конкретными HTTP_Listener конфигурациями, которые вы используете.

person David Dossot    schedule 26.05.2015
comment
Спасибо, ваши комментарии всегда полезны. но в этом случае я хочу установить другие переменные на основе пути запроса для маршрутизации запросов и т.д ... Поэтому установка свойств MULE_ и их дифференциация не решает проблему здесь. Кроме того, я думаю, что свойства set и check могут повлиять на производительность по сравнению с set-session-variable. - person Mojtaba; 26.05.2015
comment
Я предлагал не устанавливать MULE_ свойства, а читать их, чтобы найти в них дискриминант: вы можете вычислить собственное значение на основе этого дискриминанта и set-session-variable его. Я действительно думаю, что чтение / установка свойств будет иметь значительное влияние на производительность, особенно по сравнению со временем, которое будет потрачено на ввод-вывод. Не отказывайтесь от подхода, основанного на потенциальных проблемах с производительностью: попробуйте нагрузочное тестирование, чтобы увидеть, как это работает. - person David Dossot; 26.05.2015