Apigee - 如何在WSDL调用上排除字段

时间:2014-12-05 05:53:08

标签: apigee

我正在使用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。

3 个答案:

答案 0 :(得分:1)

我没有为params做过这个,但我已经为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消息不会将params作为params传递,而是将它们转换为SOAP XML消息。因此,可以在该消息上运行XSLT以去除来自缺失参数的空元素。

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

答案 1 :(得分:0)

使用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>

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

答案 2 :(得分:0)

我将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>