<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: APS - How to override DbSqlSessionFactory properly? in Alfresco Forum</title>
    <link>https://connect.hyland.com/t5/alfresco-forum/aps-how-to-override-dbsqlsessionfactory-properly/m-p/485714#M39740</link>
    <description>&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;SPAN&gt;I fixed it using CustomDbSqlSessionFactory class&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="java"&gt;package com.activiti.extension.bean.extension.db;

import com.activiti.extension.bean.service.encryption.VariableEncryptionService;
import lombok.RequiredArgsConstructor;
import org.activiti.engine.impl.db.DbSqlSessionFactory;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.interceptor.Session;
import org.springframework.stereotype.Component;

@Component
@RequiredArgsConstructor
public class CustomDbSqlSessionFactory extends DbSqlSessionFactory {

    private final VariableEncryptionService variableEncryptionService;

    &lt;a href="https://connect.hyland.com/t5/user/viewprofilepage/user-id/31150"&gt;@override&lt;/a&gt;
    public Session openSession(CommandContext commandContext) {
       return new CustomDbSqlSession(this, commandContext, variableEncryptionService);
    }

}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Custom CustomDbSqlSession class&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="java"&gt;package com.activiti.extension.bean.extension.db;

import com.activiti.extension.bean.service.encryption.VariableEncryptionService;
import lombok.extern.slf4j.Slf4j;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.ActivitiOptimisticLockingException;
import org.activiti.engine.impl.db.DbSqlSession;
import org.activiti.engine.impl.db.HasRevision;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.persistence.entity.Entity;
import org.springframework.context.annotation.Scope;

import java.util.Collection;
import java.util.Iterator;
import java.util.List;

import static java.util.stream.Collectors.toList;
import static org.springframework.beans.factory.config.ConfigurableBeanFactory.SCOPE_PROTOTYPE;

@Slf4j
//@Component
@Scope(SCOPE_PROTOTYPE)
public class CustomDbSqlSession extends DbSqlSession {

    private final VariableEncryptionService variableEncryptionService;

    public CustomDbSqlSession(CustomDbSqlSessionFactory dbSqlSessionFactory, CommandContext commandContext,
                              VariableEncryptionService variableEncryptionService) {
        super(dbSqlSessionFactory, commandContext.getEntityCache());
        this.variableEncryptionService = variableEncryptionService;
    }

    private &amp;lt;T&amp;gt; void encrypt(T value) {
        variableEncryptionService.encrypt(value);
    }

    private &amp;lt;T&amp;gt; T decrypt(T value) {
        return variableEncryptionService.decrypt(value);
    }

    @SuppressWarnings({"rawtypes", "unchecked"})
    &lt;a href="https://connect.hyland.com/t5/user/viewprofilepage/user-id/31150"&gt;@override&lt;/a&gt;
    public List selectListWithRawParameter(String statement, Object parameter, int firstResult, int maxResults) {
        List&amp;lt;Object&amp;gt; result = super.selectListWithRawParameter(statement, parameter, firstResult, maxResults);

        return super.cacheLoadOrStore(result.stream()
                .map(this::decrypt)
                .collect(toList()));
    }

    @SuppressWarnings({"rawtypes", "unchecked"})
    &lt;a href="https://connect.hyland.com/t5/user/viewprofilepage/user-id/31150"&gt;@override&lt;/a&gt;
    public List selectListWithRawParameterWithoutFilter(String statement, Object parameter, int firstResult, int maxResults) {
        List&amp;lt;Object&amp;gt; result = super.selectListWithRawParameterWithoutFilter(statement, parameter, firstResult, maxResults);
        return result.stream()
                .map(this::decrypt)
                .collect(toList());
    }

    @SuppressWarnings({"rawtypes", "unchecked"})
    &lt;a href="https://connect.hyland.com/t5/user/viewprofilepage/user-id/31150"&gt;@override&lt;/a&gt;
    public List selectListWithRawParameter(String statement, Object parameter, int firstResult, int maxResults, boolean useCache) {
        List&amp;lt;Object&amp;gt; result = super.selectListWithRawParameter(statement, parameter, firstResult, maxResults, useCache);

        return super.cacheLoadOrStore(result.stream()
                .map(this::decrypt)
                .collect(toList()));
    }

