WSO2 数据服务中的 Rest 资源错误,过程中没有参数

Rest resource error in WSO2 dataservice with procedure with out param

您好,我正在创建一个 WSO2 数据服务,我正在调用一个具有输出参数的存储过程。

{call ? :=IRIS_REST_PKG.INSERT_OR_UPDATE_STUDENT(?,?,?) }

所以我可以让整个事情在 try it 编辑器中工作,但是当我配置其余资源时,我看到一个请求参数列表,其中包括我之前在查询中定义的输出参数。 当我仅在参数中调用其余服务时,我得到:

Value type miss match, Expected value type - 'null', but found - 'STRING'.

我使用的是 Enterprise Intergrator 6.4.0 版。 这是我的数据库文件:

<data name="IRIS" transports="http https local">
   <config enableOData="false" id="ORACLE">
      <property name="driverClassName">oracle.jdbc.driver.OracleDriver</property>
      <property name="url">jdbc:oracle:thin:@ldap:...</property>
      <property name="username">xxxxxxxxxxxx</property>
      <property name="password">xxxxxxxxxxxx</property>
      <property name="dataSourceProps"/>
      <property name="dynamicUserAuthMapping">
         <configuration/>
      </property>
   </config>
   <query id="get_student" useConfig="ORACLE">
      <sql>{call ?:=TEST_PKG.get_student(?)}</sql>
      <result element="upi" rowName="">
         <element column="upi" name="upi" xsdType="string"/>
         <element column="research_summary" name="research_summary" xsdType="string"/>
      </result>
      <param name="result" sqlType="ORACLE_REF_CURSOR" type="OUT"/>
      <param name="upi" sqlType="STRING"/>
   </query>
   <query id="q1" useConfig="ORACLE">
      <sql>{call ?:=TEST_PKG.myfunction(?,?)}</sql>
      <result element="myCount" rowName="">
         <element column="myCount" name="myCount" xsdType="integer"/>
      </result>
      <param name="myCount" sqlType="INTEGER" type="OUT"/>
      <param name="ename" sqlType="STRING"/>
      <param name="eid" sqlType="INTEGER"/>
   </query>
   <query id="insert_or_update_student" useConfig="ORACLE">
      <sql>{call ? :=IRIS_REST_PKG.INSERT_OR_UPDATE_STUDENT(?,?,?) }</sql>
      <result outputType="json">{"result":{"status":"$status"}}</result>  
      <param defaultValue="-1" name="status" sqlType="INTEGER" type="OUT"/>
      <param name="upi" sqlType="STRING"/>
      <param name="summary" sqlType="STRING"/>
      <param name="optIn" sqlType="INTEGER"/>
   </query>
   <query id="get_jstudent" useConfig="ORACLE">
      <sql>SELECT UPI, RESEARCH_SUMMARY FROM xxx r WHERE r.UPI = :upi</sql>
      <result outputType="json">{"result":{"upi":"$upi","research_summary":"$research_summary"}}</result>
      <param name="upi" sqlType="STRING"/>
   </query>
   <operation name="get_student">
      <call-query href="get_student">
         <with-param name="upi" query-param="upi"/>
      </call-query>
   </operation>
   <operation name="op1">
      <call-query href="q1">
         <with-param name="ename" query-param="ename"/>
         <with-param name="eid" query-param="eid"/>
      </call-query>
   </operation>
   <operation name="insert_or_update_student">
      <call-query href="insert_or_update_student">
         <with-param name="upi" query-param="upi"/>
         <with-param name="summary" query-param="summary"/>
         <with-param name="optIn" query-param="optIn"/>
      </call-query>
   </operation>
   <operation name="get_jstudent">
      <call-query href="get_jstudent">
         <with-param name="upi" query-param="upi"/>
      </call-query>
   </operation>
   <resource method="GET" path="r1">
      <call-query href="get_student">
         <with-param name="result" query-param="result"/>
         <with-param name="upi" query-param="upi"/>
      </call-query>
   </resource>
   <resource method="POST" path="insertOrUpdateStudent">
      <call-query href="insert_or_update_student">
         <with-param name="status" query-param="status"/>
         <with-param name="upi" query-param="upi"/>
         <with-param name="summary" query-param="summary"/>
         <with-param name="optIn" query-param="optIn"/>
      </call-query>
   </resource>
   <resource method="GET" path="get_jstudent/{upi}">
      <call-query href="get_jstudent">
         <with-param name="upi" query-param="upi"/>
      </call-query>
   </resource>
</data>

我说的是:insertOrUpdateStudent 资源部分。

<with-param name="status" query-param="status"/> 

我也删除了这一行,但仍然无法正常工作。 我也试过并传递 null / 0 / "" 但仍然无法正常工作。

如有任何帮助,我们将不胜感激。

谢谢。

答案是,如果资源和操作同名,就会出错。此外,即使上述正确,向导也会将 out 参数显示为查询参数,因此要做的是编辑 xml 并从资源参数中删除 out 参数。