Найти в Дзене
Integrator

WSO2 API возвращает файлы

В ходе работы необходимо было, чтобы API вернул файл. WSO2 же пытался вернуть base64 content файла.

Помогло следующее - payload factory c заключением контента в тег ns:binary.

медиатор Script c setBinary(true)

<outSequence>

<property xmlns:m="http://www.1c.ru/docmng" name="filename" expression="//m:GetFileResponse/m:return/m:Name" scope="default" type="STRING"/>

<property xmlns:m="http://www.1c.ru/docmng" name="ext" expression="//m:GetFileResponse/m:return/m:Extension" scope="default" type="STRING"/>

<property xmlns:m="http://www.1c.ru/docmng" name="data" expression="//m:GetFileResponse/m:return/m:BinaryData" scope="default" type="STRING"/>

<header name="Content-Disposition" scope="transport" expression="fn:concat('attachment; filename=',get-property('filename'),'.',get-property('ext'))"/>

<header name="Content-Type" scope="transport" value="application/pdf"/>

<payloadFactory media-type="xml">

<format>

<ns:binary xmlns:ns="http://ws.apache.org/commons/ns/payload">$1</ns:binary>

</format>

<args>

<arg evaluator="xml" expression="get-property('data')"/>

</args>

</payloadFactory>

<script language="js">var binaryNode = mc.getEnvelope().getBody().getFirstElement().getFirstOMChild(); binaryNode.setBinary(true);</script>

<property name="messageType" value="application/pdf" scope="axis2"/>

<respond/>

</outSequence>