#wso2 #registry #wso2esb #wso2ei
#wso2 #реестр #wso2-enterprise-integrator #wso2-esb
Вопрос:
Я сохраняю файл конфигурации в реестре конфигурации, как показано ниже.
Мой вариант использования здесь заключается в том, что необходимо обновить содержимое тега accessToken из службы wso2 ei, поскольку срок его действия истекает в течение часа. как я могу передать восстановленный доступ к этому файлу?
<!-- Reading config registry file content -->
<property name="ZohoAppConfig" expression="get-property('registry','conf:/ZohoConfig/ZohoAppConfigFile.xml')" scope="default" type="OM" />
<property description="accessToken" expression="$ctx:ZohoAppConfig//*[local-name()='accessToken']" name="accessToken" scope="default" type="STRING"/>
<property description="refreshToken" expression="$ctx:ZohoAppConfig//*[local-name()='refreshToken']" name="refreshToken" scope="default" type="STRING"/>
<property description="AllPortalsEP" expression="$ctx:ZohoAppConfig//*[local-name()='AllPortals']" name="uri.var.AllPortalsEP" scope="default" type="STRING"/>
<log level="custom">
<property name="===ZohoAppConfig===" expression="get-property('ZohoAppConfig')"/>
<property expression="get-property('accessToken')" name="===accessToken===="/>
<property expression="get-property('uri.var.AllPortalsEP')" name="===uri.var.AllPortalsEP===="/>
</log>
<!-- Need to update registry content here -->
Ожидаю вашего ответа.
Ответ №1:
Вы можете изменить свой ZohoAppConfig, например, с помощью enrich mediator:
<enrich>
<source clone="true" property="someNewAccesToken" type="property"/>
<target action="replace" xpath="$ctx:ZohoAppConfig//accessToken" type="custom" xmlns:ns="http://org.apache.synapse/xsd"/>
</enrich>
Это обновит в вашем свойстве ZohoAppConfig токен. Рядом с сохранением обратно в реестр вам нужно использовать свойство:
<property expression="$ctx:ZohoAppConfig" name="conf:/ZohoConfig/ZohoAppConfigFile.xml"
scope="registry" type="STRING" xmlns:ns="http://org.apache.synapse/xsd"/>
Это должно работать в 6.1.1, я протестировал его на 6.3.0. но таким образом выполняется кэширование чтения в памяти в течение 15 секунд, что в некоторых случаях может быть проблематичным.
Другой способ — сохранить с помощью скриптового посредника и установить значение кэширования равным 0:
<script language="js"><![CDATA[
mc.getConfiguration().getRegistry().updateResource('conf:/ZohoConfig/ZohoAppConfigFile.xml',mc.getProperty('sample'));
var regEntry = mc.getConfiguration().getRegistry().getRegistryEntry('conf:/ZohoConfig/ZohoAppConfigFile.xml');
regEntry.setCachableDuration(0);
mc.getConfiguration().getRegistry().updateRegistryEntry(regEntry);
]]></script>
Я описал это гораздо подробнее на примере, а также с некоторыми возникшими проблемами здесь