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

XSL:FO转PDF中介器报“no object DCH for MIME type application/pdf”错误如何解决

XSL:FO转PDF中介器报错解决方案

错误根因

本次报错由两个核心问题触发:

  1. 代理服务中中介器执行后的日志配置尝试序列化完整二进制PDF payload,LogMediator在将二进制内容转为字符串过程中触发DataHandler读取异常
  2. 中介器中DataHandler构造逻辑错误,ByteArrayOutputStream无法直接作为DataHandler的数据源,JAF框架找不到对应application/pdf类型的内容处理器

具体修复步骤

1. 修改代理服务配置

删除中介器后输出完整payload的日志节点,避免触发二进制内容序列化:

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="PDFTest"
       startOnLoad="true"
       statistics="disable"
       trace="disable"
       transports="http,https">
   <target>
      <inSequence>
         <log level="custom">
            <property expression="/" name="input"/>
         </log>
         <class name="com.example.PDFMediator"/>
         <!-- 替换原有的输出完整output的日志节点 -->
         <log level="custom">
            <property name="status" value="PDF转换完成"/>
         </log>
         <send/>
      </inSequence>
   </target>
   <description/>
</proxy>

2. 调整中介器核心逻辑

修改DataHandler构造方式、清空原有SOAP Body内容、关闭不需要的MTOM配置,核心修改点如下:

// 转换完成后原有逻辑修改
trace.info("PDF转换完成,大小:" + out.size() + "字节");

// 1. 清空SOAP Body原有内容
body.removeChildren();

// 2. 正确构造DataHandler,使用ByteArrayDataSource封装二进制内容
ByteArrayDataSource dataSource = new ByteArrayDataSource(out.toByteArray(), MimeConstants.MIME_PDF);
DataHandler dataHandler = new DataHandler(dataSource);
OMFactory fac = OMAbstractFactory.getOMFactory();
OMText textData = fac.createOMText(dataHandler, true);
body.addChild(textData);

// 3. 删除原有的ENABLE_MTOM配置,新增关闭SOAP信封配置
// 删除context.setProperty(Constants.Configuration.ENABLE_MTOM, Constants.VALUE_TRUE); 这行
context.setProperty(org.apache.axis2.Constants.Configuration.DISABLE_SOAP, Boolean.TRUE);
context.setProperty(Constants.Configuration.MESSAGE_TYPE, MimeConstants.MIME_PDF);
context.setProperty(Constants.Configuration.CONTENT_TYPE, MimeConstants.MIME_PDF);
context.setProperty(org.apache.axis2.Constants.Configuration.CONTENT_TYPE, MimeConstants.MIME_PDF);

3. 依赖校验

确认环境中已引入javax.mail相关依赖,保证ByteArrayDataSource类可用,如未引入可添加对应依赖包到WSO2的/repository/components/lib目录下。


内容的提问来源于stack exchange,提问作者René de Vries

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:54:07