WSO2 ESB: потеря заголовка (процессор выборки)

Я пытаюсь отправить сообщение через WSO2 ESB 4.6.0 с помощью MessageProcessor:
Proxy-> Proxy (Store) -> Processor-> Sequence-> Proxy
Я установил свойство (Область 'transport') в прокси # 1, отправьте его на прокси # 2, где я могу успешно зарегистрировать его, но затем я передаю сообщение прокси # 3 через процессор выборки, и свойство теряется .
Это ошибка? Как я могу отправить свойство «транспорт» через процессор?

Я ожидаю, что value_1 появится вместо null в Proxy_3.


<messageProcessor name="Processor_1" class="org.apache.synapse.message.processors.sampler.SamplingProcessor" messageStore="Store_1" xmlns="http://ws.apache.org/ns/synapse">
   <parameter name="interval">1000</parameter>
   <parameter name="sequence">Sequence_1</parameter>
</messageProcessor>

MessageStore

Store_1 is InMemoryMessageStore

Прокси_1

<proxy xmlns="http://ws.apache.org/ns/synapse" name="Proxy_1" transports="jms" statistics="disable" trace="disable" startOnLoad="true">
   <target>
      <inSequence>
         <property name="my_property_1" value="value_1" scope="transport"/>
      </inSequence>
      <outSequence>
         <send/>
      </outSequence>
      <faultSequence/>
      <endpoint>
         <address uri="http://localhost:8280/services/Proxy_2" format="soap11" />
      </endpoint>
   </target>
   <parameter name="transport.jms.Destination">Queue</parameter>
</proxy>

Прокси_2

<proxy xmlns="http://ws.apache.org/ns/synapse" name="Proxy_2" transports="https,http" statistics="disable" trace="disable" startOnLoad="true">
   <target>
      <inSequence>
         <property name="preserveProcessedHeaders" value="true"/>
         <log level="custom" separator=",">
            <property name="my_property_1" expression="get-property('transport', 'my_property_1')"/>
         </log>
         <store messageStore="Store_1"/>
      </inSequence>
   </target>
</proxy>

Последовательность_1

<sequence xmlns="http://ws.apache.org/ns/synapse" name="Sequence_1">
   <send>
      <endpoint>
         <address uri="http://localhost:8280/services/Proxy_3" format="soap11"/>
      </endpoint>
   </send>
</sequence>

Прокси_3

<proxy xmlns="http://ws.apache.org/ns/synapse" name="Proxy_3" transports="https,http" statistics="disable" trace="disable" startOnLoad="true">
   <target>
      <inSequence>
         <log level="custom">            
            <property name="my_property_1" expression="get-property('transport', 'my_property_1')"/>
         </log>
         <send/>
      </inSequence>
   </target>
</proxy>

person surlac    schedule 04.06.2013    source источник


Ответы (2)


Свойства транспорта передаются как заголовки HTTP. Но когда вы сохраняете сообщение в очереди, оно сохраняет только то, что доступно в полезной нагрузке сообщения, с типом содержимого, установленным на XML. Не существует стандартного способа сохранить всю информацию настраиваемого заголовка HTTP при сохранении сообщения в очереди. Вы должны улучшить существующую реализацию хранилища / процессора сообщений с учетом этих дополнительных заголовков. Однако более простым решением было бы перед сохранением сообщения в очереди использовать посредник обогащения, чтобы установить значение заголовка в качестве элемента полезной нагрузки в сообщении. Затем из вашего прокси, перед отправкой, извлеките его, создайте собственный заголовок и отправьте.

person Chintana Wilamuna    schedule 05.06.2013
comment
Спасибо @Chintana! Верно ли, что для решения проблемы мне нужно поместить свойство транспорта в заголовок конверта SOAP перед сохранением в MessageStore? - person surlac; 05.06.2013
comment
Да, вы можете использовать его как элемент заголовка SOAP или как специальный элемент в полезной нагрузке. - person Chintana Wilamuna; 05.06.2013

Как сказал Чинтана, вы должны добавить его в полезную нагрузку, если вы используете ESB 4.6.0 или 4.7.0. Но мы уже исправили это, чтобы сохранить значения заголовка, когда мы сохраняем сообщение в магазине. Он выйдет в следующем выпуске.

person Harsha    schedule 04.08.2013