如何使用名称/值对为HTTP POST创建Mule ESB服务?

时间:2010-07-20 23:25:22

标签: web-services http esb endpoints mule

我需要创建一个mule服务,将数据POST到需要名称/值对(而不是xml)的Web服务,然后处理来自该服务的XML响应。我找不到关于如何为http POST准备有效负载的好例子。

有人可以提供一些见解或示例吗?

到目前为止我所知道的是(我不知道是否需要'PathToTransformerClass'):

    <service name="myService">
        <inbound>
            <vm:inbound-endpoint path="myService.request" synchronous="true">
                <custom-transformer class="PathToTransformerClass" />
            </vm:inbound-endpoint>
        </inbound>
        <outbound>
            <pass-through-router>
                <http:outbound-endpoint address="URIofWebServiceToPostTo" method="POST" synchronous="true">
                    <response-transformers>
                        <custom-transformer class="PathToClassToProcessTheResponse" />
                    </response-transformers>
                </http:outbound-endpoint>
            </pass-through-router>
        </outbound>
    </service>

4 个答案:

答案 0 :(得分:4)

以下内容可能会有所帮助:http://comments.gmane.org/gmane.comp.java.mule.user/29342

我也找不到任何示例,但看起来内置的HTTP transformers

  

http-response-to-object-transformer A   转换HTTP的转换器   回应骡子消息。该   payload可以是String,stream或   字节数组。

     

HTTP的响应到字符串变压器     转换HTTP响应有效负载   成一个字符串。的标题   回复将保留在   消息。

     

对象至http请求变压器     这个变压器会创建一个有效的   使用当前消息的HTTP请求   和任何HTTP标头设置   当前消息。

     

消息到HTTP的响应变压器     这个变压器会创建一个有效的   使用当前的HTTP响应   消息和任何HTTP标头设置   当前的消息。

对象到http-request-transformer可能是你最好的选择;也许你可以创建一个键值对的映射,然后将其转换为URL编码形式?不确定,但希望这会给你一些谷歌的东西。

答案 1 :(得分:0)

您是否在询问如何使用XML并创建通过HTTP发送的密钥值对?为此,您可以使用XLST转换器,在XSL中将方法输出设置为文本。

答案 2 :(得分:0)

1)让variables=<map><entry><string>idEvent_Type</string><string>1</string></entry></map>&options=user:admin

将Map主体发布为HTTP请求。

2)URL对其进行编码(例如,使用http://meyerweb.com/eric/tools/dencoder/

产生:

variables%3D%3Cmap%3E%3Centry%3E%3Cstring%3EidEvent_Type%3C%2Fstring%3E%3Cstring%3E1%3C%2Fstring%3E%3C%2Fentry%3E%3C%2Fmap%3E%26options%3Duser%3Aadmin

3)然后创建一个Mule set-payload转换器:

<set-payload value="variables%3D%3Cmap%3E%3Centry%3E%3Cstring%3EidEvent_Type%3C%2Fstring%3E%3Cstring%3E1%3C%2Fstring%3E%3C%2Fentry%3E%3C%2Fmap%3E%26options%3Duser%3Aadmin
" doc:name="Set playload"/>

4)然后创建一个Mule HTTP端点:

<http:outbound-endpoint exchange-pattern="request-response" host="..." port="..." path="..." user="..." password="..." contentType="application/x-www-form-urlencoded" doc:name="POSTHTTPRequest"/>

并且有效

答案 3 :(得分:0)

也许U可以尝试使用Object-to-http-request-transformer,因为此转换器将使用当前接收的消息和当前消息上设置的任何HTTP头创建有效的HTTP请求。 从来没有尝试过,但这是我阅读你的查询后我能想到的唯一变形...希望它有效..:D