在这个ESB API流程中,这个丰富的中介如何在一个callou中介之后链接?

时间:2017-04-07 09:57:08

标签: wso2 integration wso2esb wso2dss

我是 WSO2 的新手,我正在开展一个涉及 ESB DSS EI 项目组件。

我对 API 流程的这一部分的正确含义有以下疑问:

<?xml version="1.0" encoding="UTF-8"?>
<sequence name="cropNamesSequence" trace="disable" xmlns="http://ws.apache.org/ns/synapse">

    <payloadFactory media-type="xml">
        <format>
            <ds:FindCropNames xmlns:ds="http://ws.wso2.org/dataservice">
                <ds:sampleId>$1</ds:sampleId>
            </ds:FindCropNames>
        </format>

        <args>
            <arg evaluator="xml" expression="$ctx:sampleData//ds:Sample/ds:sample_id/text()" xmlns:ds="http://ws.wso2.org/dataservice"/>
        </args>
    </payloadFactory>

    <header name="Action" scope="default" value="urn:FindCropNames"/>

    <callout endpointKey="prgfasEndpoint">
        <source xmlns:ns="http://org.apache.synapse/xsd" xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/" xmlns:s12="http://www.w3.org/2003/05/soap-envelope" xpath="s11:Body/child::*[fn:position()=1] | s12:Body/child::*[fn:position()=1]"/>

        <target xmlns:ns="http://org.apache.synapse/xsd" xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/" xmlns:s12="http://www.w3.org/2003/05/soap-envelope" xpath="s11:Body/child::*[fn:position()=1] | s12:Body/child::*[fn:position()=1]"/>
    </callout>

    <enrich>
        <source clone="true" type="envelope"/>
        <target property="cropNames" type="property"/>
    </enrich>

    <log level="custom">
        <property expression="$ctx:cropNames" name="crop names"/>
    </log>

    ........................................................................
    ........................................................................
    DO SOMETHING ELSE
    ........................................................................
    ........................................................................

在此代码中,我执行以下操作:

  • 第一个 payloadFactory 介体用于创建包含<ds_sampleId>...</ds_sampleId>参数的消息,该参数由相关的 XPATH 表达式检索到{{ 1}}。此消息表示我将发送给 DSS 服务的请求。

  • 然后我指定一个带有 name =“Action”的标头,指定用于从数据库获取某些数据的 DSS 服务的名称(服务名称为 urn:FindCropNames

  • 然后我使用标注介体来执行对以前的Web服务的请求。

我的怀疑与以下充实调解员有关,这一点:

<args>...</args>

在许多示例中,我经常看到在使用标注介体调用Web服务后,会使用充实介体进行操作。

根据我的理解,这个特定调解员的意思(在发布的案例中)是我正在处理Web服务响应的信封,我将其复制到一个新的属性名称< strong> cropNames 然后我可以在我的流程中使用,例如我可以记录此属性链接的内容:

<enrich>
    <source clone="true" type="envelope"/>
    <target property="cropNames" type="property"/>
</enrich>

这种解释是正确的还是我错过了什么?

1 个答案:

答案 0 :(得分:0)

这是正确的,属于&#34; OM&#34; (xml)已创建,其名称为&#34; cropNames&#34;它属于默认范围(synapse范围),您可以使用xpath:get-property(&#39; cropNames&#39;)或$ ctx:cropNames

访问它