WSO2 Enterprise Integrator v6.1.1-update 24 Ошибка преобразования JSON в XML, когда JSON имеет массив - PullRequest
0 голосов
/ 23 октября 2018

Несколько дней назад мы перешли на WSO2 Enterprise Integrator версии 6.1.1-update24, и службы с входной полезной нагрузкой JSON с массивом теперь получают следующую ошибку:

TID: [-1234] [] [2018-10-22 15: 45: 11,954] ОШИБКА {org.apache.synapse.commons.json.JsonUtil} - #toXml.Не удалось преобразовать поток JSON в XML.Не удается обработать ввод JSON.Ошибка >>> null {org.apache.synapse.commons.json.JsonUtil} TID: [-1234] [] [2018-10-22 15: 45: 11,954] ОШИБКА {org.apache.synapse.mediators.transform.PayloadFactoryMediator} - Ошибка при преобразовании JSON в XML, проверьте, чтобы выражения JSON Path возвращали действительный JSON: {org.apache.synapse.mediators.transform.PayloadFactoryMediator} TID: [-1234] [] [2018-10-22 15:45:11,954] ОШИБКА {API_LOGGER.UtilityAPI} - Ошибка преобразования JSON в XML. Проверьте, что выражения JSON Path возвращают допустимый JSON: {API_LOGGER.UtilityAPI} TID: [-1234] [] [2018-10-22 15: 45: 11,974]ОШИБКА {org.apache.synapse.mediators.builtin.LogMediator} - Кому: / utility / testjsonarray, MessageID: urn: uuid: 7bebe318-ff20-4126-8c1b-99600b6c276e, Направление: запрос, последовательность = genericAPIFault, error_message = ошибкаJSON в XML, проверьте, что выражения JSON Path возвращают допустимый JSON:, error_code = 0, error_detail = org.apache.synapse.SynapseException: Ошибка при преобразовании JSON в XML, проверьте, чтобы выражения JSON Path возвращали действительный JSON: в org.apache.synapse.mediators.AbstractMediator.handleException (AbstractMediator.java:327) в org.apache.synapse.mediators.transform.PayloadFactoryMediator.replace (PayloadFactoryMediator.java:293) в org.apache.s.transform.PayloadFactoryMediator.regexTransform (PayloadFactoryMediator.java:212) при org.apache.synapse.mediators.transform.PayloadFactoryMediator.mediate (PayloadFactoryMediator.java:154) в org.apache.synapse.mediators.transform.PayloadFactoryMediator.mediate (PayloadFactoryMediator.java: 104) в org.apache.synapse.mediators.AbstractListMediator.mediate (AbstractListMediator.java:108) в org.apache.synapse.mediators.AbstractListMediator.mediate (AbstractListMediator.java:70) в org.apache.synsemediators.base.SequenceMediator.mediate (SequenceMediator.java:158) в org.apache.synapse.mediators.base.SequenceMediator.mediate (SequenceMediator.java:214) в org.apache.synapse.mediators.AbstractListMediistMediate.mediateJava: 108) в org.apache.synapse.mediators.AbstractListMediator.mediate (AbstractListMediator.java:70) в org.apache.synapse.mediators.base.SequenceMediator.mediate (SequenceMediator.java:158) в org.apache.synapse.rest.Resource.process (Resource.Java: 351) в org.apache.synapse.rest.API.process (API.java:399) в org.apache.synapse.rest.RESTRequestHandler.apiProcess (RESTRequestHandler.java:123) в org.apache.synapse.rest.RESTRequestHandler.) в org.apache.synapse.core.axis2.SynapseMessageReceiver.receive (SynapseMessageReceiver.java:92) в org.apache.axis2.engine.AxisEngine.receive (AxisEngine.java:180) в org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler (ServerWorker.java:331) в org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest (ServerWorker.java:377) в org.apache.synapse.transport.passthru.ServerWorker.run (ServerWorker.java:149) в org.apache.axis2.transport.base.threads.NativeWorkerPool $ 1.run (NativeWorkerPool.jpg)) в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142)в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617) в java.lang.Thread.run (Thread.java:748)

Чтобы воспроизвести эту ошибку изНа консоли углерода создайте API REST со следующим ресурсом API:

<?xml version="1.0" encoding="UTF-8"?>
<api context="/utility" name="UtilityAPI" xmlns="http://ws.apache.org/ns/synapse">
    <resource methods="POST" url-mapping="/testjsonarray">
        <inSequence>
            <sequence key="inTestJsonArraySeq"/>
        </inSequence>
        <outSequence/>
        <faultSequence/>
    </resource>
</api>

, затем добавьте следующую последовательность inSequence:

<?xml version="1.0" encoding="UTF-8"?>
<sequence name="inTestJsonArraySeq" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
    <log description="logInTest">
        <property name="sequence" value="inTestJsonArraySeq"/>
    </log>
    <payloadFactory description="pfJsonArrary" media-type="xml">
        <format>
            <myPayload xmlns="">$1</myPayload>
        </format>
        <args>
            <arg evaluator="json" expression="$.myArray"/>
        </args>
    </payloadFactory>
    <respond description="respOut"/>
</sequence>

Вызовите API REST со следующей полезной нагрузкой JSON:

{
    "myArray" : ["element1", "element2", "element3"]
}

ПРИМЕЧАНИЕ1 : В WSO2 Enterprise Integrator v6.1.1 (без обновления) мы не видим эту ошибку, ответ от конечной точки для вышеуказанной полезной нагрузки является ожидаемым:

<myPayload>
    <jsonElement>element1</jsonElement>
    <jsonElement>element2</jsonElement>
    <jsonElement>element3</jsonElement>
</myPayload>

Изучая класс, который выдает ошибку, мы заметили изменение версии библиотеки synapse-commons_2.1.7.wso2v15.jar (из WSO2EI v6.1.1) в synapse-commons_2.1.7.wso2v44.jar (из WSO2v6.1.1-update24) в папке {WSO2EI_HOME} / wso2 / components / plugins /.Это может быть подсказкой для вас, ребята из WSO2.

1 Ответ

0 голосов
/ 14 ноября 2018

Ваша цель состоит в том, чтобы преобразовать массив json в xml .. поэтому для этого следует использовать медиатор свойства. Например,

  <property name="messageType" scope="axis2" type="STRING" value="application/xml"/>

Надеюсь, что эта справка.

...