2014-09-23 17 views
1

我正在使用wso2esb 4.7.0和wso2dss 3.1.0.My方案是我希望選擇關於特定clientid的所有partybranch。爲了這個目的,我有火象的查詢:在wso2esb中使用迭代器中介時出錯

select partybranchid,clientid from mpartybranch where clientid = 473906852857651 

,這讓我喜歡的2個記錄列表:

partybranchid clientid 

-2500000000  473906852857651 
796243010946586 473906852857651 

我要拆分這兩個,並找出解決有關每一他們。我的具有使用以下的DSS查詢工作seperately對我來說是:

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

現在我有wso2esb使用iterator調停單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 

服務器端日誌顯示它迭代正常,但在客戶端只給出一個迭代的響應。爲什麼?它們是關於諸如ContinueParent或preservepayload等序列選項的任何更改。請讓我知道..

+0

您可以在ESB和AS/DSS中共享請求/響應SOAP消息嗎?也可以在payloadfactory後打印partybranchid屬性值。 – 2014-09-24 19:52:13

+0

您好豪爾赫Infante Osorio.Thanks for reply.I已從我的配置中刪除錯誤。現在它的工作,但不是在預期的方式。請問你爲什麼這麼說?我已編輯我的問題。請參閱上面的 – user3129056 2014-09-25 04:34:54

+0

請檢查我的答案,在我的方案工作中很好。 – 2014-09-26 17:04:21

回答

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中使用的序列:

CONF:/ 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> 

CONF:/ 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更改我的負載。