我需要将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或数据库中保存这样的属性,以后再使用它。
答案 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>
希望有所帮助。还有另一种选择,但我不知道这是否有效(没有尝试过)。
答案 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')