Mule - студия Anypoint зависает при ответе http, возвращающем pdf - PullRequest
0 голосов
/ 22 мая 2018

Я новичок в студии Mule и Anypoint.

Я интегрирую docusign в mulesoft.У меня странная проблема.

Один из API docusingn '/ v2 / accounts / {accountId} / envelopes / {envelopeId} / documents / {documentId}' вернет документ PDF в качестве ответа.

Однако 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) )

Я пытался добавить объект в преобразователь ByteArray после HTTP.Но это не сработало.

Я хочу, чтобы приведенная ниже команда работала так, как она работает для docusign

 curl -i -v -X GET http://localhost:8081/api/docusign_get > tt.pdf

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Работает.

Оказалось, что проблема с RAML.Файл RAML, который у меня был, имел этот

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

, где в качестве правильного значения

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

не представлял, что Мул так зависит от файла RAML

0 голосов
/ 22 мая 2018

Убедитесь, что ваш 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 для этого, так как среди прочего лучшепри обработке двоичных данных.

...