如何在Mule中的http请求连接器中动态设置完整URL

时间:2016-09-19 11:32:16

标签: http mule hateoas

this question所示,当使用mule请求http端点时,可以在变量中包含部分url。

但我有一个完整的网址,从支持仇恨的端点返回。是否可以将此完整URL用于请求而不将其分成几个部分(主机,端口,路径)?

有了完整的网址,我的意思是......比如“http://example.com/a/specific/path”而不是host =“example.com”,port =“80”,path =“/ a / specific / path”

1 个答案:

答案 0 :(得分:3)

一种简单的方法是将网址拆分为多个部分并将其设置为流变量。然后,您可以在任何地方使用此流变量。

一个简单的例子如下: -

 <http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration"/>
    <flow name="csv-to-smtpFlow">
        <http:listener config-ref="HTTP_Listener_Configuration" path="/aa" doc:name="HTTP"/>
        <logger message="#[payload]" level="INFO" doc:name="Logger"/>
        <set-payload value="http://example.com:80/a/specific/path" doc:name="Set Payload"/>
        <set-variable variableName="url" value="#[new URL(payload);]" doc:name="Variable"/>
        <set-variable variableName="protocol" value="#[url.getProtocol();]" doc:name="Variable"/>
        <set-variable variableName="host" value="#[url.getHost();]" doc:name="Variable"/>
        <set-variable variableName="port" value="#[url.getPort();]" doc:name="Variable"/>
        <set-variable variableName="path" value="#[url.getPath();]" doc:name="Variable"/>
        <logger message="Done" level="INFO"/>
    </flow>

在这里,您可以看到我在有效负载中设置url http://example.com:80/a/specific/path,然后将其拆分为主机,端口,路径等,并将其存储在变量中。

请注意如果您的网址位于http://example.com:80/a/specific/path格式,您将使用表达式#[url.getProtocol();]获取该端口 但如果您的网址采用http://example.com/a/specific/path格式,则无法获取端口号。

参考: - https://docs.oracle.com/javase/tutorial/networking/urls/urlInfo.html