带有JSON主体的Mule ESB HTTP帖子

时间:2012-09-26 18:17:37

标签: json http post mule

我很难弄清楚如何在请求体中使用JSON进行HTTP POST。我的流量示例发布在下面。我有一个轮询器轮询POJO,它在轮询时生成一个JSON。然后,我需要使用此JSON并在主体中使用HTTP POST进行外部REST服务。 Apache HTTP Client等效项是将字符串实体设置为我的JSON消息,并将标头内容类型设置为application / json。我怎么在骡子里这样做?在此先感谢您的帮助。

<flow name="flow1" doc:name="flow1">
    <poll frequency="100000">
        <logger message="starting" level="INFO" doc:name="Logger"/>
    </poll>
    <component class="JavaJSONGeneratorClass" doc:name="ReferenceToJavaClass"/>
    <echo-component doc:name="Echo"/>
    <http:outbound-endpoint exchange-pattern="request-response" host="xxx.xxx.xxx.xxx" port="8080" path="path/to/service" doc:name="HTTP"/>
    <logger level="INFO" doc:name="Logger"/>
    <byte-array-to-string-transformer doc:name="Byte Array to String"/>
    <echo-component doc:name="Echo"/>
</flow>

Java类会做这样的事情:

import java.io.Serializable;

import org.mule.api.MuleEventContext;
import org.mule.api.MuleMessage;
import org.mule.api.lifecycle.Callable;
import org.mule.module.client.MuleClient;

public class JSONGenerator implements Callable, Serializable 
{

@Override
public Object onCall(MuleEventContext eventContext) throws Exception 
{

    String json = generateSomeJson(some_parameter);

    return json;
}

}

2 个答案:

答案 0 :(得分:2)

您可能只是忘记将contentType属性设置为http出站端点,该端点应如下所示:

<http:outbound-endpoint exchange-pattern="request-response" host="xxx.xxx.xxx.xxx" port="8080" path="path/to/service" doc:name="HTTP" contentType="application/json"/>

此外,mule还附带了针对Json的OOTB解决方案,例如object-to-json-transformer或 对于EE版​​本DataMapper,所以我建议尽可能使用其中一个而不是自定义版本。

答案 1 :(得分:1)

你错过了http方法,试试这个:

<http:outbound-endpoint exchange-pattern="request-response" host="xxx.xxx.xxx.xxx" port="8080" path="path/to/service" doc:name="HTTP" method="POST"/>