在XPages的Java代码中如何指定Apache FOP配置文件的路径?
XPages集成Apache FOP 2.6 配置文件读取解决方案
问题根因
你用File类读取NSF数据库中WEB-INF下的资源本身就是不可行的:NSF是封装的数据库文件,内部的WEB-INF资源不会作为独立文件存在于服务器操作系统的文件系统中,File类只能读取磁盘上的实际文件,因此必然抛出FileNotFoundException。
你之前用getResourceAsStream无效是两个原因:一是你试图把InputStream转为File使用,二者本身不兼容;二是Apache FOP的FopConfParser本身支持直接传入InputStream,不需要转成File对象。
正确操作步骤
- 放置配置文件
将fop.xconf文件放到NSF的WEB-INF/classes目录下,如果要分类管理也可以新建WEB-INF/classes/conf目录存放,该目录默认在XPages的类加载路径中,不需要额外配置构建路径。 - 修改加载代码
直接通过类加载器获取配置文件的输入流,传入FopConfParser即可,示例代码如下:
// 若文件直接放在WEB-INF/classes下,路径直接写文件名 try (InputStream confStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("fop.xconf")) { FopConfParser parser = new FopConfParser(confStream); // 后续FOP初始化逻辑写在这里 } catch (Exception e) { // 异常处理逻辑 }
如果文件放在WEB-INF/classes/conf目录下,路径修改为conf/fop.xconf即可。
备选方案(不推荐)
如果确实需要用File类加载,可以将fop.xconf放到Domino服务器的实际磁盘路径中,比如Domino数据目录下的自定义目录,代码中写绝对路径读取即可:
// 示例路径为Windows环境下Domino默认数据目录,根据实际环境修改 File xconf = new File("C:/IBM/Domino/data/custom_conf/fop.xconf"); FopConfParser parser = new FopConfParser(xconf);
该方案需要单独维护服务器上的配置文件,多服务器部署时同步成本高,优先推荐第一种方案。
注意事项
- 确保
fop.xconf文件在Domino Designer中被标记为包含在构建中:右键文件选择「属性」,确认勾选「包含在构建中」选项 getResourceAsStream的路径不要以/开头,直接写相对类路径的路径即可- 建议用try-with-resources语法包裹InputStream,使用后自动关闭避免资源泄漏
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