    &lt;a href="https://connect.hyland.com/t5/user/viewprofilepage/user-id/31150"&gt;@override&lt;/a&gt;
    protected void flushRegularInsert(Entity persistentObject, Class&amp;lt;? extends Entity&amp;gt; clazz) {
        encrypt(persistentObject);
        super.flushRegularInsert(persistentObject, clazz);
    }

    &lt;a href="https://connect.hyland.com/t5/user/viewprofilepage/user-id/31150"&gt;@override&lt;/a&gt;
    protected void flushBulkInsert(Collection&amp;lt;Entity&amp;gt; persistentObjectList, Class&amp;lt;? extends Entity&amp;gt; clazz) {
        persistentObjectList.forEach(this::encrypt);
        super.flushBulkInsert(persistentObjectList, clazz);
    }

    &lt;a href="https://connect.hyland.com/t5/user/viewprofilepage/user-id/31150"&gt;@override&lt;/a&gt;
    protected void flushUpdates() {
        super.updatedObjects.forEach(this::encrypt);
        super.flushUpdates();
      }

}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Thu, 26 Dec 2024 10:39:39 GMT</pubDate>
    <dc:creator>vikash_patel</dc:creator>
    <dc:date>2024-12-26T10:39:39Z</dc:date>
    <item>
      <title>APS - How to override DbSqlSessionFactory properly?</title>
      <link>https://connect.hyland.com/t5/alfresco-forum/aps-how-to-override-dbsqlsessionfactory-properly/m-p/485709#M39738</link>
      <description>&lt;P&gt;I am using Alfresco Process Services 24.2 Spring version - 6.1.5&lt;/P&gt;&lt;P&gt;I have overridden DbSqlSessionFactory in my custom code using below code CustomDbSqlSessionFactory&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="java"&gt;package com.activiti.extension.bean.extension.db;

import lombok.RequiredArgsConstructor;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.impl.db.DbSqlSession;
import org.activiti.engine.impl.db.DbSqlSessionFactory;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.interceptor.Session;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.stereotype.Component;

import java.sql.SQLException;

@Component
@RequiredArgsConstructor
public class CustomDbSqlSessionFactory extends DbSqlSessionFactory {

    private final ObjectFactory&amp;lt;CustomDbSqlSession&amp;gt; dbSqlSession;

    
    public Session openSession(CommandContext commandContext) {
        return super.openSession(commandContext);
    }

}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;And CustomDbSqlSession&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="java"&gt;package com.activiti.extension.bean.extension.db;

import org.activiti.engine.impl.db.DbSqlSession;
import org.activiti.engine.impl.persistence.entity.Entity;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import java.util.Collection;
import java.util.List;

import static java.util.stream.Collectors.toList;
import static org.springframework.beans.factory.config.ConfigurableBeanFactory.SCOPE_PROTOTYPE;

@Slf4j
@Component
@Scope(SCOPE_PROTOTYPE)
public class CustomDbSqlSession extends DbSqlSession {

    public CustomDbSqlSession(CustomDbSqlSessionFactory dbSqlSessionFactory, CustomEntityCache entityCache) {
        super(dbSqlSessionFactory, entityCache);
    }

    @SuppressWarnings({"rawtypes", "unchecked"})
    
    public List selectListWithRawParameter(String statement, Object parameter, int firstResult, int maxResults) {
        return super.selectListWithRawParameter(statement, parameter, firstResult, maxResults);

    }

    @SuppressWarnings({"rawtypes", "unchecked"})
    
