Посредник WSO2 ForEach с соединителем Gmail - PullRequest
1 голос
/ 20 сентября 2019

Я пытаюсь создать сценарий чтения входящих сообщений GMAIL.Сначала я использовал операцию ListAllMails для получения списка рассылки, а затем использовал посредник Foreach для вызова операции readMail внутри последовательности.Моя проблема в том, что при использовании операции readMail ForEach выпрыгивает из цикла после первого выполнения, а ответ от операции readMail кажется пустым (согласно моей настройке)

Рад, если кто-то может указать, что я делаюздесь неправильно и как это исправить?

API:

<?xml version="1.0" encoding="UTF-8"?>
<api context="/gmail" name="gmail" xmlns="http://ws.apache.org/ns/synapse">
    <resource methods="POST GET" uri-template="/listEmails">
        <inSequence>
            <gmail.init>
                <userId>xxxx@gmail.com</userId>
                <accessToken>xxx</accessToken>
                <apiUrl>https://www.googleapis.com/gmail</apiUrl>
                <clientId>xxxx</clientId>
                <clientSecret>xxxx</clientSecret>
            </gmail.init>
            <log description="log_init" level="custom" separator=",">
                <property name="LOG INIT" value="Gmail init success"/>
            </log>
            <gmail.listAllMails>
                <q>*</q>
            </gmail.listAllMails>
            <log description="list_mails" level="custom" separator=",">
                <property name="LOG_LIST_MAILS" value="List mails"/>
                <property expression="//resultSizeEstimate" name="RESULT SIZE"/>
            </log>
            <foreach expression="//messages" id="forEachMail">
                <sequence>
                    <sequence key="read_and_delete"/>
                </sequence>
            </foreach>
            <respond description="response"/>
        </inSequence>
        <outSequence/>
        <faultSequence/>
    </resource>    
</api>

последовательность read_and_delete:

<?xml version="1.0" encoding="UTF-8"?>
<sequence name="read_and_delete" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
    <log description="log_id" level="custom">
        <property expression="//messages/id" name="MESSAGE ID"/>
    </log>
    <property description="id" expression="//messages/id" name="id" scope="default" type="STRING"/>
    <payloadFactory description="email" media-type="xml">
        <format>
            <init xmlns=""/>
        </format>
        <args/>
    </payloadFactory>
    <gmail.readMail>
        <id>{$ctx:id}</id>
        <format>full</format>
    </gmail.readMail>
    <log description="log message" level="custom" separator=",">
        <property expression="//snippet" name="MESSAGE"/>
    </log>
</sequence>

Утешите: обратите внимание, что в почтовом ящике 8 писем, ноцикл foreach завершается после первой итерации

[2019-09-20 08:47:22,016] [micro-integrator]  INFO - LogMediator LOG INIT = Gmail init success
[2019-09-20 08:47:22,051] [micro-integrator]  INFO - TimeoutHandler This engine will expire all callbacks after GLOBAL_TIMEOUT: 120 seconds, irrespective of the timeout action, after the specified or optional timeout
[2019-09-20 08:47:22,644] [micro-integrator]  INFO - LogMediator LOG_LIST_MAILS = List mails,RESULT SIZE = 8
[2019-09-20 08:47:22,647] [micro-integrator]  INFO - LogMediator MESSAGE ID = 16d4906cb466ed49
[2019-09-20 08:47:22,682] [micro-integrator]  INFO - LogMediator MESSAGE = 
Carbon Server Micro Integrator Server has shut down...
...