Mule - 使用choice组件测试http get请求

时间:2013-05-17 13:43:40

标签: http expression mule mule-studio

我有以下流程:

 <flow name="SOAPWebService" doc:name="SOAPWebService">

<http:inbound-endpoint address="http://localhost:8088/esb/"   exchange-pattern="request-response" doc:name="HTTP">          
</http:inbound-endpoint>

    <choice doc:name="Choice">
        <when expression="#[payload.contains('c22')]">
            <set-variable variableName="paramCtr" value="#[message.inboundProperties['ctr']]" doc:name="conteneur"/>
            <set-variable variableName="paramC" value="#[message.inboundProperties['c']]" doc:name="critere"/>
            <component class="com.example.components.SampleComponent" doc:name="Java"/>
            <mulexml:xslt-transformer maxIdleTransformers="2" maxActiveTransformers="5" xsl-file="C:\MuleStudio\SandBox\resources\PrepareRequestXMLPort.xsl" doc:name="XSLT">
                <mulexml:context-property key="paramCtr" value="#[flowVars['paramCtr']]"/>
                <mulexml:context-property key="paramC" value="#[flowVars['paramC']]"/>
            </mulexml:xslt-transformer>
            <cxf:proxy-client payload="body" enableMuleSoapHeaders="true" doc:name="SOAP"/>
            <http:outbound-endpoint exchange-pattern="request-response" address="http://localhost:8080/ClientsDB/port" doc:name="PortWS"/>
        </when>
        <otherwise>
            <set-variable variableName="paramCtr" value="#[message.inboundProperties['ctr']]" doc:name="conteneur"/>
            <set-variable variableName="paramC" value="#[message.inboundProperties['c']]" doc:name="critere"/>
            <component class="com.example.components.SampleComponent" doc:name="Java"/>
            <mulexml:xslt-transformer maxIdleTransformers="2" maxActiveTransformers="5" xsl-file="C:\MuleStudio\SandBox\resources\PrepareRequestXMLDouane.xsl" doc:name="XSLT">
                <mulexml:context-property key="paramCtr" value="#[flowVars['paramCtr']]"/>
                <mulexml:context-property key="paramC" value="#[flowVars['paramC']]"/>
            </mulexml:xslt-transformer>
            <cxf:proxy-client payload="body" enableMuleSoapHeaders="true" doc:name="SOAP"/>
            <http:outbound-endpoint exchange-pattern="request-response" address="http://localhost:8080/ClientsDB/douane" doc:name="DouaneWS"/>
        </otherwise>
    </choice>


<byte-array-to-string-transformer   doc:name="Byte Array to String" />
    <file:outbound-endpoint path="C:\MuleStudio\SandBox\output" outputPattern="#[function:datestamp:dd-MM-yy]_#[function:systime].xml " responseTimeout="10000" doc:name="Outgoing File"/>

我想测试一个http请求,如http://localhost:8088/esb/?type=xxxx&id=1234,如果它包含字符串xxxx,以便将请求路由到所需的Web服务代理。 我尝试过表达式expression="#[string.contains['xxxxx']]",但它似乎不起作用。

任何想法?

谢谢。

2 个答案:

答案 0 :(得分:2)

两件事:你需要更换&#34; string&#34;与您要执行的属性。消息属性或有效负载等,即#[payload.contains ...]。

&#34;含有&#34;是java.lang.String上的Java方法,因此您需要使用()而不是[]来使用标准Java方法调用。

工作示例:

<choice doc:name="Choice">
    <when expression="#[payload.contains('xxxx')]">

        <logger level="ERROR" message="YES" />
    </when>
    <otherwise>
        <logger level="ERROR" message="NO" />
    </otherwise>
</choice>

或者直接处理查询参数的入站属性:

答案 1 :(得分:1)

在http入站后使用set-variable将查询参数存储到流变量中。 然后在表达式中使用流量变量。

<set-variable value="#[message.inboundProperties['id']]" variableName="paramId"></set-variable>
<set-variable value="#[message.inboundProperties['type']]" variableName="paramType"></set-variable>


or you can directly use inbound property for comparision.

    <when expression="#[message.inboundProperties['type']== 'XXXX']">