Использование WSO2 Enterprise Integrator 6.4.0 для создания веб-сервисов.Кратко о структуре веб-службы:
Запрос поступает в API.xml
В 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"/>
, но все равно те же ошибки, что и у меня.
Не могли бы вы посоветовать?Спасибо