2016-03-14 81 views
1

編碼我有騾子流類似於下面處理接受在ESB騾子

<?xml version="1.0" encoding="UTF-8"?> 
<mule xmlns:metadata="http://www.mulesoft.org/schema/mule/metadata" xmlns:scripting="http://www.mulesoft.org/schema/mule/scripting" xmlns:json="http://www.mulesoft.org/schema/mule/json" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" 
    xmlns:spring="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd 
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd 
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd 
http://www.mulesoft.org/schema/mule/json http://www.mulesoft.org/schema/mule/json/current/mule-json.xsd 
http://www.mulesoft.org/schema/mule/scripting http://www.mulesoft.org/schema/mule/scripting/current/mule-scripting.xsd"> 
    <http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8111" doc:name="HTTP Listener Configuration"/> 
    <http:request-config name="HTTP_Request_Configuration" host="api.bonanza.com" port="443" doc:name="HTTP Request Configuration" protocol="HTTPS"/> 
    <flow name="bonanza_fetchtoken_ceFlow"> 
     <http:listener config-ref="HTTP_Listener_Configuration" path="/add" allowedMethods="GET,POST" doc:name="HTTP" /> 
     <flow-ref name="bonanza_addfixedpriceitemSub_Flow" doc:name="bonanza_addfixedpriceitemSub_Flow"/> 
    </flow> 
    <sub-flow name="bonanza_addfixedpriceitemSub_Flow"> 
     <message-properties-transformer doc:name="Message Properties"> 
      <add-message-property key="X-BONANZLE-API-DEV-NAME" value="t******I"/> 
      <add-message-property key="X-BONANZLE-API-CERT-NAME" value="l*****F"/> 
     </message-properties-transformer> 
     <set-property propertyName="Content-Type" value="application/x-www-form-urlencoded" doc:name="Property"/> 
     <set-property propertyName="Accept" value="application/json" doc:name="Property"/> 
     <set-variable variableName="sim" value="{requesterCredentials:{bonanzleAuthToken:nWn1a9l3NT}}" doc:name="Variable"/> 
     <scripting:transformer returnClass="java.util.Map" doc:name="Groovy"> 
      <scripting:script engine="Groovy"><![CDATA[import groovy.json.JsonBuilder 
m = [addFixedPriceItemRequest:'{requesterCredentials:{bonanzleAuthToken:n*****T}}'] 
builder = new JsonBuilder() 
builder(m) 

]]></scripting:script> 
     </scripting:transformer> 

     <logger message="payload :#[payload]" level="INFO" doc:name="Logger"/> 
     <http:request config-ref="HTTP_Request_Configuration" path="/api_requests/secure_request" method="POST" followRedirects="true" parseResponse="false" doc:name="HTTP"> 
      <http:success-status-code-validator values="0..599"/> 
     </http:request> 
     <logger message="resp :#[message.payloadAs(java.lang.String)]" level="INFO" doc:name="Logger"/> 
    </sub-flow> 
</mule> 

我能夠使用郵遞員工具接收來自API成功的響應。我嘗試使用上面的ESB mule流模擬相同的東西。但API會引發一個錯誤,如下所示。因此我使用requestb.in來比較esb mule和郵遞員工具的請求。我發現只有HTTP標題存在差異。

從郵遞員RAW身體requestb.in -

addFixedPriceItemRequest={requesterCredentials:{bonanzleAuthToken:nW*****NT}} 

RAW身體ESB騾子requestb.in

addFixedPriceItemRequest=%7BrequesterCredentials%3A%7BbonanzleAuthToken%3AnW****NT%7D%7D 

看來,我有作爲發送內容之前序列化JSON的內容鍵入 - application/x-www-form-urlencoded。我發現這個信息在這mule doc

我如何序列化json有效載荷在groovy和發送地圖有效載荷?

API錯誤響應

{ 
    "ack": "Failure", 
    "version": "1.0beta", 
    "timestamp": "2016-03-15T07:18:11.000Z", 
    "errorMessage": { 
    "message": "Cannot determine what type of request you are making. Often this can be the result of data that has not been escaped before being passed to the API. If you are passing data with quotation marks or other special characters, you should translate it to JSON, then escape it, before sending it over the API." 
    } 
} 

請讓我知道任何額外的信息。提前致謝!

+0

很難理解您面臨的問題。是在發送'http:request'中的出站請求,還是形成對來自'http:listener'的請求的響應。 –

+0

當你接受'gzip'編碼時,你爲什麼要以String形式提取響應有效載荷? –

+0

@CharuKhurana你是否提到了在記錄器節點中解析響應?我剛剛刪除它。同樣的迴應。 – Simbu

回答

1

該流程通過在HTTP組件中的查詢參數中添加鍵值對而得到了解決。 flowVariable requestpayload具有json字符串。所以我的Mule http組件如下所示。

<http:request config-ref="HTTP_Request_Configuration" path="/api_requests/secure_request" method="POST" followRedirects="true" parseResponse="false" doc:name="HTTP"> 
      <http:request-builder> 
       <http:query-param paramName="addFixedPriceItemRequest" value="#[flowVars.requestpayload]"/> 
      </http:request-builder> 
      <http:success-status-code-validator values="0..599"/> 
     </http:request>