2014-09-23 3 views
1

Я использую wso2esb 4.7.0 и wso2dss 3.1.0.Мой сценарий - я хочу выбрать все partybranch для конкретного клиента. Для этого у меня есть огнь запроса типа:Ошибка при использовании медиатора итератора в wso2esb

select partybranchid,clientid from mpartybranch where clientid = 473906852857651 

, и это дает мне список из 2 записей вроде:

partybranchid clientid 

-2500000000  473906852857651 
796243010946586 473906852857651 

Я хотел бы разделить эти два и узнать адрес по каждому из them.I могут воспользоваться следующим запросом в ДСС, который работает отдельно для меня:

select * from address where partybranchid = ? and clientid =? 

Теперь у меня есть использование итератора посредник в wso2esb осуществить это в одной конфигурации click.My является:

 <iterate xmlns:f="http://ws.wso2.org/dataservice" continueParent="true" preservePayload="true" expression="//f:Datalist" id="iterate1" sequential="true"> 
     <target> 
      <sequence> 
       <property xmlns:s="http://ws.wso2.org/dataservice" name="partybranchid1" expression="//s:partybranchid/text()" scope="default" type="STRING"/> 
       <property xmlns:s="http://ws.wso2.org/dataservice" name="latitude" expression="get-property('latitude')"/> 
       <property xmlns:s="http://ws.wso2.org/dataservice" name="longitude" expression="get-property('longitude')"/> 
       <property xmlns:s="http://ws.wso2.org/dataservice" name="radius" expression="get-property('radius')"/> 
       <payloadFactory media-type="xml"> 
       <format> 
        <p:select_addresses_op xmlns:p="http://ws.wso2.org/dataservice"> 
         <p:latitude>$1</p:latitude> 
         <p:longitude>$2</p:longitude> 
         <p:radius>$3</p:radius> 
         <p:objectid>$4</p:objectid> 
        </p:select_addresses_op> 
       </format> 
       <args> 
        <arg xmlns:s="http://ws.wso2.org/dataservice" expression="get-property('latitude')" evaluator="xml"/> 
        <arg xmlns:s="http://ws.wso2.org/dataservice" expression="get-property('longitude')" evaluator="xml"/> 
        <arg xmlns:s="http://ws.wso2.org/dataservice" expression="get-property('radius')" evaluator="xml"/> 
        <arg xmlns:s="http://ws.wso2.org/dataservice" expression="get-property('partybranchid1')" evaluator="xml"/> 
       </args> 
       </payloadFactory> 
       <property name="FORCE_SC_ACCEPTED" value="true" scope="axis2"/> 
       <property name="messageType" value="application/json" scope="axis2"/> 
       <send receive="spatial_seq3"> 
       <endpoint> 
        <address uri="http://localhost:9764/services/Aspatialtrial_Dataservice/" format="soap11"/> 
       </endpoint> 
       </send> 
      </sequence> 
     </target> 
    </iterate> 

Эта конфигурация работает, но не дает ожидаемого output.Following являются выходами на стороне клиента и на стороне сервера:

На стороне сервера (ESB) Выход:

[2014-09-25 09:52:30,941] INFO - LogMediator To: /services/spatial_proxy_test, MessageID: urn:uuid:c91c22b6-245f-49f7-bf30-65561c87050f, Direction: request, userid = null, username = vikash|214057357158656, password = gbadmin 
[2014-09-25 09:52:30,953] INFO - TimeoutHandler This engine will expire all callbacks after : 120 seconds, irrespective of the timeout action, after the specified or optional timeout 
[2014-09-25 09:52:31,286] INFO - LogMediator To: http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: , MessageID: urn:uuid:9fa3c017-27f5-405e-a11b-33a9fa9a8f44, Direction: response, kk = true, Envelope: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Body><ResponseJSON><Body><Datalist><Authentication>true</Authentication></Datalist></Body></ResponseJSON></soapenv:Body></soapenv:Envelope> 
[2014-09-25 09:52:32,148] INFO - LogMediator FORCE_ERROR_ON_SOAP_FAULT = true, partybranchid1 = -2500000000796243010946586, latitude = 18.975, longitude = 72.8258, radius = 10 
[2014-09-25 09:52:32,344] INFO - LogMediator To: http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: , MessageID: urn:uuid:c635aa03-36ac-4af7-8b01-9bb31b35f4ef, Direction: response, Datalist values logged = <Datalist xmlns="http://ws.wso2.org/dataservice"><addressid>457492199890748451</addressid><geocode>POINT(18.975 72.8258)</geocode></Datalist>, Envelope: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><DataCollection xmlns="http://ws.wso2.org/dataservice"><Datalist><addressid>457492199890748451</addressid><geocode>POINT(18.975 72.8258)</geocode></Datalist></DataCollection></soapenv:Body></soapenv:Envelope> 
[2014-09-25 09:52:32,345] INFO - LogMediator To: http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: , MessageID: urn:uuid:e77556c0-b722-4f91-879b-1cbb4ae20aec, Direction: response, Datalist values logged = <Datalist xmlns="http://ws.wso2.org/dataservice"><addressid>456211760366486560</addressid><geocode>POINT(19.0769048 72.8570555)</geocode></Datalist><Datalist xmlns="http://ws.wso2.org/dataservice"><addressid>456217678470710306</addressid><geocode>POINT(18.975 72.8258)</geocode></Datalist>, Envelope: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><DataCollection xmlns="http://ws.wso2.org/dataservice"><Datalist><addressid>456211760366486560</addressid><geocode>POINT(19.0769048 72.8570555)</geocode></Datalist><Datalist><addressid>456217678470710306</addressid><geocode>POINT(18.975 72.8258)</geocode></Datalist></DataCollection></soapenv:Body></soapenv:Envelope> 

