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

升级CXF与Spring后出现NoSuchFieldError:REFLECTION问题求助

排查思路

1. 定位REFLECTION字段的归属类

反编译jaxws-rt-2.1.4.jar中的com.sun.xml.ws.model.RuntimeModeler类,找到第729行调用的REFLECTION字段所属的全限定类名。该字段大概率属于JAXB相关核心类(如com.sun.xml.bind.api.JAXBRIContext或javax.xml.bind.JAXBContext),明确归属后才能针对性排查版本匹配问题。

2. 解决jaxws-rt与CXF的依赖冲突

jaxws-rt-2.1.4是老旧版本,而CXF 3.5.x自身已集成jaxws相关实现,两者共存会导致类版本冲突:

  • 用依赖分析命令排查依赖树:Maven执行mvn dependency:tree,Gradle执行gradle dependencies,找出所有jaxws相关依赖(如jaxws-rt、jaxws-api)的版本和来源。
  • 移除项目中显式引入的jaxws-rt-2.1.4.jar,改用CXF自带的jaxws实现,避免旧版本组件干扰。

3. 统一JAXB版本与依赖匹配

jaxws-rt-2.1.4仅兼容JAXB 2.1.x系列,当前使用的JAXB 2.2.11与其不匹配:

  • 若保留jaxws-rt-2.1.4,需将所有JAXB依赖(jaxb-core、jaxb-impl、jaxb-api)降级至2.1.x版本,同时验证是否与CXF 3.5.x、Spring 5.3.27兼容。
  • 若优先适配CXF 3.5.x,需彻底移除旧jaxws组件,统一使用CXF提供的JAXB相关依赖,确保版本链一致。

4. 排查类加载器导致的版本冲突

NoSuchFieldError可能由类加载器加载了不同版本的类导致:

  • 打印目标类的加载来源,确认实际生效的jar包:
Class<?> targetClass = Class.forName("REFLECTION字段所属的类全名");
System.out.println(targetClass.getProtectionDomain().getCodeSource().getLocation());
  • 检查应用服务器(如Tomcat)的全局lib目录,若存在冲突的jaxb/jaxws包,需移除或调整类加载优先级,确保项目本地依赖优先加载。

5. 验证Adobe Forms Service客户端兼容性

错误触发于Adobe Forms Service的客户端调用,需确认客户端代码与当前框架版本的兼容性:

  • 使用CXF 3.5.x提供的wsdl2java工具重新生成Forms Service的客户端代码,替换旧代码,确保客户端与CXF版本匹配。
  • 查阅Adobe官方文档,确认Forms Service支持的jaxws/JAXB版本范围,验证其与Spring 5.3.27、CXF 3.5.x的兼容性。

内容的提问来源于stack exchange,提问作者Rajan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 12:50:09