2016-03-14 85 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>