Преобразование POX в сообщение SOAP в WSO2

Я использую API шлюза в WSO2 ESB, чтобы адаптировать входящие запросы к моей внутренней службе. Внутренняя служба принимает только сообщения POX с предопределенным форматом. Я хочу дать клиентам возможность отправлять запросы SOAP, чтобы получать информацию из моей внутренней службы.

Я собираюсь использовать посредник payloadfactory, но не уверен, что это лучшее решение.

Мой типичный внутренний запрос выглядит следующим образом:

<methodCall>
<member>
<name>ABC</name>
<value>abc</value>
</member>
<member>
<name>XYZ</name>
<value>xyz</value>
</member>
</methodCall>

И я хочу, чтобы меня отправили в свой API, как показано ниже:

<soap:body>
<ABC>abc</ABC>
<XYZ>xyz</XYZ>
</soap:body>

другими словами, в моем запросе POX представляет объект с «именем» и «значением», и я хочу записать его в SOAP как «имя» (значение) «/ имя».

Не могли бы вы помочь?


person mahdouch gara    schedule 24.09.2019    source источник


Ответы (2)


Вы можете использовать фабрику полезной нагрузки для создания нового сообщения и 'send' с format = "soap11", чтобы добавить мыльный конверт. Это будет выглядеть примерно так:

    <inSequence>
      <payloadFactory media-type="xml">
            <format>
            <test>
                <ABC>$1</ABC>
                <XYZ>$2</XYZ>
            </test>
            </format>
            <args>
                <arg expression="//value[0]"/>
                <arg expression="//value[1]"/>
            </args>
      </payloadFactory>

      <send>
        <endpoint>
           <address format="soap11"  uri="http://youruri" />
        </endpoint>
      </send>
   </inSequence>
person Jan    schedule 25.09.2019
comment
Привет, Ян, я попробую и вернусь к тебе как можно скорее. Но похоже, что это статическое решение, несовместимое с другими вариантами использования. Другими словами, могу ли я динамически обнаружить узел ABC и поместить его в свое мыльное сообщение? что-то вроде этого : - person mahdouch gara; 26.09.2019
comment
Вы можете использовать xslt для динамического создания вашего сообщения. Взгляните, например, на: xsltfiddle.liberty-development.net/6qM2e2f/1 и docs.wso2.com/display/EI640/XSLT+Mediator - person Jan; 27.09.2019

похоже, что это статическое решение, несовместимое с другими вариантами использования. Другими словами, могу ли я динамически обнаружить узел ABC и поместить его в свое мыльное сообщение?

Вы не можете выполнить это требование с помощью посредника фабрики полезной нагрузки (PF), потому что вы не можете создать полезную нагрузку, как показано ниже, внутри PF.

<$1>$2</$1>

Он вернет неожиданный символ «$» в прологе после ошибки «‹ », когда вы создаете подобную полезную нагрузку.

Итак, есть 2 варианта выполнения этого требования:

  1. Используя посредник XSLT, см. [1]
  2. Реализуйте посредник настраиваемого класса, см. [2]

[1] https://docs.wso2.com/display/EI650/XSLT+Mediator

[2] https://docs.wso2.com/display/EI650/Class+Mediator

person Pramodya Mendis    schedule 23.10.2019