Mule 3.1.2中的代理HTTP POST表单数据

时间:2011-12-16 10:14:11

标签: http mule

我需要将一些帖子数据发送到mule 3.1.2中的另一台服务器。这是我的mule-config文件:

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:scripting="http://www.mulesoft.org/schema/mule/scripting"
xmlns:rmi="http://www.mulesoft.org/schema/mule/rmi" xmlns:stdio="http://www.mulesoft.org/schema/mule/stdio"
xmlns:vm="http://www.mulesoft.org/schema/mule/vm"
xsi:schemaLocation="
      http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/3.1/mule-http.xsd
      http://www.mulesoft.org/schema/mule/scripting http://www.mulesoft.org/schema/mule/scripting/3.1/mule-scripting.xsd
      http://www.mulesoft.org/schema/mule/rmi http://www.mulesoft.org/schema/mule/rmi/3.1/mule-rmi.xsd
      http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/3.1/mule.xsd
      http://www.mulesoft.org/schema/mule/stdio http://www.mulesoft.org/schema/mule/stdio/3.1/mule-stdio.xsd
      http://www.mulesoft.org/schema/mule/vm http://www.mulesoft.org/schema/mule/vm/3.1/mule-vm.xsd">

    <flow name="cxfFlow">
        <!-- Accept a http request from the specific address -->
        <http:inbound-endpoint address="http://localhost:5678/httpHello">
            <byte-array-to-string-transformer/>
            <http:body-to-parameter-map-transformer/>
        </http:inbound-endpoint>

        <!-- This component is just set to show the message accecpted from the request -->
        <scripting:component>
            <scripting:script engine="groovy">
                def msg = "message: $message;\npayload:$payload;\n result:$result".toString()
                println msg
                println "init param:$payload"
                return payload
            </scripting:script>
        </scripting:component>

        <!-- This component is set to parse the parameter passed by the request -->
        <scripting:component>
            <scripting:script engine="groovy">
                    def paramstr = ""
                    for( param in payload){
                        paramstr = paramstr + "&amp;" + param.key+ "=" + param.value
                    }
                println "querystr:$paramstr"
                return paramstr.substring(1)
            </scripting:script>
        </scripting:component>

        <choice>
            <when expression="payload.size()>0" evaluator="groovy">
                <http:outbound-endpoint address="http://localhost:8080/webproj/index.jsp" method="POST" contentType="text/http">
                </http:outbound-endpoint>
            </when>
            <otherwise>
                <scripting:component>
                    <scripting:script engine="groovy">
                        println payload
                        return "no parameter is given!"
                    </scripting:script>
                </scripting:component>
            </otherwise>
        </choice>
    </flow>
</mule>

我向http://localhost:5678/httpHello发帖请求,并发送一些参数。在http://localhost:8080/webproj/index.jsp页面中,我检查了我收到的参数,但参数为空。我想接收index.jsp页面开头发送的参数,如何更改我的mule-config文件?非常感谢!

1 个答案:

答案 0 :(得分:0)

假设入站和出站HTTP内容类型为 application / x-www-form-urlencoded ,这里的配置可以满足您的需求(即记录有效负载并选择不同的响应)基于参数的存在):

<flow name="webFormFlow">
    <!-- Accept a http request from the specific address -->
    <http:inbound-endpoint address="http://localhost:5678/httpHello">
        <http:body-to-parameter-map-transformer />
    </http:inbound-endpoint>

    <!-- This logger is just set to show the message accepted from the request -->
    <logger level="INFO" message="#[payload]" />

    <choice>
        <when expression="payload.size() &gt; 0" evaluator="groovy">
            <http:outbound-endpoint address="http://localhost:8080/webproj/index.jsp"
                method="POST" contentType="application/x-www-form-urlencoded" />
        </when>
        <otherwise>
            <message-properties-transformer>
                <add-message-property key="Content-Type" value="text/plain" />
            </message-properties-transformer>
            <expression-transformer>
                <return-argument expression="no parameter is given!"
                    evaluator="string" />
            </expression-transformer>
        </otherwise>
    </choice>
</flow>