    public List selectListWithRawParameterWithoutFilter(String statement, Object parameter, int firstResult, int maxResults) {
       return super.selectListWithRawParameterWithoutFilter(statement, parameter, firstResult, maxResults);

    }

    
    protected void flushRegularInsert(Entity persistentObject, Class&amp;lt;? extends Entity&amp;gt; clazz) {
        super.flushRegularInsert(persistentObject, clazz);
    }

    
    protected void flushBulkInsert(Collection&amp;lt;Entity&amp;gt; persistentObjectList, Class&amp;lt;? extends Entity&amp;gt; clazz) {
        super.flushBulkInsert(persistentObjectList, clazz);
    }

    
    protected void flushUpdates() {
        super.flushUpdates();
    }
}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am able to compile and create build, After deploying changes to APS I am able to create and execute process . But in CustomDbSqlSession class, I have overridden few DbSqlSession's methods and that are not getting executed. I tried by adding logs and debuggers in Intellij Idea it seems flow is not executing in custom overridden method, it's calling the default DbSqlSession's method.&lt;/P&gt;&lt;P&gt;I wanted to execute the CustomDbSqlSession's overridden methods.&lt;BR /&gt;&lt;BR /&gt;if I changes openSession method to below code then the overridden method of&amp;nbsp;CustomDbSqlSession is getting executed, but due to that I am getting CommandContext error and not able to start the process,&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;DIV&gt;&lt;PRE&gt;&lt;SPAN&gt;@Override&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;public &lt;/SPAN&gt;Session &lt;SPAN&gt;openSession&lt;/SPAN&gt;() {&lt;BR /&gt;    &lt;SPAN&gt;return &lt;/SPAN&gt;&lt;SPAN&gt;dbSqlSession&lt;/SPAN&gt;.getObject();&lt;BR /&gt;}&lt;/PRE&gt;&lt;/DIV&gt;&lt;P&gt;Can anyone please help here?&lt;/P&gt;</description>
      <pubDate>Tue, 24 Dec 2024 05:06:45 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-forum/aps-how-to-override-dbsqlsessionfactory-properly/m-p/485709#M39738</guid>
      <dc:creator>vikash_patel</dc:creator>
      <dc:date>2024-12-24T05:06:45Z</dc:date>
    </item>
    <item>
      <title>Re: APS - How to override DbSqlSessionFactory properly?</title>
      <link>https://connect.hyland.com/t5/alfresco-forum/aps-how-to-override-dbsqlsessionfactory-properly/m-p/485714#M39740</link>
      <description>&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;SPAN&gt;I fixed it using CustomDbSqlSessionFactory class&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="java"&gt;package com.activiti.extension.bean.extension.db;

import com.activiti.extension.bean.service.encryption.VariableEncryptionService;
import lombok.RequiredArgsConstructor;
import org.activiti.engine.impl.db.DbSqlSessionFactory;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.interceptor.Session;
import org.springframework.stereotype.Component;

@Component
@RequiredArgsConstructor
public class CustomDbSqlSessionFactory extends DbSqlSessionFactory {

    private final VariableEncryptionService variableEncryptionService;

    &lt;a href="https://connect.hyland.com/t5/user/viewprofilepage/user-id/31150"&gt;@override&lt;/a&gt;
    public Session openSession(CommandContext commandContext) {
       return new CustomDbSqlSession(this, commandContext, variableEncryptionService);
    }

}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Custom CustomDbSqlSession class&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="java"&gt;package com.activiti.extension.bean.extension.db;

import com.activiti.extension.bean.service.encryption.VariableEncryptionService;
import lombok.extern.slf4j.Slf4j;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.ActivitiOptimisticLockingException;
import org.activiti.engine.impl.db.DbSqlSession;
import org.activiti.engine.impl.db.HasRevision;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.persistence.entity.Entity;
import org.springframework.context.annotation.Scope;

import java.util.Collection;
import java.util.Iterator;
import java.util.List;

import static java.util.stream.Collectors.toList;
import static org.springframework.beans.factory.config.ConfigurableBeanFactory.SCOPE_PROTOTYPE;

@Slf4j
//@Component
@Scope(SCOPE_PROTOTYPE)
public class CustomDbSqlSession extends DbSqlSession {

    private final VariableEncryptionService variableEncryptionService;

    public CustomDbSqlSession(CustomDbSqlSessionFactory dbSqlSessionFactory, CommandContext commandContext,
                              VariableEncryptionService variableEncryptionService) {
        super(dbSqlSessionFactory, commandContext.getEntityCache());
        this.variableEncryptionService = variableEncryptionService;
    }

