Слияние xml-файлов с помощью посредника Aggregate

Мы получим большое количество маленьких xml файлов, мы хотели бы объединить все эти файлы только в один xml файл перед его обработкой.

Мы пытались сделать это с помощью посредника Aggregate, но это не работает, потому что мы не используем посредник iterate или clone.

Вот пример использования прокси, который опрашивает каталог. Когда прокси потребляет 3 сообщения, агрегатор правильно объединяет сообщения, но мы никогда не попадаем в onComplete. Сообщение журнала «внутри onComplete» не появляется, и последовательность «TestAggregateSend» не выполняется.

<proxy name="TestAggregateProxyService" startOnLoad="false" transports="https http vfs" xmlns="http://ws.apache.org/ns/synapse">
<target>
    <inSequence>
        <log level="full">
            <property name="DEBUG" value="start inSequence"/>
        </log>
        <aggregate id="sa">
            <correlateOn expression="//ABC"/>
            <completeCondition timeout="60">
                <messageCount max="3" min="-1"/>
            </completeCondition>
            <onComplete expression="//ABC" sequence="TestAggregateSend">
                <log level="full">
                    <property name="DEBUG" value="inside onComplete"/>
                </log>
            </onComplete>
        </aggregate>
        <log level="full">
            <property name="DEBUG" value="end inSequence"/>
        </log>
    </inSequence>
    <outSequence>
        <log level="full">
            <property name="DEBUG" value="inside outSequence"/>
        </log>
        <sequence key="TestAggregateSend"/>
    </outSequence>
    <faultSequence/>
</target>
<parameter name="transport.PollInterval">5</parameter>
<parameter name="transport.vfs.FileURI">file:///var/wso2/test/in</parameter>
<parameter name="transport.vfs.ContentType">text/xml;charset=UTF-8</parameter>
<parameter name="transport.vfs.FileProcessInterval">1000</parameter>
<parameter name="transport.vfs.FileNamePattern">.*.xml</parameter>

According to logs, the merge works, but it is impossible to do any action in the onCompete

DEBUG {org.apache.synapse.mediators.eip.aggregator.AggregateMediator} — объединенный результат:

<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body>
<ABC>
    <DEF>1</DEF>
    <GHI>2</GHI>
</ABC>
<ABC>
<PQR>5</PQR>
<STU>6</STU></ABC>
<ABC>
<JKL>3</JKL>
<MNO>4</MNO></ABC>

Можно ли объединить несколько файлов с помощью посредника Aggregate? Есть ли другой способ объединить файлы xml с помощью WSO ESB?


person Salah-Eddine BOUADAR    schedule 01.03.2018    source источник
comment
Можете ли вы предоставить несколько файлов примеров xml и последовательность TestAggregateSend?   -  person Jorge Infante Osorio    schedule 02.03.2018
comment
Вот 3 примера xml с мыльным конвертом ‹soapenv:Envelope xmlns:soapenv=schemas .xmlsoap.org/soap/envelope/›‹soapenv:Body› ‹ABC› ‹DEF›1‹/DEF› ‹GHI›2‹/GHI› ‹/ABC› ‹/soapenv:Body›‹/ soapenv:Envelope› ‹soapenv:Envelope xmlns:soapenv=schemas.xmlsoap.org/ мыло/конверт/›‹soapenv:Body› ‹ABC› ‹JKL›3‹/JKL› ‹MNO›4‹/MNO› ‹/ABC› ‹/soapenv:Body›‹/soapenv:Envelope› ‹ soapenv:Envelope xmlns:soapenv=schemas.xmlsoap.org/soap/envelope/› ‹soapenv:Body› ‹ABC› ‹PQR›5‹/PQR› ‹STU›6‹/STU› ‹/ABC› ‹/soapenv:Body›‹/soapenv:Envelope›   -  person Salah-Eddine BOUADAR    schedule 02.03.2018


Ответы (1)


Совокупный посредник не работает, если в EI 6.1.1 не указано значение correctOn. Проблема исправлена ​​в v2.1.7-wso2v16

https://github.com/wso2/wso2-synapse/commit/797021df20c92d90a6d5f67185cebc5bab4c7717#diff-2b94f68abf9ec06aca94d6524af82513

person Salah-Eddine BOUADAR    schedule 23.03.2018