【问题标题】:How do I create a Mule ESB Service to HTTP POST using name/value pairs?如何使用名称/值对创建到 HTTP POST 的 Mule ESB 服务?
【发布时间】:2010-07-20 23:25:22
【问题描述】:

我需要创建一个 mule 服务,它将数据发布到需要名称/值对(不是 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>

【问题讨论】:

    标签: web-services http esb endpoints mule


    【解决方案1】:

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

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

    http-response-to-object-transformer A 转换 HTTP 的转换器 对 Mule 消息的响应。这 有效负载可以是字符串、流或 字节数组。

    http-response-to-string-transformer 转换 HTTP 响应负载 成一个字符串。的标题 响应将保留在 消息。

    object-to-http-request-transformer 这个转换器将创建一个有效的 使用当前消息的 HTTP 请求 以及在 当前消息。

    message-to-http-response-transformer 这个转换器将创建一个有效的 使用当前的 HTTP 响应 消息和任何设置的 HTTP 标头 当前消息。

    object-to-http-request-transformer 可能是你最好的选择;也许您可以创建一个键值对映射,然后将其转换为 URL 编码形式?不确定,但希望这能给 Google 带来一些帮助。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        1) 让variables=&lt;map&gt;&lt;entry&gt;&lt;string&gt;idEvent_Type&lt;/string&gt;&lt;string&gt;1&lt;/string&gt;&lt;/entry&gt;&lt;/map&gt;&amp;options=user:admin

        是作为 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"/>
        

        它可以工作

        【讨论】:

          【解决方案4】:

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

          【讨论】:

          • 您可以发布您的代码,这将有助于了解您的想法
          猜你喜欢
          • 1970-01-01
          • 2013-02-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-24
          • 1970-01-01
          相关资源
          最近更新 更多