WSO2 ESB - мыльный конверт, который добавляется автоматически, вызывает проблемы

Я изучаю WSO2 ESB и обнаружил проблему. Я использую простой прокси-сервер для отправки XML-данных из SAP (или Postman для тестирования), которые затем перенаправляются в REST API - должно быть легко!

Когда я отправляю POST прямо в REST API (не через ESB), он работает нормально. (200, ОК)

Но WSO2 ESB автоматически добавляет конверт SOAP, который REST API не принимает. Я пробовал различные подходы к удалению автоматически добавленного конверта SOAP, но безуспешно. Пробовал преобразование XSLT, формат POX, посредник Enrich и т. Д., Все предложения, которые я мог найти. (Я могу удалить элемент конверта с помощью XSLT, если он отправляется как часть тела, но не тот, который добавляет WSO2)

Я могу получить доступ к телу без конверта SOAP, используя:

<property name="body" expression="$body/*[1]" type="OM"/>

но я не знаю, как переслать это в API.

Есть идеи, как остановить добавление этого конверта в первую очередь в WSO2 ESB или как его удалить?

Я использовал код xslt из этого ответа, который отлично работает, когда я включаю теги SOAP в тело, но не влияет на конверт SOAP, который, кажется, автоматически добавляется в WSO2 (за исключением сообщения об ошибке ниже).

Пробовал разные варианты строчки:

<xsl:apply-templates select="soap:Envelope/soap:Body/*"/>

Такие как

<xsl:apply-templates select="soap:Envelope/*"/>
<xsl:apply-templates select="/*"/>

это ошибка, которую я вижу в журнале ESB:

Невозможно выполнить преобразование XSLT с использованием: Value {name = 'null', keyValue = 'DiscountPayment'} для исходного XPath: s11: Body / child :: [position () = 1] | s12: Body / child :: [position () = 1] причина: невозможно создать OMElement с использованием результата XSLT

Я новичок в WSO2 ESB и раньше не использовал XSLT, поэтому в моем подходе может быть какая-то основная ошибка ...

вот мой прокси xml и XSLT removeSOAP:

<?xml version="1.0" encoding="UTF-8"?>
<proxy name="APIServer" startOnLoad="true" trace="disable"
  transports="https http" xmlns="http://ws.apache.org/ns/synapse">
  <target>
    <inSequence>
      <log level="full">
        <property name="FirstLog" value="APITest LOG...."/>
        <property name="payload" expression="$body/*[1]" type="OM"/>
      </log>
      <xslt key="removeSOAP"/>              
      <log level="full">
        <property name="SecondLog" value="after xslt...."/>
      </log>
  <property name="messageType" scope="axis2" type="STRING" value="application/xml"/>
          <send>      
          <endpoint name="endpoint_urn_uuid_xxxxxx">
      <address trace="disable" uri="http://myAPIendpoint " />
    </endpoint>
              </send>
    </inSequence>
    <outSequence>
      <log level="full"/>   
      <send/> 
    </outSequence>
    <faultSequence/>
  </target>
</proxy>

<?xml version="1.0" encoding="UTF-8"?>
<localEntry key="removeSOAP" xmlns="http://ws.apache.org/ns/synapse">
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
    xmlns:m="http://www.example.org/stock">
    <xsl:template match="/">
        <xsl:apply-templates select="soap:Envelope/soap:Body/*"/>
    </xsl:template>
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>
</localEntry>


person user7272060    schedule 15.02.2017    source источник
comment
Пожалуйста, добавьте код, который вы пробовали, к этому вопросу. Вы можете прочитать это: stackoverflow.com/help/how-to-ask   -  person Aaron    schedule 15.02.2017
comment
Можете ли вы опубликовать свою транзакцию, которую вы используете, включая заголовки и конфигурацию прокси-службы?   -  person jchaplin    schedule 15.02.2017
comment
добавьте конфигурацию прокси-сервера esb xml ...   -  person Jorge Infante Osorio    schedule 16.02.2017


Ответы (2)


Коллега понял это сегодня, я публикую здесь ответ, если он кому-то поможет в будущем:

в прокси-сервисе перед отправкой добавьте строчку

<property name="DISABLE_CHUNKING" value="true" scope="axis2"/>  

тогда это работает.

Нет необходимости в преобразовании XSLT, показанном выше, просто эта строка исправляет его.

person user7272060    schedule 16.02.2017

если ваш бэкэнд лучше API, вы можете использовать конечную точку http https://docs.wso2.com/display/ESB500/HTTP+Endpoint:

     <send>
        <endpoint>
           <http method="POST"
                 uri-template="http://your.backend.endpoint.org/"/>
        </endpoint>
     </send>
person Jorge Infante Osorio    schedule 16.02.2017