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

Mule parameters in host http:request-config not working correctly

我正在尝试创建一个入站端点来使用 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

但最终 return 我觉得不对 :

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

如果我直接在浏览器中使用 link 就可以了:

mywebsite.org/api/countries?display=[name,id]&filter[name]=加拿大

我明白了:

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

问题似乎出在主机的 & 中。但我似乎无法让它发挥作用。

谢谢。

您应该在请求元素中添加这些查询参数,而不是在请求配置中。

它应该看起来像这样:

<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 结束,然后将其余部分设置为请求中的路径,因为这样会更容易重用。

希望对您有所帮助。