首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从OnComplete AggregateMediator中获得RESTful API WSO2EI 6.2.0中的属性?

如何从OnComplete AggregateMediator中获得RESTful API WSO2EI 6.2.0中的属性?
EN

Stack Overflow用户
提问于 2019-08-19 10:42:29
回答 1查看 132关注 0票数 0

我尝试过几种从OnComplete AggregateMediator获取属性的方法,并将其用于ForEach Mediator的表达式支柱中,但这些方法都不成功。我也在谷歌搜索过,但一点运气都没有。

下面是我的RESTful API (在短模式下):

这是inSequence区

代码语言:javascript
复制
<api xmlns="http://ws.apache.org/ns/synapse" context="/path/to/context" name="NamedAPI">
  <resource methods="POST" protocol="http">
    <inSequence>
    <property expression="count(//parameter/objects)" name="count" scope="default" type="STRING"/>
    <iterate expression="//parameter/objects" id="iterate1" sequential="true">
       <target>
         <sequence>
           <property expression="//objects/text()" name="element1" scope="default" type="STRING"/>
           <sequence key="getIdOfElement1"/>
           <property expression="json-eval($.result.id)" name="el1id" scope="default" type="STRING"/>
           <payloadFactory media-type="xml">
             <format>
               <ids xmlns="">
                 <id>$1</id>
               </ids>
             </format>
             <args>
               <arg evaluator="xml" expression="get-property('el1id')"/>
             </args>
           </payloadFactory>
         </sequence>
       </target>
     </iterate>
     <aggregate id="iterate1">
       <completeCondition timeout="10">
         <messageCount max="-1" min="{get-property('count')}"/>
       </completeCondition>
       <onComplete expression="//ids">
         <property expression="$body" name="message" scope="operation" type="OM"/>
       </onComplete>
     </aggregate>
     <payloadFactory media-type="xml">
       <format>
         <result xmlns="">$1</result>
       </format>
       <args>
         <arg evaluator="xml" expression="get-property('operation','message')"/>
       </args>
     </payloadFactory>
     <send>
       <endpoint key="NamedEP"/>
     </send>
   </inSequence>

这是OutSequence部分:

代码语言:javascript
复制
   <outSequence>
     <property expression="get-property('operation', 'message')" name="IDs"/>
     <log level="custom">
       <property expression="//ids" name="========== LIST IDs =========="/>
    </log>
    <foreach expression="//ids" id="foreach1">
      <sequence>
        <log level="custom">
          <property expression="//id" name="========== ID =========="/>
        </log>
        <log level="full"/>
        <dbreport>
          <connection>
            <pool>
              <dsName>A_DS</dsName>
            </pool>
          </connection>
          <statement>
            <sql>INSERT INTO "table" ("field1", "id") VALUES (?,?)</sql>
            <parameter expression="get-property('field1')" type="VARCHAR"/>
            <parameter expression="//id" type="INTEGER"/>
          </statement>
        </dbreport>
      </sequence>
    </foreach>
    <payloadFactory media-type="json">
      <format>
        [{ "field1" : "$1" }]
      </format>
      <args>
        <arg evaluator="xml" expression="get-property('field1')"/>
      </args>
    </payloadFactory>
    <property name="messageType" scope="axis2" type="STRING" value="application/json"/>
    <property expression="json-eval($.)" name="response" scope="default" type="STRING"/>
  <send/>
</outSequence>

我是FaultSequence组

代码语言:javascript
复制
    <faultSequence>
      <payloadFactory media-type="json">
        <format>
          [{ "fault" : { "responsecode" : "999", "responsedesc" : "General error", "errordetails" : "$1" } }]
        </format>
        <args>
          <arg evaluator="xml" expression="$ctx:ERROR_MESSAGE"/>
        </args>
      </payloadFactory>
      <respond/>
      <send/>
    </faultSequence>
  </resource>
</api>

我试过这个:

代码语言:javascript
复制
<foreach expression="//ids" id="foreach1">

它不起作用。在DBReport中介器中未执行的ForEach,日志中介程序也未执行

我试过这个:

代码语言:javascript
复制
<foreach expression="get-property('operation', 'message')" id="foreach1">

WSO2EI给我看了一个错误

我尝试将OutSequence区段中的所有中介(ForEach和DBReport)迁移到InSequence区段,但它也没有工作。

求你帮帮我。任何帮助都将不胜感激。

提前谢谢。

以下是per @Arunan的评论日志

代码语言:javascript
复制
TID: [-1234] [] [2019-08-21 10:00:06,176]  INFO {org.apache.synapse.mediators.builtin.LogMediator} -  ========== START COUNTER ========== = 1 {org.apache.synapse.mediators.builtin.LogMediator}
TID: [-1234] [] [2019-08-21 10:00:06,176]  INFO {org.apache.synapse.mediators.builtin.LogMediator} -  ========== START ITERATE NO :  = 2.0 {org.apache.synapse.mediators.builtin.LogMediator}
TID: [-1234] [] [2019-08-21 10:00:06,177]  INFO {org.apache.synapse.mediators.builtin.LogMediator} -  ========== NIP FROM ITERATE :   = 198910202001020001 {org.apache.synapse.mediators.builtin.LogMediator}
TID: [-1234] [] [2019-08-21 10:00:06,180]  INFO {org.apache.synapse.mediators.builtin.LogMediator} -  ========== START ITERATE NO :  = 2.0 {org.apache.synapse.mediators.builtin.LogMediator}
TID: [-1234] [] [2019-08-21 10:00:06,181]  INFO {org.apache.synapse.mediators.builtin.LogMediator} -  ========== NIP FROM ITERATE :   = 199509142005010001 {org.apache.synapse.mediators.builtin.LogMediator}
TID: [-1234] [] [2019-08-21 10:00:06,230]  INFO {org.apache.synapse.mediators.builtin.LogMediator} -  ========== RPID FROM SEQUENCE IN ITERATE ========== = 3 {org.apache.synapse.mediators.builtin.LogMediator}
TID: [-1234] [] [2019-08-21 10:00:06,230]  INFO {org.apache.synapse.mediators.builtin.LogMediator} -  ========== RPID FROM SEQUENCE IN ITERATE ========== = 1 {org.apache.synapse.mediators.builtin.LogMediator}
TID: [-1234] [] [2019-08-21 10:00:06,262]  INFO {org.apache.synapse.mediators.builtin.LogMediator} -  ========== EXIST RICE DOCUMENT ========== = 0 {org.apache.synapse.mediators.builtin.LogMediator}
TID: [-1234] [] [2019-08-21 10:00:06,348]  INFO {org.apache.synapse.mediators.builtin.LogMediator} -  ========== LIST RPIDs ========== =  {org.apache.synapse.mediators.builtin.LogMediator}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-22 04:32:57

Alhamdulillah,我已经尽力了,而且效果很好。

如何在InSequence和OutSequence之间共享消息传递(在我的示例中:从inSequence节中的聚合中介到OutSequence部分中的表达式ForEach Mediator )。

必须声明新属性,并从message属性中获取值,如下所示:

代码语言:javascript
复制
<property expression="get-property('operation', 'message')" name="rpidList" scope="default" type="OM"/>

并且,在ForEach表达式中,您将给出以下代码

代码语言:javascript
复制
<foreach expression="$ctx:rpidList//rpids" id="foreach1">

谢谢大家。谢谢你,StackOverflow.com

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57555139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档