Как динамически установить полный URL-адрес в соединителе http-запроса в Mule

Как показано в этом вопросе, возможно иметь части URL-адреса в переменных при запросе конечной точки http с помощью мула.

Но у меня есть полный URL-адрес, возвращенный с конечной точки, поддерживающей ненависть. Можно ли использовать этот полный URL-адрес для запросов, не разбивая его на несколько частей (хост, порт, путь)?

С полным URL я имею в виду что-то. например "http://example.com/a/specific/path" вместо host= "example.com", порт = "80", путь = "/a/конкретный/путь"


person Erik P    schedule 19.09.2016    source источник
comment
Я создал для этого тикет в mule jira: mulesoft.org/jira/browse/MULE- 10741   -  person Erik P    schedule 11.10.2016


Ответы (1)


Один из простых способов — разбить URL-адрес на несколько частей и установить его в переменные потока. Затем вы можете использовать эти переменные потока где угодно.

Простой пример, как это сделать, выглядит следующим образом:

 <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 в полезной нагрузке, а затем разделить его на хост, порт, путь и т. д. и сохранить в переменных.

Обратите внимание, если ваш URL имеет вид http://example.com:80/a/specific/path, вы получите порт, используя выражение #[url.getProtocol();]
Но если ваш URL-адрес имеет форму http://example.com/a/specific/path, вы не получите номер порта.

Ссылка: - https://docs.oracle.com/javase/tutorial/networking/urls/urlInfo.html

person Anirban Sen Chowdhary    schedule 19.09.2016
comment
Благодарю за ваш ответ. Но, как описано в вопросе, я надеялся найти решение без разделения URL-адреса. Поэтому я пока не приму ваш ответ и подожду, если у кого-то есть другое решение для этого. - person Erik P; 19.09.2016