主机http:request-config中的Mule参数无法正常工作

时间:2015-04-21 17:24:04

标签: mule mule-studio mule-el

我正在尝试使入站端点使用REST API,如果我不添加过滤器参数,但是当我这样做时,它可以工作。

<http:request-config name="HTTP_Request_Configuration"  host="mywebsite.org/api/countries?display=[name,id]&amp;filter[name]=#[message.inboundProperties.'http.query.string']" port="433" doc:name="HTTP Request Configuration" >
        <http:basic-authentication username="user" password="123"/>
    </http:request-config>


<flow name="CountryByValue">
        <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8080" path=countryByValue" doc:name="HTTP"/>
        <logger level="INFO" message="#[message.payloadAs(java.lang.String)]" doc:name="Logger"/>
        <logger level="INFO" message="#[message.inboundProperties.'http.query.string']" doc:name="Logger"/>
        <logger level="INFO" doc:name="Logger"/>
        <http:request config-ref="HTTP_Request_Configuration" path="/" method="GET" doc:name="REST API">
        </http:request>
        <logger level="INFO" message="#[message.payloadAs(java.lang.String)]" doc:name="Logger"/>
        <logger level="INFO" doc:name="Logger"/>
    </flow>

在我的记录器中,我可以看到查询字符串确实存在

INFO  2015-04-21 11:21:25,389 [[panierv2].connector.http.mule.default.receiver.02] org.mule.api.processor.LoggerMessageProcessor: /getCountryByValue?Canada
INFO  2015-04-21 11:21:25,411 [[panierv2].connector.http.mule.default.receiver.02] org.mule.api.processor.LoggerMessageProcessor: Canada

但最终它并没有给我正确的答案:

<api xmlns:xlink="http://www.w3.org/1999/xlink">
<countries>
</countries>
</api>

如果我直接在浏览器中使用链接工作:

mywebsite.org/api/countries?display= [名称,ID]安培;过滤[名称] =加拿大

我明白了:

<api xmlns:xlink="http://www.w3.org/1999/xlink">
<countries>
<country>
<id>
<![CDATA[ 4 ]]>
</id>
<name>
<language id="2" xlink:href="sdfg">
<![CDATA[ Canada ]]>
</language>
<language id="3" xlink:href="sdfg">
<![CDATA[ Canada ]]>
</language>
</name>
</country>
</countries>
</api>

问题似乎出现在&amp;在主持人。但我似乎无法使其发挥作用。

谢谢。

1 个答案:

答案 0 :(得分:1)

您应该在request元素中添加这些查询参数,而不是request-config。

看起来应该是这样的:

<http:request-config name="HTTP_Request_Configuration"  host="mywebsite.org" basePath="api" port="443" protocol="HTTPS" doc:name="HTTP Request Configuration" >
    <http:basic-authentication username="user" password="123"/>
</http:request-config>
...
<http:request config-ref="HTTP_Request_Configuration" path="/countries" method="GET" doc:name="REST API">
    <http:request-builder>
        <http:query-param paramName="display" value="[name,id]" />
        <http:query-param paramName="filter[name]" value="#[message.inboundProperties.'http.query.string']" />
    </http:request-builder>
</http:request>

我在api处建立了主机端,然后将其余部分设置为请求中的路径,因为这样会更容易重用。

希望有所帮助。