Mule - Anypoint工作室冻结http响应返回pdf

时间:2018-05-22 04:18:34

标签: mule mule-studio mule-component anypoint-studio mule-esb

我是Mule和Anypoint工作室的新手。

我将docusign整合到mulesoft中。我有一个奇怪的问题。

其中一个docusingn' / v2 / accounts / {accountId} / envelope / {envelopeId} / documents / {documentId}'将返回pdf doucment作为回复。

然而Mulesoft挂起并且没有正确回应。使用curl命令运行时相同的命令可以正常工作。这里有任何帮助

curl -i -H 'X-DocuSign-Authentication: { "Username":"asdf@asdf.com.au", "Password": "asdf@123", "IntegratorKey":"a59asdfssadfdsc0af6237a37f"}' https://demo.docusign.net/restapi/v2/accounts/c62afb10-455a-4f48-87cd-eb0f0949c9bd/envelopes/c8ed9a1d-dbb6-458f-b674-b8ecff9824b5/documents/combined > /data/t.pdf

以上命令工作正常。但不是这个

 <flow name="docusignGet">
         <flow-ref name="docusignInit" doc:name="docusignInit"/>
         <flow-ref name="docusignCredentials" doc:name="docusignCredentials"/>
         <http:request config-ref="Docusign_HTTP_Request_Configuration" path="/v2/accounts/{accountId}/envelopes/{envelopeId}/documents/{documentId}" method="GET" doc:name="HTTP">
             <http:request-builder>
                 <http:uri-param paramName="accountId" value="#[sessionVars.docuSignAccountId]"/>
                 <http:uri-param paramName="envelopeId" value="7cadba0e-5fc6-4858-b0ea-c6eb13847a22"/>
                 <http:uri-param paramName="documentId" value="0"/>
             </http:request-builder>
         </http:request>
     </flow>

我也将Object添加到Byte-Array转换器。结果相同。

enter image description here

任何帮助

提前致谢

更新

我发现了冻结问题。记录是冻结的根本原因。

所以我禁用了所有日志。现在它没有冻结,但结果却没有获得。这里有任何帮助..

HTTP响应将是这样的(从curl获得)

 < HTTP/1.1 200 OK
 < Cache-Control: no-cache
 < Content-Length: 175512
 < Content-Type: application/pdf
 < X-RateLimit-Reset: 1527051600
 < X-RateLimit-Limit: 1000
 < X-RateLimit-Remaining: 1000
 < X-DocuSign-TraceToken: f0bfe1b3-674d-42f0-a410-1641e6f7cdc7
 < Content-Disposition: file; filename="Testing-_Please_sign_and_report.pdf"; documentid="combined"; filename*=UTF-8''Testing-_Please_sign_and_report.pdf
 < Date: Wed, 23 May 2018 04:04:54 GMT
 < Strict-Transport-Security: max-age=31536000; includeSubDomains
 <
 { [16384 bytes data]
   9  171k    9 16384    0     0   8192      0  0:00:21  0:00:02  0:00:19  6097* schannel: client wants to read 102400 bytes
 * schannel: encrypted data buffer: offset 1360 length 103424
 * schannel: encrypted data got 46871
 * schannel: encrypted data buffer: offset 48231 length 103424
 * schannel: decrypted data length: 409
either its returning a file by parts. What i want is this HTTP connector to act as proxy and return the same payload back to the caller after streaming all the bytes. Let the caller then do what ever it wants (in my case its a Django server).

但是我有错误。

No serializer found for class org.glassfish.grizzly.utils.BufferInputStream and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS) )

我尝试在HTTP之后将Object添加到ByteArray转换器。但它没有用。

我希望以下命令以docusign

的工作方式工作
 curl -i -v -X GET http://localhost:8081/api/docusign_get > tt.pdf

提前致谢

2 个答案:

答案 0 :(得分:1)

检查您的HTTP请求/响应是否正确生成。

在你的log4j2.xml文件中更改,HttpMessageLogger为DEBUG级别

<!-- Http Logger shows wire traffic on DEBUG -->
<AsyncLogger name="org.mule.module.http.internal.HttpMessageLogger" level="DEBUG"/>

您应该能够在控制台输出中看到请求/响应,将其与curl会话进行比较,将-v添加到curl命令以获取请求和响应。

NB我更喜欢使用Fiddler,除此之外,它更擅长处理二进制数据。

答案 1 :(得分:0)

搞定了。

原来是RAML问题。我所拥有的RAML文件就是这个

    /docusign_get:
  get:
    queryParameters: 
    responses: 
      200:
        body: 
          application/json:

正确的是

    /docusign_get:
  get:
    queryParameters: 
    responses: 
      200:
        body: 
          application/pdf:

没想到Mule如此依赖RAML文件