    private &amp;lt;T&amp;gt; void encrypt(T value) {
        variableEncryptionService.encrypt(value);
    }

    private &amp;lt;T&amp;gt; T decrypt(T value) {
        return variableEncryptionService.decrypt(value);
    }

    @SuppressWarnings({"rawtypes", "unchecked"})
    &lt;a href="https://connect.hyland.com/t5/user/viewprofilepage/user-id/31150"&gt;@override&lt;/a&gt;
    public List selectListWithRawParameter(String statement, Object parameter, int firstResult, int maxResults) {
        List&amp;lt;Object&amp;gt; result = super.selectListWithRawParameter(statement, parameter, firstResult, maxResults);

        return super.cacheLoadOrStore(result.stream()
                .map(this::decrypt)
                .collect(toList()));
    }

    @SuppressWarnings({"rawtypes", "unchecked"})
    &lt;a href="https://connect.hyland.com/t5/user/viewprofilepage/user-id/31150"&gt;@override&lt;/a&gt;
    public List selectListWithRawParameterWithoutFilter(String statement, Object parameter, int firstResult, int maxResults) {
        List&amp;lt;Object&amp;gt; result = super.selectListWithRawParameterWithoutFilter(statement, parameter, firstResult, maxResults);
        return result.stream()
                .map(this::decrypt)
                .collect(toList());
    }

    @SuppressWarnings({"rawtypes", "unchecked"})
    &lt;a href="https://connect.hyland.com/t5/user/viewprofilepage/user-id/31150"&gt;@override&lt;/a&gt;
    public List selectListWithRawParameter(String statement, Object parameter, int firstResult, int maxResults, boolean useCache) {
        List&amp;lt;Object&amp;gt; result = super.selectListWithRawParameter(statement, parameter, firstResult, maxResults, useCache);

        return super.cacheLoadOrStore(result.stream()
                .map(this::decrypt)
                .collect(toList()));
    }

    &lt;a href="https://connect.hyland.com/t5/user/viewprofilepage/user-id/31150"&gt;@override&lt;/a&gt;
    protected void flushRegularInsert(Entity persistentObject, Class&amp;lt;? extends Entity&amp;gt; clazz) {
        encrypt(persistentObject);
        super.flushRegularInsert(persistentObject, clazz);
    }

    &lt;a href="https://connect.hyland.com/t5/user/viewprofilepage/user-id/31150"&gt;@override&lt;/a&gt;
    protected void flushBulkInsert(Collection&amp;lt;Entity&amp;gt; persistentObjectList, Class&amp;lt;? extends Entity&amp;gt; clazz) {
        persistentObjectList.forEach(this::encrypt);
        super.flushBulkInsert(persistentObjectList, clazz);
    }

