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

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

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

<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 в начале, но тогда он будет избыточным ..!!

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

Ответы [ 2 ]

1 голос
/ 18 января 2012

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

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

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

до

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

тогда они должны принимать значение true или false.

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

1 голос
/ 13 января 2012
  • Используйте преобразователь свойств сообщения сразу после входящей конечной точки HTTP, чтобы добавить новое свойство области вызова.
  • В этом преобразователе используйте выражение Groovy, чтобы присвоить этому свойству значение "json "," xml "или" error "на основе входящего свойства" http.request.path ".
  • Затем в маршрутизаторе по вашему выбору просто основывайте свою маршрутизацию на этом свойстве вызова.
...