WSO2 ESB: Показать ответ dataService

Как вы отображаете ответ, возвращаемый при вызове конечной точки веб-службы в последовательности?

Ниже приведена последовательность, которую я использую. Я хотел бы отобразить возвращаемое значение из службы данных под названием «CDServiceEndpoint» в файле wso2carbon.log. Это возможно? Если нет, то как я могу отобразить данные.

<sequence xmlns="http://ws.apache.org/ns/synapse" name="ConcurGetADPExtractFlow" onError="GeneralErrorHandler">
   <property xmlns:ns="http://org.apache.synapse/xsd" xmlns:ns3="http://org.apache.synapse/xsd" name="current-context-details" expression="concat(get-property('current-context-details'), ', ConcurGetADPExtractFlow')" />
   <property name="scenario" value="ConcurGetADPExtractFlow" />
   <log level="custom">
      <property name="DEBUGGING" value="ConcurGetADPExtractFlow" />
      <property name="start-date" value="2015-02-23" />
      <property xmlns:ns="http://org.apache.synapse/xsd" xmlns:ns3="http://org.apache.synapse/xsd" name="End Date" expression="get-property('current-date')" />
   </log>
   <xslt key="Concur_Get_ADP_Extract_Transformation">
      <property name="start-date" value="2015-03-02" />
      <property xmlns:ns="http://org.apache.synapse/xsd" xmlns:ns3="http://org.apache.synapse/xsd" name="end-date" expression="get-property('current-date')" />
   </xslt>
   <property name="post-data-service-sequence" value="ConcurTransformADPExtractFlow" />
   <property name="OUT_ONLY" value="false" />
   <send receive="DataServiceInvocationErrorFlow">
      <endpoint key="ConcurDataServiceEndpoint" />
   </send>
   <description>Sends a request to the data service for the ADP extract data.</description>
</sequence>

Ниже показано, как выглядит мой DataServiceInvocationErrorFlow.

 <sequence xmlns="http://ws.apache.org/ns/synapse" name="DataServiceInvocationErrorFlow">
   <filter xmlns:ns="http://org.apache.synapse/xsd" xmlns:m="http://ws.wso2.org/dataservice" xmlns:ns3="http://org.apache.synapse/xsd" xpath="//m:DataServiceFault">
      <then>
         <log level="custom">
            <property name="status" value="data-service-fault" />
         </log>
         <property name="error_message" expression="//m:DataServiceFault" />
         <sequence key="GeneralErrorHandler" />
         <drop />
      </then>
      <else>
         <filter source="string-length(get-property('ERROR_MESSAGE'))" regex="0.0">
            <then>
               <filter xpath="//soapenv:Fault">
                  <then>
                     <log level="custom">
                        <property name="status" value="ERROR" />
                     </log>
                     <property name="error_message" expression="//soapenv:Fault" />
                     <sequence key="GeneralErrorHandler" />
                     <drop />
                  </then>
                  <else>
                     <log level="custom">
                        <property name="status" value="success response from DSS" />
                     </log>
                     <filter source="string-length(normalize-space(get-property('post-data-service-sequence')))" regex="0.0">
                        <then />
                        <else>
                           <property name="temp-post-data-service-sequence" expression="get-property('post-data-service-sequence')" />
                           <property name="post-data-service-sequence" value="" />
                           <sequence key="{get-property('temp-post-data-service-sequence')}" />
                        </else>
                     </filter>
                  </else>
               </filter>
            </then>
            <else>
               <property name="error_message" expression="get-property('ERROR_MESSAGE')" />
               <sequence key="GeneralErrorHandler" />
               <drop />
            </else>
         </filter>
      </else>
   </filter>
</sequence>

person Gopi    schedule 03.03.2015    source источник


Ответы (1)


Если под CDServiceEndpoint вы имели в виду ConcurDataServiceEndpoint, то вы уже обрабатываете ответ от этой конечной точки в своей последовательности DataServiceInvocationErrorFlow, которую вы определили в посреднике Send, имя которого, кстати, сбивает с толку, поскольку ваша последовательность receive будет выполняться независимо от того, получите ли вы ошибку ответ или хороший. Все, что вам нужно сделать, это зарегистрировать его внутри DataServiceInvocationErrorFlow с помощью Log mediator.

Если бы вы не определили последовательность receive на своем посреднике Send, ответ попал бы на ваш outSequence, где вы также можете зарегистрировать его с помощью посредника Log.

person Voicu    schedule 03.03.2015
comment
Спасибо Voicu, я добавил свой ответ как еще один в этой теме. И да, под CDServiceEndpoint я подразумеваю ConcurDataServiceEndPoint. - person Gopi; 04.03.2015
comment
@Gopi: Так что обработайте свои успешные ответы и в DataServiceInvocationErrorFlow и, возможно, измените его имя, чтобы оно не отражало только поток ошибок. Обратите внимание, что в настоящее время вы отфильтровываете все сообщения, не являющиеся ошибками. - person Voicu; 05.03.2015