【问题标题】:Apigee - How to exclude fields on WSDL callApigee - 如何在 WSDL 调用中排除字段
【发布时间】:2014-12-05 05:53:07
【问题描述】:

我正在使用 Apigee REST 到 SOAP 到 REST 代理。

在创建 WSDL 代理并部署它之后。我看到了所有可以发送到 SOAP 端点的参数。我们称它为 param1、param2、param3,都是可选的。但是它的验证是 [0-9A-Fa-f]{8},这意味着每个参数如果不为空,则必须是 8 个字符长。

我遇到的问题是当 param2 为空时。由于某些原因,代理仍将其包含在导致验证错误的请求中。

有谁知道我该如何解决这个问题?我基本上想要这个。 http://xxx.apigee.com/myrestendpoint?param1=xxx&param3=xxx

soap不会包含param2,只发送param1和param3。

【问题讨论】:

    标签: apigee


    【解决方案1】:

    我没有为参数做这个,但我已经为 SOAP 消息中的可选字段做了这个。就我而言,我正在发布一条 JSON 消息,该消息将被转换为后端 WSDL 的 SOAP XML 消息。 SOAP 消息具有不能为空的可选字段(例如 ),因此在构建 SOAP 消息的 XSLT 中,我检查该字段是否存在并填充,否则根本不填充。

    例如:

    <xsl:if test="/task/comments"><comments_txt><value><xsl:value-of select="/task/comments"/></value></comments_txt></xsl:if>

    您的 SOAP 消息不会将参数作为参数传递,而是将它们转换为 SOAP XML 消息。因此,也许可以对该消息运行 XSLT 以去除来自缺少参数的空元素。

    抱歉,我没有具体的答案,但也许这会有所帮助。

    【讨论】:

    • 这是我想我可能必须做的事情,在基于 Json 的 Soap Envelop 上使用 XSLT。我只需要弄清楚 Apigee 是如何将这些东西连接在一起的。我希望 Apigee 在他们的工具中有一些东西可以自动执行此操作,但从答案看来,似乎没有这样的功能。
    【解决方案2】:

    使用 AssignMessage 策略重写您的请求

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message">
        <DisplayName>Assign Message</DisplayName>
        <FaultRules/>
        <Properties/>
        <Remove>
            <QueryParams/>      
        </Remove>
        <Add>
            <QueryParams>
              <QueryParam name="param1">{request.queryparam.param1}</QueryParam>
              <QueryParam name="param3">{request.queryparam.param3}</QueryParam>
            </QueryParams>
        </Add>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>
    

    删除块将删除所有查询参数,然后添加将允许您放回您想要的参数。

    【讨论】:

    • 就是这样。我想删除在运行时为空的查询参数。所以在我的示例中,param2 为空,但有人可以传入 param1、2、3。有人可以传入param1。所以我需要一些可以删除空参数的东西。
    • 所以需要将param3重写为param2?
    • 没有。我需要一起删除参数。使用上述逻辑,删除所有 queryParmas,然后对于所有 request.queryparam,如果不为 null, 否则甚至不要提及该参数。
    • 我想我可能需要根据 request.queryparam 做一个 XSLT,但我希望我不需要。
    • 好吧,不是param2=[NULL]的值,而是用户从来没有通过。但是您正在对 param2 进行硬编码验证。对吗?
    【解决方案3】:

    我采用 Json 到 Xml 的方法来解决上述问题。基本上它会从我传递的 json 生成 XML,并修改我的 BuildSoap 以使用转换后的文本。

    例子

    {School : {
      teachers : { teacher: [
        {id:123}, {id:456}
      ]}
    }
    

    会变成

    <School>
      <teachers>
        <teacher>
          <id>123</id>
        </teacher>
        <teacher>
          <id>456</id>
        </teacher>
      </teachers>
    </school>
    

    然后我将它添加到我的 BuildSoap

    ...<soap:envelop><soap:body>{xmlFromJson}</soap:body></soap:envelop>
    

    【讨论】:

      猜你喜欢
      • 2015-03-06
      • 1970-01-01
      • 2018-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多