После удаления «@» из ответа JSON как String (), получая ошибку при использовании setPeyloadJSON () в последовательности WSO2 - PullRequest
3 голосов
/ 27 сентября 2019

Использование WSO2 Enterprise Integrator 6.4.0 для создания веб-сервисов.Кратко о структуре веб-службы:

  1. Запрос поступает в API.xml

  2. В Sequence.xml, принимающем полезную нагрузку JSON с;

<property expression="json-eval($.)" name="payload" scope="default" type="STRING" xmlns:ns="http://org.apache.synapse/xsd"/>
Предоставление полезной нагрузки JSON в файл Transformation.xslt в качестве полезной нагрузки;
    <xslt key="conf:xsl/RequestTransform.xsl" source="$body[1]/*" xmlns:ns="http://org.apache.synapse/xsd"/>
Отправка полезной нагрузки в конечную точку в формате JSON.Результатом преобразования является полезная нагрузка XML, изменяющая тип на JSON с помощью PayloadFactory.
<payloadFactory media-type="json">
        <format>$1</format>
        <args>
            <arg evaluator="xml" expression="$body[1]/*" literal="false" xmlns:ns="http://org.apache.synapse/xsd"/>
        </args>
    </payloadFactory>
Получение ответа от конечной точки в формате JSON.Получение полезной нагрузки с символами «@».Этот символ означает, что это атрибут.Пример:
{
    "address": "1590 Lar",
    "@country": "SMCountry123",
    "language": "SMLanguage123"
}

Вот проблема, которая у меня возникла: мне нужно удалить символ '@' из моего полезного груза JSON ответа, полученного из внешней системы.И нужно преобразовать ответ с помощью файла .xslt после удаления'@'.

Моей первой попыткой был Script Mediator;

<script language="js">
            <![CDATA[var payload = mc.getProperty("payload");
                payload=String(payload).replace('@'/gm,' ');
                payload = JSON.parse(payload);
            mc.setPayloadJSON(payload);]]>
        </script>

, но с получением ошибок

javax.xml.stream.XMLStreamException: Невозможно прочитать атрибут: элемент имеет дочерние элементы или текст, и существующая полезная нагрузка json искажена.

Затем я пытаюсь использовать Class Mediator для подготовки .jar для библиотеки WSO2 для;

import org.apache.synapse.MessageContext; 
import org.apache.synapse.mediators.AbstractMediator;

public class ChangeAtType extends AbstractMediator { 
    private String payload = "payload";

    public boolean mediate(MessageContext context) { 
        String payload = (String)context.getProperty(this.payload);
        payload = payload.replace("@","");
        context.setProperty(this.payload, payload);
        return true;
    }
}

и вызвал его из последовательности;

<property expression="json-eval($.)" name="payload" scope="default" type="STRING" xmlns:ns="http://org.apache.synapse/xsd"/>
<class name="org.com.ChangeAtType.ChangeAtType"/>
<property expression="get-property('payload')" name="payload" scope="default" type="STRING" xmlns:ns="http://org.apache.synapse/xsd"/>

, но все равно те же ошибки, что и у меня.

Не могли бы вы посоветовать?Спасибо

...