2016-05-12 1 views
0

Я бы опубликовал SOAP-сервис как API REST (json). Работа службы я хочу выставить имеет элемент последовательности XML в определении WSDL/XSD:JSON to SOAP WSO2 Api manager xml sequence

<xs:complexType name="hellolist"> 
    <xs:sequence> 
     <xs:element name="name" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> 
    </xs:sequence> 
</xs:complexType> 
<xs:complexType name="hellolistResponse"> 
    <xs:sequence> 
     <xs:element name="return" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> 
    </xs:sequence> 
</xs:complexType> 

Я не знаю, как отобразить массив JSON в последовательности XML с помощью PayloadFactory. Все образцы, которые я нашел, касаются только простых сообщений json и SOAP, таких как sample WSO2 transformation. Я хотел бы превратить этот JSon сообщение:

{"hellolist":{"name":["Peter","Mary","Ann","James"]}} 

Для этого мыльного сообщения:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:dum="http://dummyservice2.com/"> 
    <soapenv:Header/> 
     <soapenv:Body> 
     <dum:hellolist> 
      <name>Peter</name> 
      <name>Mary</name> 
      <name>Ann</name> 
      <name>James</name> 
     </dum:hellolist> 
    </soapenv:Body> 
</soapenv:Envelope> 
+0

ARE YOU stucked с отображением массива JSON в SOAP? Это все? –

+1

Да, проблема в том, что длина массива JSON отличается в каждом запросе. –

ответ

0

Вы можете использовать полезную нагрузку фабрики посредника, чтобы сделать это. Он может использоваться для преобразования или замены содержимого сообщения между клиентом и внутренним сервером. В случае вашего сценария вы можете настроить прокси-службу, как показано ниже.

<?xml version="1.0" encoding="UTF-8"?> 
<proxy xmlns="http://ws.apache.org/ns/synapse" 
     name="json_to_xml_factory" 
     transports="https,http" 
     statistics="disable" 
     trace="disable" 
     startOnLoad="true"> 
    <target> 
     <inSequence> 
     <payloadFactory media-type="xml"> 
      <format> 
       <dum:hellolist xmlns:dum="http://dummyservice2.com/"> 
        <name xmlns="">$1</name> 
        <name xmlns="">$2</name> 
        <name xmlns="">$3</name> 
        <name xmlns="">$4</name> 
       </dum:hellolist> 
      </format> 
      <args> 
       <arg evaluator="json" expression="$.hellolist.name[0]"/> 
       <arg evaluator="json" expression="$.hellolist.name[1]"/> 
       <arg evaluator="json" expression="$.hellolist.name[2]"/> 
       <arg evaluator="json" expression="$.hellolist.name[3]"/> 
      </args> 
     </payloadFactory> 
     <log level="full"/> 
     </inSequence> 
     <outSequence/> 
    </target> 
    <description/> 
</proxy> 

См. Ниже ссылки для получения дополнительной информации об этом.

https://docs.wso2.com/display/ESB490/PayloadFactory+Mediator http://christinetechtips.blogspot.com/2014/02/payload-factory-mediators-to-work-with.html http://madhukaudantha.blogspot.com/2013/05/wso2-esb-payload-mediator-tutorial.html

+0

Спасибо, но ваш подход не решает проблему. Длина списка является переменной, в запросе длина может содержать 4 элемента и следующий запрос 8. ' ' –

0

Если у вас есть не статическая полезная нагрузка (ваш случай), полезная нагрузка-завод-посредник не будет решением (только для статической полезной нагрузки). Лучшим способом для вашей проблемы является использование посредника xslt + обогащения в WSO2 ESB. Вы можете попробовать этот пример: https://docs.wso2.com/display/ESB481/Sample+440%3A+Converting+JSON+to+XML+Using+XSLT

Или вы можете использовать посредник скрипта в случае, как описано в этом примере. https://docs.wso2.com/display/ESB481/Sample+350%3A+Introduction+to+the+Script+Mediator+Using+JavaScript. Но не самый предпочтительный способ.

Я сделал ваши преобразования, используя WSO2 ESB, как я описал выше. Но я не знаю, доступны ли эти средства посредника с WSIM2 APIM (я не мог найти никакого примера, когда я искал Google для вашей проблемы).

0

Попробуйте шаги уже ниже

Шаги для преобразования службы SOAP-теста в SoapUI с утверждениями в службу JSON с утверждениями

  1. Скопируйте проект XML-файл проекта UI SOAP
  2. Откройте скопированный xml-файл
  3. Найти формат для всех типов утверждений в JSON, равный по запросу SOAP-вызова
  4. Теперь преобразуйте все утверждения мыла в конфигурационный узел узла тестового шага в формат узла конфигурации утверждения JSON, как показано на предыдущем шаге
  5. Преобразование запроса вызова SOAP в вызов JSON путем изменения всех полей, как показано ниже • Добавить узел output_format • Добавить вызов Rest - имя службы • Удалите узлы без значения и преобразуйте остальные в формат JSON, например {"имя узла": "значение"} и т. Д.,
  6. В атрибуте тест типа шаг узла - это будет «запрос» изменить на «HttpRequest»
  7. Сохраните файл и откройте его в SOAP UI

Теперь вы можете увидеть все услуги недавно открытый проект будет в формате JSON, и все утверждения будут доступны, которые ранее были в вызове SOAP.

также отсылает link, который помогает преобразовать запрос полностью, включая утверждение

пожалуйста, ответьте, если это не полезно

+0

Добро пожаловать в Stack Overflow! Но учтите, что [явная самореклама не разрешена] (http://stackoverflow.com/help/behavior). –

+0

Спасибо за комментарий! –

+0

Извините, но этот вопрос касается WSO2 Api Management tool. –