簡體   English   中英

WSO2 EI - 使用 REST 進行 DSS 查詢的輸入參數

[英]WSO2 EI - Input parameter on DSS Query with REST

I tried to follow this tutorial to create a DSS with a JSON output: https://docs.wso2.com/display/EI620/Using+JSON+with+Data+Services

它可以通過簡單的查詢正常工作,我可以毫無問題地格式化 output。

現在我正在嘗試添加一個輸入參數來按 ID 過濾記錄,但它對我不起作用。 我的 REST,如教程中所述,是:GET http://{server_host}/services/Promemoria_PROMEMORIA_Tools/getCount/2

回應是:

Error processing GET request for : /services/Promemoria_PROMEMORIA_Tools/getCount/2</p><p>DS Code: INCOMPATIBLE_PARAMETERS_ERROR
Nested Exception:-
javax.xml.stream.XMLStreamException: DS Fault Message: Error in 'CallQuery.extractParams', cannot find parameter with type:query-param name:idp
DS Code: INCOMPATIBLE_PARAMETERS_ERROR
Source Data Service:-
Name: Promemoria_PROMEMORIA_Tools
Location: /Promemoria_PROMEMORIA_Tools.dbs
Description: Tool per permettere ad Amenta di inserire le pratiche fatte a mano.
Default Namespace: http://ws.wso2.org/dataservice
Current Request Name: _getgetcount_idp
Current Params: {}

我也嘗試過: GET http://{server_host}/services/Promemoria_PROMEMORIA_Tools/getCount?idp=2 但這是錯誤的,因為無法識別操作。

我將屬性 defaultValue="3" 放在查詢定義中的 idp 上,它開始工作......但它忽略了 REST 中的值。

怎么了? 這是我的 DSS 代碼

<data name="Promemoria_PROMEMORIA_Tools" transports="http https local">
   <description>Tool per permettere di inserire le pratiche fatte a mano.</description>
   <config enableOData="false" id="OracleServizio_Promemoria2">
      <property name="carbon_datasource_name">OracleServizio_Promemoria2</property>
   </config>
   <query id="getByCF" useConfig="OracleServizio_Promemoria2">
      <sql>SELECT ID_ABILITAZIONE, ID_SERVIZIO, DESCR_SERVIZIO, CF_UTENTE, ID_CANALE_NOTIFICA, CANALE_NOTIFICA, ID_CONTATTO, CONTATTO, CANALE_ACQ, DATA_ACQ, CF_ACQ, PROTOCOLLO, DATA_PROT, PROV_UFF FROM SERVIZIO_PROMEMORIA.SE_MI_SCORDO_ABIL_SPORTELLO a where a.CF_UTENTE = :cf union all SELECT ID_ABILITAZIONE, ID_SERVIZIO, DESCR_SERVIZIO, CF_UTENTE, ID_CANALE_NOTIFICA, CANALE_NOTIFICA, ID_CONTATTO, CONTATTO, CANALE_ACQ, DATA_ACQ, CF_ACQ, PROTOCOLLO, DATA_PROT, PROV_UFF FROM SERVIZIO_PROMEMORIA.SE_MI_SCORDO_ABIL b where b.CF_UTENTE = :cf and b.CF_ACQ &lt;&gt; 'BATCH'</sql>
      <result escapeNonPrintableChar="true" outputType="json">{&#xd;    "list": {&#xd;      "item": [{&#xd;         "id": "$ID_ABILITAZIONE",&#xd;          "service": {&#xd;               "id": "$ID_SERVIZIO",&#xd;              "info": "$DESCR_SERVIZIO"&#xd;          },&#xd;         "cfUser": "$CF_UTENTE",&#xd;            "channel": {&#xd;               "id": "$ID_CANALE_NOTIFICA",&#xd;               "info": "$CANALE_NOTIFICA"&#xd;         },&#xd;         "address": {&#xd;               "id": "$ID_CONTATTO",&#xd;              "info": "$CONTATTO"&#xd;            }&#xd;      }]&#xd; }&#xd;}</result>
      <param name="cf" sqlType="STRING"/>
   </query>
   <query id="getCount" useConfig="OracleServizio_Promemoria2">
      <sql>SELECT ID_SERVIZIO, DESCR_SERVIZIO, ID_CANALE_NOTIFICA, CANALE_NOTIFICA, count(*) as recno FROM SERVIZIO_PROMEMORIA.SE_MI_SCORDO_ABIL_SPORTELLO a where a.ID_SERVIZIO=:idp group by ID_SERVIZIO, DESCR_SERVIZIO, ID_CANALE_NOTIFICA, CANALE_NOTIFICA</sql>
      <param name="idp" paramType="SCALAR" sqlType="INTEGER"/>
      <result escapeNonPrintableChar="true" outputType="json">{&#xd;    "list": {&#xd;      "item": [{&#xd;         "items": "$recno",&#xd;         "service": {&#xd;               "id": "$ID_SERVIZIO",&#xd;              "info": "$DESCR_SERVIZIO"&#xd;          },&#xd;         "channel": {&#xd;               "id": "$ID_CANALE_NOTIFICA",&#xd;               "info": "$CANALE_NOTIFICA"&#xd;         }&#xd;      }]&#xd; }&#xd;}</result>
   </query>
   <resource method="GET" path="getByCF/{cf}">
      <call-query href="getByCF">
         <with-param name="cf" query-param="cf"/>
      </call-query>
   </resource>
   <resource method="GET" path="getCount/{idp}">
      <call-query href="getCount">
         <with-param name="idp" query-param="idp"/>
      </call-query>
   </resource>
</data>

羅伯托

您可以通過從 DSS 代碼中的資源中刪除 /{idp} 來嘗試相同的操作嗎?

<resource method="GET" path="getCount">
  <call-query href="getCount">
     <with-param name="idp" query-param="idp"/>
  </call-query>

我解決了這個問題,但我不太確定如何:) 我試着從一開始就解釋它。 我通過 WSO2 控制台創建向導創建了該服務,該向導構建了一個 SOAP 服務。 然后我使用在線 xml 編輯器編輯了該服務,並將其轉換為 REST。 它在 select 中運行良好,並且輸出正確,但我無法使用輸入參數(如上所述)。

在我的測試期間,我將“getCount”操作更改為 POST,但沒有任何結果,但是當我將其放回 GET 時,它開始神奇地工作。 其他操作仍然無法正常工作。

我認為 WSO2 某處存儲了錯誤的配置,可能是由向導創建的。 我完全刪除了該服務並從一個 empty.dbs 文件重新啟動,手動編寫它。 我通過“上傳”將它加載到 WSO2 中,它工作正常。 我使用在線 xml 編輯器對其進行了編輯,它仍然可以正常工作。

就這樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM