主机 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]&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 结束,然后将其余部分设置为请求中的路径,因为这样会更容易重用。
希望对您有所帮助。
我正在尝试创建一个入站端点来使用 REST API,如果我不添加过滤器参数它会起作用,但是当我添加时它不起作用。
<http:request-config name="HTTP_Request_Configuration" host="mywebsite.org/api/countries?display=[name,id]&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 结束,然后将其余部分设置为请求中的路径,因为这样会更容易重用。
希望对您有所帮助。