Динамически обновлять содержимое файла реестра в WSO2 EI 6.1.1

#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>
  

Я описал это гораздо подробнее на примере, а также с некоторыми возникшими проблемами здесь