无法使用Azure API Management液体模板解析肥皂响应

问题描述

在传递给客户端之前,我想更改肥皂响应的输出格式。我正在使用文档https://azure.microsoft.com/en-ca/blog/soap-pass-through/

中指定的肥皂直通

此示例中使用的肥皂服务托管在 https://fazioapisoap.azurewebsites.net/FazioService.svc?singleWsdl

我无法提取液体模板中的肥皂响应。确实会生成肥皂响应,但是没有数据。

enter image description here

此代码有什么问题吗?

(u <*> v)   =   (u >>= \f -> v >>= \x -> pure (f x))

解决方法

您不必为命名空间添加前缀。此请求有效

<set-body template="liquid">
    <Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
        <Body>
            <GetOpenOrdersResponse xmlns="http://tempuri.org/">
                <GetOpenOrdersResult xmlns:a="http://schemas.datacontract.org/2004/07/FazioAPISoap" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">                        
  {% for summary in body.Envelope.Body.GetOpenOrdersResponse.GetOpenOrdersResult.OrderSummary -%}
                    <OrderSummary>
                        <order_id>
                            {{summary.order_id}}
                        </order_id>
                    </OrderSummary>
  {% endfor -%}
                </GetOpenOrdersResult>
            </GetOpenOrdersResponse>
        </s:Body>
    </s:Envelope>
</set-body>

我可以看到您的请求有两个潜在问题。

  1. 您可能缺少SOAPAction标头,例如submitOrder
<set-header name="SOAPAction" exists-action="override">
    <value>http://tempuri.org/IFazioService/submitOrder</value>
</set-header>
  1. 此外,您可能需要设置后端url并重写资源的路径(如果APIM路径不同于SOAP服务)
<set-backend-service base-url="{{s-iserve-store-inventory-backend-url}}" />
<rewrite-uri template="?" copy-unmatched-params="false" />

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...