欢迎光临
我们一直在努力

Java: Unable to create working directory /tmp/org.apache.cxf.jaxws.endpoint.dynamic

 `JaxWsDynamicClientFactory` 在动态调用 WebService 时,无法在 `/tmp` 下创建临时目录导致的,根源是 权限不足或目录不存在。

直接解决:指定一个可写的临时目录

在启动命令里加上 `-Djava.io.tmpdir` 参数,指定一个确定可写的目录,比如:
java -Djava.io.tmpdir=/var/tmp -jar your-app.jar

或者通过代码在创建客户端前设置:
System.setProperty("java.io.tmpdir", "/var/tmp");

原因分析

CXF 动态客户端会从 `java.io.tmpdir`(默认 `/tmp`)下创建子目录来存放动态编译的源代码。如果该目录不存在、没有写权限,或磁盘已满,就会报这个错。常见场景是 Linux 上 `/tmp` 被系统清理、权限过严,或程序以非 root 用户运行且无写权限。

检查与备选方案

– 确认 `/tmp` 存在且可写:执行 `ls -ld /tmp`,确保当前用户有写权限。权限不足时可用 `chmod 1777 /tmp` 修正(`sticky` 位是标准配置)。
– 手动创建缺失的目录:有时问题只是目录不存在,手动建一个即可,但更推荐直接改用 `-Djava.io.tmpdir` 指定其他路径。
– 磁盘空间:用 `df -h /tmp` 检查是否满盘。
– 容器环境特别提醒:如果是 Docker/K8s,默认 `/tmp` 可能为只读或空间受限,建议挂载一个可写卷,并把 `java.io.tmpdir` 指向它。

版本兼容性提示(潜在风险)

如果配置临时目录后仍报错,还需要检查 CXF 与 JDK 版本是否匹配。JDK 17+ 默认移除了 JAXB,老版 CXF(3.4.x 及以下)会因缺少 JAXB 依赖而失败,推荐升级 CXF 到 4.0.0+ 以原生支持 Jakarta EE 9+ 命名空间。

赞(0)
未经允许不得转载:171主机测评 » Java: Unable to create working directory /tmp/org.apache.cxf.jaxws.endpoint.dynamic
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址