2015-09-14 6 views
0

Я развернул прокси-службу в WSO2 ESB для получения набора данных из SOAP WS, и у меня есть OutSequence на основе последовательности, вызывающей шаблон.Переключение OutSequence в службе WSO2 ESB Proxy на основе ответа SOAP

Мне нужно направить различные ответы WS на основе различных запросов, маршрутизирующих их на разные файлы, написанные транспортом vfs.

Реальная последовательность такова:

<sequence xmlns="http://ws.apache.org/ns/synapse" name="seq_prova_con_template"> 
    <call-template target="file"> 
     <with-param name="filename" value="IstatAllDataflow-template.xml"></with-param> 
    </call-template> 
</sequence> 

Я думаю о включение случае медиатора, но я хотел бы понять, как «поймать» информацию для выбора правильного случая. В примере:

`<switch source="//m0:getQuote/m0:request/m0:symbol"  xmlns:m0="http://services.samples/xsd"> 
     <case regex="IBM"> 
      <!-- the property mediator sets a local property on the *current*  message --> 
      <property name="symbol" value="Great stock - IBM"/> 
     </case> 
     <case regex="MSFT"> 
      <property name="symbol" value="Are you sure? - MSFT"/> 
     </case> 
     <default> 
      <!-- it is possible to assign the result of an XPath or JSON Path  expression as well --> 
     <property name="symbol" 
      expression="fn:concat('Normal Stock - ', //m0:getQuote/m0:request/m0:symbol)" 
      xmlns:m0="http://services.samples/xsd"/> 
    </default> 

`

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

<sequence xmlns="http://ws.apache.org/ns/synapse" name="seq_template_switch"> 
    <switch xmlns:ns="http://org.apache.synapse/xsd" xmlns:m0="http://services.samples" source="??????"> 
     <case regex="QueryStructure"> 
     <call-template target="file"> 
      <with-param name="filename" value="IstatAllDataflow-template.xml"></with-param> 
     </call-template> 
     </case> 
     <case regex="GetCompactData"> 
     <call-template target="file"> 
      <with-param name="filename" value="GetCompactData-template.xml"></with-param> 
     </call-template> 
     </case> 
    </switch> 
</sequence> 

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

[EDIT] Файл журнала имеет следующее:

TID: [0] [ESB] [2015-09-18 10:33:09,125] INFO {org.apache.synapse.mediators.builtin.LogMediator} - To: http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: , MessageID: urn:uuid:7cc540d3-2893-4b0e-8a24-ab4538236d45, Direction: response, Envelope: <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soap:Body><QueryStructureResponse xmlns="http://ec.europa.eu/eurostat/sri/service/2.0"><QueryStructureResult><RegistryInterface xmlns="http://www.SDMX.org/resources/SDMXML/schemas/v2_0/message"><Header><ID>IT1001</ID><Test>true</Test><Name xml:lang="en">ISTAT_JD_237</Name><Prepared>2001-03-11T15:30:47+01:00</Prepared><Sender id="ISTAT"><Name xml:lang="en">Italian Statistical Institute</Name><Contact> 

Было бы полезно сделать выбор переключатель/случае посредник о теге <QueryStructureResponse>. Например, вместо этого тега я мог бы иметь <GetCompactData>. Я хотел бы создать медиатор switch/case, который управляется наличием одного из этих двух тегов. Это было бы хорошим началом для понимания того, как использовать расположение XPath и использовать единую последовательность для дифференциации ответов SOAP в разных файлах с помощью транспорта vfs. Выбор файла для записи будет осуществляться по типу ответа от WS.

+0

Вы хотите вызывать разные последовательности на основе контента в вашем ответе SOAP. пожалуйста, исправьте меня, если мое понимание ошибочно. Укажите ответ SOAP, чтобы ответить на ваш вопрос. –

+0

Я думаю, что это более полезно, основываясь на содержании в моем запросе SOAP: я мог бы поместить эту последовательность в запланированную задачу или использовать запрос с прокси-сервисом, и я хотел бы конвоировать ответ в соответствии с запросом. Я не знаю, что добавить в исходную последовательность коммутатора, если я хочу, чтобы chuose адресата в соответствии с некоторыми ключевыми словами в сообщении запроса. Надеюсь, я был ясен, спасибо вам большое. – FDC

+0

вам нужно использовать Xpath в источнике. –

ответ

1

Ниже следует работать на вас. Он проверяет, существует ли QueryStructureResponse в SOAP xml или нет. Если доступно, тогда он вызовет шаблон IstatAllDataflow-template.xml, иначе он будет вызывать GetCompactData-template.xml.

<switch source="boolean($body//*[local-name() = 'QueryStructureResponse'])"> 
     <case regex="true"> 
      <call-template target="file"> 
     <with-param name="filename" value="IstatAllDataflow-template.xml"></with-param> 
    </call-template> 
     </case> 
     <case regex="false"> 
      <call-template target="file"> 
     <with-param name="filename" value="GetCompactData-template.xml"></with-param> 
    </call-template> 
     </case> 
    </switch> 

Другое решение, использующее фильтр в WSO2 esb.

<filter source="boolean($body//*[local-name() = 'QueryStructureResponse'])" regex="true"> 
    <then> 
     <log> 
     <property name="======================== TRUE =========================" value="true"/> 
     </log> 
     <call-template target="file"> 
     <with-param name="filename" value="IstatAllDataflow-template.xml"/> 
     </call-template> 
    </then> 
    <else> 
     <log> 
     <property name="==================== FALSE =========================" value="false"/> 
     </log> 
     <call-template target="file"> 
     <with-param name="filename" value="GetCompactData-template.xml"/> 
     </call-template> 
    </else> 
</filter> 
+0

Спасибо, теперь я должен выбрать точный путь для поиска моего источника из запроса запроса XML, проходящего через прокси-сервис (с использованием запланированной задачи или простого сообщения с SOAP UI ... возможно ли это?). Идеи о том, где я могу найти источник сообщения, чтобы точно управлять коммутатором?Я мог бы знать, как перемещаться внутри сообщения с помощью Xpath, но я не знаю, как передать свой Xpath на сообщение запроса ... Надеюсь, я правильно объяснил свою проблему. – FDC

+0

Можете ли вы предоставить свой XML и ключевое слово на основе того, что вы хотите вызвать последовательность. –

+0

Я редактировал главный вопрос. Спасибо. – FDC