You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSO2 API Manager 3.2 中介转换application/pdf二进制为base64问题求助

问题根因

你遇到的报错是由于网关默认使用JSON解析器处理返回的PDF二进制流导致,具体错误点如下:

  • 自定义响应序列未在执行初始指定当前消息类型为application/pdf,网关直接调用默认JSON解析器读取PDF流,触发解析异常
  • 使用$body/*读取二进制内容的方式错误:BinaryRelayBuilder解析后的二进制流不会存储在消息体XML节点中,而是存储在axis2域的MESSAGE_BINARY内置属性里
  • 序列末尾将content-type设置为application/pdf,和你需要输出JSON响应的需求冲突
解决方案

步骤1:确认axis2配置生效

你已经添加的application/pdf对应的messageBuilder和messageFormatter配置是正确的,确认配置是写在<APIM_HOME>/repository/conf/axis2/axis2.xml文件中,修改后重启网关生效。

步骤2:替换为正确的响应中介序列

完整的响应序列配置如下:

<sequence xmlns="http://ws.apache.org/ns/synapse" name="response.xml">
    <!-- 最开头指定当前消息为PDF二进制,强制网关使用BinaryRelayBuilder处理流,避免JSON解析错误 -->
    <property name="messageType" scope="axis2" type="STRING" value="application/pdf" />
    <property name="contentType" scope="axis2" type="STRING" value="application/pdf" />
    
    <!-- 读取二进制内容并编码为base64 -->
    <property name="pdfBase64" expression="base64Encode(get-property('axis2', 'MESSAGE_BINARY'))" scope="default" />
    
    <!-- 可选:打印编码结果便于调试 -->
    <log level="custom">
        <property name="EncodedPDF" expression="get-property('pdfBase64')" />
    </log>
    
    <!-- 构造你需要的JSON响应格式 -->
    <payloadFactory media-type="json">
        <format>
            {
                "data": {
                    "file": "$1"
                }
            }
        </format>
        <args>
            <arg evaluator="xml" expression="get-property('pdfBase64')" />
        </args>
    </payloadFactory>
    
    <!-- 最后指定响应类型为JSON -->
    <property name="messageType" scope="axis2" type="STRING" value="application/json" />
    <property name="contentType" scope="axis2" type="STRING" value="application/json" />
</sequence>

步骤3:附加注意事项

  • 如果处理的PDF文件体积较大,需要在axis2.xml中调整二进制缓冲阈值,避免流被截断:找到<transportReceiver name="http" class="org.apache.synapse.transport.passthru.PassThroughHttpListener">节点,添加参数<parameter name="bufferSize">10485760</parameter>(示例为10M,可根据实际PDF大小调整),HTTPS对应的transportReceiver节点也需要同步添加。
  • 配置完成后需要在API的「运行配置」页中,将响应中介序列选择为你自定义的序列,重新发布API生效。

内容的提问来源于stack exchange,提问作者Amit Chaurasia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 03:15:03