2012-09-26 50 views
2

我很難搞清楚如何在請求正文中使用JSON執行HTTP POST。我的流程樣本如下。我有一個輪詢輪詢POJO的輪詢器,它在輪詢時生成JSON。然後我需要使用這個JSON並在它的正文中使用一個HTTP POST來發佈一個外部REST服務。 Apache HTTP Client的等價物是將字符串實體設置爲我的JSON消息,並將頭部內容類型設置爲application/json。我會怎樣在騾子裏做這個?在此先感謝您的幫助。Mule ESB HTTP帖子與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

你可能只是忘了將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解決方案,如EE版本的object-to-json-transformerDataMapper,所以我建議儘可能使用其中的一種,而不是自定義版本。

+0

謝謝!這工作 – james

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"/>