SpringBoot部署JBoss EAP 7.3请求报错:无效文件路径求助
我参与的SpringBoot项目部署在RedHat JBoss EAP 7.3服务器上,服务器启动正常,同事环境可正常运行,但我用PostMan请求/proteccion/actuacion/1接口时触发以下错误:
ERROR [io.undertow.request] (default task-1) UT005023: Exception handling request to /proteccion/actuacion/1: org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.io.IOError: java.io.FileNotFoundException: Invalid file path.
项目pom.xml内容
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.5</version> <relativePath /> <!-- lookup parent from repository --> </parent> <groupId>co.gov.sic.proteccion</groupId> <artifactId>api-proteccion</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>api-proteccion</name> <description>Api Proteccion</description> <properties> <java.version>11</java.version> </properties> <dependencies> <!-- https://mvnrepository.com/artifact/org.docx4j/docx4j --> <dependency> <groupId>org.docx4j</groupId> <artifactId>docx4j</artifactId> <version>6.1.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.json/json --> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20210307</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.1.0</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.14</version> </dependency> <!-- Se evita el uso del tomcat --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-ui</artifactId> <version>1.5.2</version> </dependency> <dependency> <groupId>com.ibm.informix</groupId> <artifactId>jdbc</artifactId> <version>4.50.4.1</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <dependency> <groupId>org.awaitility</groupId> <artifactId>awaitility</artifactId> <version>3.1.2</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.0</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.15</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.11.0</version> </dependency> </dependencies> <build> <finalName>proteccion</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
相关日志信息
09:18:06,637 INFO [io.undertow.servlet] (default task-1) Initializing Spring DispatcherServlet 'dispatcherServlet' 09:18:06,637 INFO [org.springframework.web.servlet.DispatcherServlet] (default task-1) Initializing Servlet 'dispatcherServlet' 09:18:06,641 INFO [org.springframework.web.servlet.DispatcherServlet] (default task-1) Completed initialization in 3 ms 09:18:06,728 INFO [stdout] (default task-1) Hibernate: select actuacion0_.codi_actu as codi_act1_0_0_, actuacion0_.desc_actu as desc_act2_0_0_, actuacion0_.esta_actu as esta_act3_0_0_, actuacion0_.fech_crea as fech_cre4_0_0_, actuacion0_.fech_vige as fech_vig5_0_0_, actuacion0_.noab_actu as noab_act6_0_0_, actuacion0_.nomb_actu as nomb_act7_0_0_, actuacion0_.novi_actu as novi_act8_0_0_, actuacion0_.tipo_actu as tipo_act9_0_0_ from actuacion actuacion0_ where actuacion0_.codi_actu=? 09:18:09,561 ERROR [io.undertow.request] (default task-1) UT005023: Exception handling request to /proteccion/actuacion/1: org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.io.IOError: java.io.FileNotFoundException: Invalid file path
从日志看,Hibernate已成功执行查询获取数据,数据库交互无问题,错误出在后续文件操作环节。结合Invalid file path错误,从以下方向排查:
检查接口文件路径逻辑
查看/proteccion/actuacion/1接口实现代码,确认是否涉及文件读写(pom包含docx4j、poi依赖,大概率有生成文档/导出Excel操作)。核对路径是否为硬编码的本地路径(比如Windows路径在Linux服务器不兼容)、是否依赖未正确配置的环境变量/配置参数,同时检查路径中是否有特殊字符、未转义的分隔符,Linux系统统一用/作为路径分隔符。验证服务器目录权限与存在性
确认代码中指定的目标目录在JBoss服务器上是否存在,检查JBoss运行用户对该目录是否有读写权限,Linux下可通过chmod/chown调整权限。若用相对路径,确认基准目录是否正确(比如相对于JBoss的bin目录还是应用部署目录)。修复依赖冲突
pom中commons-codec存在1.14和1.15两个版本,可能导致依赖冲突,建议保留高版本并移除重复依赖。同时检查docx4j、poi与Spring Boot 2.4.5的兼容性,版本不匹配可能引发文件路径解析异常。核对JBoss配置
检查JBoss的standalone.xml或domain.xml中文件系统、临时目录的配置,确认是否限制了应用的文件访问路径,同时验证jboss.home.dir配置是否正确,避免相对路径解析错误。同步环境配置
对比你的服务器与同事环境的操作系统版本、JBoss配置、环境变量、应用配置文件(如application.properties/application.yml),检查是否存在本地开发时的测试代码(比如硬编码本地路径)未移除,导致部署后路径无效。
内容的提问来源于stack exchange,提问作者Dante666z