на клиенте боковой выход

{"ResponseJSON":{"Body":{"Datalist":{"addressid":"457492199890748451","geocode":"POINT(18.975 72.8258)"}},"Status":"200","Total":"1.0"}} 

И просьба:

curl -v -H "Accept: application/json" -H "Content-Type:application/json" -H "ModifiedOn:0" -H "username:vikash|214057357158656" -H "password:gbadmin" -d '{"usercode":"suresh","clientid":"473906852857651","longitude":"72.8258","radius":"10","latitude":"18.975"}' http://youtility-desktop:8282/services/spatial_proxy_test 

стороне сервера журнала показывает, что итерация хорошо, но на стороне клиента дает ответ одной итерации only.Why так? IS любые их изменения, касающиеся вариантов последовательности, как ContinueParent или preservepayload и т.д ..? Пожалуйста, дайте мне знать ..

+0

Не могли бы вы поделиться SOAP-сообщением запроса/ответа в ESB и AS/DSS? Также после полезной нагрузки вы можете распечатать стоимость собственности partybranchid. –

+0

Привет, Jorge Infante Osorio. Спасибо за ответ. Я удалил ошибки из своей конфигурации. Теперь это работает, но не в ожидании. Пожалуйста, скажите мне, почему так? я отредактировал мой вопрос. Пожалуйста, см. выше – user3129056

+0

Пожалуйста, проверьте мой ответ, в моем сценарии работа прекрасна. –

ответ

0

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

<?xml version="1.0" encoding="UTF-8"?> 
<proxy xmlns="http://ws.apache.org/ns/synapse" 
     name="AddressProxy" 
     transports="https http" 
     startOnLoad="true" 
     trace="disable"> 
    <description/> 
    <target> 
     <inSequence> 
     <property xmlns:p="http://www.example.org/Address/" 
        name="clientid" 
        expression="//p:getAddress/clientid" 
        scope="default" 
        type="STRING"/> 
     <sequence key="conf:/sequencesStackOverFlow/getmpartybranch"/> 
     </inSequence> 
     <outSequence> 
     <aggregate> 
      <completeCondition> 
       <messageCount min="-1" max="2"/> 
      </completeCondition> 
      <onComplete xmlns:add="http://ws.wso2.org/dataservice" 
         expression="//add:Addresses/add:Address"> 
       <send/> 
      </onComplete> 
     </aggregate> 
     </outSequence> 
    </target> 
    <publishWSDL key="conf:/wsdls/Address.wsdl"/> 
</proxy> 

И последовательность, используемая в insequence:

конф:/sequencesStackOverFlow/getmpartybranch

<sequence xmlns="http://ws.apache.org/ns/synapse"> 
    <payloadFactory media-type="xml"> 
     <format> 
     <dat:getmpartybranch xmlns:dat="http://ws.wso2.org/dataservice">    
      <dat:clientid>$1</dat:clientid>   
     </dat:getmpartybranch> 
     </format> 
     <args> 
     <arg xmlns:ns="http://org.apache.synapse/xsd" expression="get-property('clientid')" evaluator="xml"></arg> 
     </args> 
    </payloadFactory> 
    <send receive="conf:/sequencesStackOverFlow/iterOvermpartybranch"> 
     <endpoint> 
     <address uri="http://127.0.0.1:5555/services/mpartybranch"></address> 
     </endpoint> 
    </send> 
</sequence> 

конф:/sequencesStackOverFlow/iterOvermpartybranch

<sequence xmlns="http://ws.apache.org/ns/synapse"> 
    <iterate xmlns:ns="http://org.apache.synapse/xsd" xmlns:ds="http://ws.wso2.org/dataservice" expression="//ds:DataCollection/ds:Datalist" id="iterate1" sequential="true"> 
     <target> 
     <sequence> 
      <property name="partybranchid" expression="//ds:partybranchid/text()" scope="default" type="STRING"></property> 
      <property name="clientid" expression="//ds:clientid/text()" scope="default" type="STRING"></property> 
      <log> 
       <property name="PARTYID" expression="get-property('partybranchid')"></property> 
       <property name="CLIENTID" expression="get-property('clientid')"></property> 
      </log> 
      <payloadFactory media-type="xml"> 
       <format> 
        <dat:getselect_addresses xmlns:dat="http://ws.wso2.org/dataservice">      
        <dat:objectid>$1</dat:objectid>      
        <dat:clientid>$2</dat:clientid>     
        </dat:getselect_addresses> 
       </format> 
       <args> 
        <arg expression="get-property('partybranchid')" evaluator="xml"></arg> 
        <arg expression="get-property('clientid')" evaluator="xml"></arg> 
       </args> 
      </payloadFactory> 
      <log level="full"></log> 
      <send> 
       <endpoint> 
        <address uri="http://127.0.0.1:5555/services/getAddress" format="soap12"></address> 
       </endpoint> 
      </send> 
     </sequence> 
     </target> 
    </iterate> 
</sequence> 

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

Смежные вопросы