Я изучаю 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>
Пожалуйста, добавьте код, который вы пытались этот вопрос. Подумайте об этом: http://stackoverflow.com/help/how-to-ask – Aaron
Можете ли вы опубликовать свою транзакцию, которую используете, включая заголовки и конфигурацию прокси-сервера? – jchaplin
добавить свой esb proxy config xml ... –