Как проверить действительные URL-адреса и направить их на виртуальную машину в конце потока в MULE..?

У меня есть поток в Mule. Он содержит входящее HTTP-сообщение, прослушивающее номер порта и адрес. Теперь в соответствии с адресом входящего HTTP-сообщения я должен направить его на другую виртуальную машину.

Эту часть я сделал, как показано ниже:

<flow name="MetaService">
    <http:inbound-endpoint address="http://localhost:8000/jcore/meta"  
transformer-refs="HttpParams" responseTransformer-refs="JavaObjectToJson">
    </http:inbound-endpoint>

    <component>
           <spring-object bean="MetaServiceBean"/>
    </component>

    <choice>
        <when evaluator="header" expression="INBOUND:http.request.path=/jcore/meta">
            <vm:outbound-endpoint path="ToJSON" exchange-pattern="request-response"/>
        </when>
         <when evaluator="header" expression="INBOUND:http.request.path=/jcore/meta.json">
            <vm:outbound-endpoint path="ToJSON" exchange-pattern="request-response"/>
        </when>
        <when evaluator="header" expression="INBOUND:http.request.path=/jcore/meta.xml">
            <vm:outbound-endpoint path="ToXML" exchange-pattern="request-response"/>
        </when>
        <otherwise>
            <message-properties-transformer>
                <add-message-property key="http.status" value="404"/>
            </message-properties-transformer>
            <expression-transformer>
                <return-argument evaluator="string" 
                expression="{&quot;Exception&quot;: &quot;Could not Render the Request. URL may be wrong&quot;}"/>
            </expression-transformer>
        </otherwise>
    </choice>
</flow>

Что происходит, если в конце адреса есть ".json" ИЛИ ".xml" , затем я перенаправляю его на виртуальную машину, и в случае недопустимого URL-адреса я поднимаю ошибку HTTP 404.


Но вопрос в том, что мне нужно проверить действительный/недействительный URL-адрес в начале потока, а не в конце. А также я должен направить их в конце (в соответствии с URL-адресом, как показано)..!!

Я также могу использовать компонент choice в начале, но тогда он будет излишним..!!

Есть хороший вариант..??


person Ramandeep Singh    schedule 13.01.2012    source источник


Ответы (2)


  • Используйте преобразователь свойств сообщения сразу после конечной точки входящего HTTP, чтобы добавить новое свойство области вызова.
  • В этом преобразователе используйте выражение Groovy, чтобы присвоить этому свойству значение "json", "xml" или "error" на основе входящего свойства "http.request.path".
  • Затем в выбранном вами маршрутизаторе просто основывайте свою маршрутизацию на этом свойстве вызова.
person David Dossot    schedule 13.01.2012
comment
Я думаю, что вы публиковали этот ответ и раньше .. но, как я уже сказал вам, он не работал .. :-O .. я не знаю, но в моем случае он не работал .. !! ..Любые другие предложения..?? - person Ramandeep Singh; 16.01.2012
comment
Я опубликовал что-то похожее, потому что это распространенный шаблон. Так что никаких других предложений: я почти уверен, что это сработает, если в вопросе не будет отсутствовать какая-то важная информация. - person David Dossot; 16.01.2012
comment
хорошо .. я попробую еще раз .. спасибо .. !! .. дам вам знать, если это сработает .. !! - person Ramandeep Singh; 18.01.2012

Я не понимаю, почему решение, представленное в стартовом посте, не сработает?

Если вы просто измените свой выбор из:

<when evaluator="header" expression="INBOUND:http.request.path=/jcore/meta">

to

<when evaluator="header" expression="INBOUND:http.request.path == /jcore/meta">

то они должны оцениваться как истинные или ложные.

Или я что-то пропустил здесь?

person hequ    schedule 18.01.2012
comment
Даже первое выражение работает..!!.. но я должен сделать это дважды в одном потоке: один для проверки действительных URL-адресов, а затем в конце потока, чтобы направить его на соответствующую виртуальную машину... И если у меня есть 20 потоки, то мой файл конфигурации будет слишком длинным (с избыточным кодом). Поэтому я прошу лучшего решения ..!! - person Ramandeep Singh; 19.01.2012