    &lt;a href="https://connect.hyland.com/t5/user/viewprofilepage/user-id/31150"&gt;@override&lt;/a&gt;
    protected void flushUpdates() {
        super.updatedObjects.forEach(this::encrypt);
        super.flushUpdates();
      }

}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 26 Dec 2024 10:39:39 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-forum/aps-how-to-override-dbsqlsessionfactory-properly/m-p/485714#M39740</guid>
      <dc:creator>vikash_patel</dc:creator>
      <dc:date>2024-12-26T10:39:39Z</dc:date>
    </item>
    <item>
      <title>Re: APS - How to override DbSqlSessionFactory properly?</title>
      <link>https://connect.hyland.com/t5/alfresco-forum/aps-how-to-override-dbsqlsessionfactory-properly/m-p/486296#M39793</link>
      <description>&lt;P&gt;&lt;a href="https://connect.hyland.com/t5/user/viewprofilepage/user-id/18320"&gt;@vikash_patel&lt;/a&gt;&amp;nbsp;as an option for encryption/decryption variables I could propose to use wrapper or custom implementation of&amp;nbsp;VariableType interface and register it in SpringProcessEngineConfiguration.&lt;/P&gt;</description>
      <pubDate>Sat, 18 Jan 2025 10:24:00 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-forum/aps-how-to-override-dbsqlsessionfactory-properly/m-p/486296#M39793</guid>
      <dc:creator>vnosach</dc:creator>
      <dc:date>2025-01-18T10:24:00Z</dc:date>
    </item>
    <item>
      <title>Re: APS - How to override DbSqlSessionFactory properly?</title>
      <link>https://connect.hyland.com/t5/alfresco-forum/aps-how-to-override-dbsqlsessionfactory-properly/m-p/488483#M40010</link>
      <description>&lt;P&gt;We used special wrapper around&amp;nbsp;VariableType implementations in APS, used our decryption/encryption service inside it, and registered own wrapped types in the&amp;nbsp;ProcessEngineConfigurationConfigurer&lt;/P&gt;</description>
      <pubDate>Sun, 30 Mar 2025 16:20:01 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-forum/aps-how-to-override-dbsqlsessionfactory-properly/m-p/488483#M40010</guid>
      <dc:creator>vnosach</dc:creator>
      <dc:date>2025-03-30T16:20:01Z</dc:date>
    </item>
    <item>
      <title>Re: APS - How to override DbSqlSessionFactory properly?</title>
      <link>https://connect.hyland.com/t5/alfresco-forum/aps-how-to-override-dbsqlsessionfactory-properly/m-p/488484#M40011</link>
      <description>&lt;P&gt;newest APS version doesn't support easy way to extend&amp;nbsp;&lt;FONT&gt;DbSqlSessionFactory&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN&gt;&amp;nbsp;as in older version, but you may use configurers. don't forget for v5 backward compatible version's also&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Sun, 30 Mar 2025 16:22:28 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-forum/aps-how-to-override-dbsqlsessionfactory-properly/m-p/488484#M40011</guid>
      <dc:creator>vnosach</dc:creator>
      <dc:date>2025-03-30T16:22:28Z</dc:date>
    </item>
    <item>
      <title>Re: APS - How to override DbSqlSessionFactory properly?</title>
      <link>https://connect.hyland.com/t5/alfresco-forum/aps-how-to-override-dbsqlsessionfactory-properly/m-p/488490#M40012</link>
      <description>&lt;P&gt;&lt;a href="https://connect.hyland.com/t5/user/viewprofilepage/user-id/67207"&gt;@vnosach&lt;/a&gt;&amp;nbsp;, Thanks for your reply, Yes by overriding&amp;nbsp;&lt;SPAN&gt;VariableType&amp;nbsp;interface&amp;nbsp;we can register our variable types String / List / any type and can do&amp;nbsp;encryption/decryption while getting and setting the values.&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 31 Mar 2025 04:17:53 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-forum/aps-how-to-override-dbsqlsessionfactory-properly/m-p/488490#M40012</guid>
      <dc:creator>vikash_patel</dc:creator>
      <dc:date>2025-03-31T04:17:53Z</dc:date>
    </item>
    <item>
      <title>Re: APS - How to override DbSqlSessionFactory properly?</title>
      <link>https://connect.hyland.com/t5/alfresco-forum/aps-how-to-override-dbsqlsessionfactory-properly/m-p/492112#M40343</link>
      <description>&lt;P&gt;&lt;SPAN&gt;The user is experiencing an issue where overridden methods in their&amp;nbsp;&lt;/SPAN&gt;CustomDbSqlSession&lt;SPAN&gt;&amp;nbsp;class are not being executed after deploying changes to APS. While they can compile, create builds, deploy changes, and execute processes, the custom logic within the overridden methods is not being invoked; instead, the default methods from the&amp;nbsp;&lt;/SPAN&gt;DbSqlSession&lt;SPAN&gt;&amp;nbsp;class are being called. Debugging and logging confirm that the execution flow is bypassing the customized methods.&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="lia-align-right"&gt;&lt;SPAN&gt;&lt;A href="https://drift-boss.pro" target="_self"&gt;&lt;FONT size="1 2 3 4 5 6 7" color="#FFFFFF"&gt;drift boss&lt;/FONT&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 14 Aug 2025 03:17:55 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-forum/aps-how-to-override-dbsqlsessionfactory-properly/m-p/492112#M40343</guid>
      <dc:creator>aueranna</dc:creator>
      <dc:date>2025-08-14T03:17:55Z</dc:date>
    </item>
  </channel>
</rss>

