在wso2 esb中保存动态值以供下次使用

时间:2017-10-02 13:32:52

标签: wso2 wso2esb esb

我需要将web服务登录方法的结果保存为wso2 esb中的属性。并随时使用它。令牌将在20分钟后到期,所以我想在wso2 esb中保存令牌,当它到期时重新生成它。如何在wso2 esb中保存属性动态并检索它。我生成tokekn的顺序是:

<sequence name="x" xmlns="http://ws.apache.org/ns/synapse">
<payloadFactory media-type="xml">
    <format>
        <p:login xmlns:p="http://corebankingservice.endpoint.webservicegateway.core.channelmanager.caspian.com/">
            <chUserInfoRequestBean xmlns="">
                <password>****</password>
                <username>user</username>
            </chUserInfoRequestBean>
            <channelServiceType xmlns="">***</channelServiceType>
        </p:login>
    </format>
</payloadFactory>
<send>
    <endpoint>
        <address uri="http://x.x.x.x:8280/services/..."/>
    </endpoint>
</send>
</property name="SessionId" value = ...>
</sequence>

这个序列的结果是SessionId所以我需要在内存或db或....中保存SessionId并将其用于另一种方法,直到它过期。我如何在registery或cashe或数据库中保存这样的属性,以后再使用它。

2 个答案:

答案 0 :(得分:2)

唯一的官员&#34;我所知道的(我使用过的)是使用dblookup中介(稍后检索值)和dbreport meditaor(将值存储在数据库中)。

将值写入db:

<dbreport>
              <connection>
                 <pool>
                    <dsName>datasource_name</dsName>
                 </pool>
              </connection>
              <statement>
                 <sql>
                                insert into table (attributName1, attributName2) values ('value1','value2')</sql>
                       </statement>
           </dbreport>

可以从此示例中的属性传递值。

<sql>
                                insert into dbo.sais_config_db (serviceName, configKey, configValue) values ('staticVal1','staticVal2',?)</sql>
                 <parameter expression="get-property('myPropertyName')" type="CHAR"/>

读取值:

<dblookup>
              <connection>
                 <pool>
                    <dsName>sais_config_db</dsName>
                 </pool>
              </connection>
              <statement>
                 <sql>
                    SELECT value1 FROM tableName where ....</sql>
                 <result name="resultFromDb" column="value1"/>
              </statement>
           </dblookup>

希望有所帮助。还有另一种选择,但我不知道这是否有效(没有尝试过)。

Link

答案 1 :(得分:0)

使用WSO2 Enterprise Integrator 6.x.x及更高版本,可以设置范围为“注册表”的属性,该属性将在调用之间保持该值并在全局范围内可见。

例如,持久保存JSON响应中收到的访问令牌:

<property description="propAccessToken" expression="json-eval($.access_token)" name="access_token" scope="registry" type="STRING"/>

然后使用以下表达式获取属性:

get-property('registry', 'access_token')