【word解析】Java文件解析问题排查:无法找到OMML2MML.xsl的IO异常解析

一、问题描述

因业务需求,目前正在实现一项需求,即将一份试卷的内容提取出来,由非结构化到结构化的转换。在解析数学公式的时候把OMML转换latex的时候,需要使用OMML2MML.xsl,在代码执行的时候加载OMML2MML.xsl的时候遇到了找不到文件而报如下异常:java.lang.RuntimeException: java.io.IOException: 无法找到OMML2MML.xsl文件,于是写下来分享给大家。

备注:当时是在本地开发环境是正常的,发布到Linux环境上就出现上面的错误。

二、问题分析

源码信息:

java 复制代码
    private String getMmlContent(File ommlFile) throws TransformerException, IOException {
        // 从类路径加载XSL文件
        ClassLoader classLoader = getClass().getClassLoader();
        InputStream xslStream = classLoader.getResourceAsStream("config/OMML2MML.xsl");
        if (xslStream == null) {
            throw new IOException("无法找到OMML2MML.xsl文件");
        }

        TransformerFactory factory = TransformerFactory.newInstance();
        Transformer transformer = factory.newTransformer(new StreamSource(xslStream));
        transformer.setOutputProperty("encoding", "UTF-8");

        String fileName = generateFileName("mml_input_");
        String outputPath = dirPath + fileName;

        transformer.transform(new StreamSource(ommlFile.getAbsolutePath()), new StreamResult(outputPath));
        System.out.println("转换完成,输出文件为 UTF-8 编码。");

        File mmlFile = new File(outputPath);
        String content = FileUtils.readFileToString(mmlFile, StandardCharsets.UTF_8);
        ommlFile.deleteOnExit();
        mmlFile.deleteOnExit();

        return content;
    }
  1. 刚开始遇到这个问题,就在想本地可以正常加载文件,而Linux环境上却加载不了文件,是不是文件的位置放的不正确呢?于是在对外层的那个工程里面再增加一份OMML2MML.XSL(文件位置:\src\main\resources\config\OMML2MML.XSL),打包重新上传到Linux环境,发现一样的错误。
  2. 接着尝试检查下jar包中是不是没有把OMML2MML.XSL文件打包进去呢,于是到jar中去检查,发现OMML2MML.XSL也是存在的,说明打包没有问题,Pom文件的配置也不需要修改。
  3. 接下来有些懵逼了,这到底是哪里出错了呢?那改成绝对路径试试吧,虽然不好,为了定位问题还是尝试下吧,直接指向绝对路径总不会出错了吧,结果发布到Linux还是不行呢。。。。
  4. 这下子彻底被干懵逼了,没有思路了。。。。,呆呆的对着电脑,看着代码,突然看到了一处差异,代码中写的 "config/OMML2MML.xsl",而实际的文件则是OMML2MML.XSL,文件后缀不一样,难到和这个有关??抱着试一试的态度,改一下试试吧,反正也没有别的思路。代码改一下,然后重新打包发布到Linux环境上,结果一看还真的是可以啦!!

三、解决方法

解决方案:"config/OMML2MML.xsl" 改为 "config/OMML2MML.XSL"

相关推荐
zww894911121 分钟前
匿名树洞系统开发实战:从需求分析到部署指南
java·eclipse
行百里er26 分钟前
Gateway 上别硬塞 MVC:DeferredImportSelector 看菜下锅
spring boot·后端·开源
黑马程序员毕设2 小时前
基于Java的医院药品管理系统的优化设计与实现
java·开发语言·spring boot·小程序·架构·课程设计·毕设
木井巳2 小时前
【BFS/DFS 解决 FloodFill 算法】太平洋大西洋水流问题
java·算法·leetcode·深度优先·广度优先·宽度优先·推荐算法
白山编程大哥2 小时前
Java 集合算法:从排序、查找到底层原理的实战指南
java·python·算法
_Twink1e2 小时前
openJiuwen 实训营 Day 1 · WorkSwarm 入门教程
开发语言·c++·openjiuwen
devpotato2 小时前
缓存与数据库更新顺序不一致问题
java·数据库·redis
问天_观心2 小时前
大模型微调学习(一)
开发语言·人工智能·学习·语言模型·github
阿里嘎多学长2 小时前
2026-09-03 GitHub 热点项目精选
开发语言·程序员·github·代码托管
xcl09252 小时前
酒馆预约系统开发实战:从需求分析到上线全流程指南
java·spring boot·需求分析