2017-02-15 22 views
0

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

Когда я POST непосредственно к REST API (не через ESB), он отлично работает. (200, OK)

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

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

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

но я не уверен, как передать это API.

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

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

Я попробовал различные вариации линии:

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

, такие как

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

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

Невозможно выполнить преобразование XSLT, используя : Значение {name = 'null', keyValue = 'discountPayment'} против источника XPath: s11: Тело/ребенок :: [position() = 1] | s12: Тело/ребенок :: [положение() = 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>

+0

Пожалуйста, добавьте код, который вы пытались этот вопрос. Подумайте об этом: http://stackoverflow.com/help/how-to-ask – Aaron

+0

Можете ли вы опубликовать свою транзакцию, которую используете, включая заголовки и конфигурацию прокси-сервера? – jchaplin

+0

добавить свой esb proxy config xml ... –

ответ

0

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

в прокси-сервис, перед тем отправить, добавьте строку

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

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

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

0

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

 <send> 
     <endpoint> 
      <http method="POST" 
       uri-template="http://your.backend.endpoint.org/"/> 
     </endpoint> 
    </send>