我正在使用Apigee REST来SOAP到REST代理。
创建WSDL代理并部署它之后。我看到了可以发送到SOAP端点的所有参数。我们称之为param1,param2,param3,都是可选的。但是对它的验证是[0-9A-Fa-f] {8},所以这意味着每个参数如果不为空,则必须是8个字符。
我遇到的问题是param2为空时。某些原因代理仍然包含导致验证错误的请求中的内容。
有谁知道如何解决这个问题?我基本上想要这个。 http://xxx.apigee.com/myrestendpoint?param1=xxx¶m3=xxx
soap不包含param2,只发送param1和param3。
答案 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>