Databricks Scala环境使用Jackson XmlMapper转XML报NoSuchMethodError求助
问题根因
该java.lang.NoSuchMethodError错误是典型的Jackson组件版本不兼容导致的:
coercionConfigDefaults()方法是jackson-databind2.12及以上版本才新增的接口- 你仅安装了2.13.0版本的
jackson-module-scala,缺失对应版本的jackson-dataformat-xml、jackson-databind核心包 - Databricks集群默认自带低于2.12版本的Jackson组件,类加载时优先加载了集群自带的旧版
jackson-databind,新版XmlMapper调用旧版Databind中不存在的方法就会抛出该错误
解决步骤
- 先卸载集群中已安装的所有Jackson相关包、重复版本的OkHttp包,避免残留版本冲突
- 安装版本完全统一的Jackson全套组件,推荐和你现有Scala模块版本保持一致用2.13.0,需要安装的包列表如下:
com.fasterxml.jackson.core:jackson-core:2.13.0com.fasterxml.jackson.core:jackson-annotations:2.13.0com.fasterxml.jackson.core:jackson-databind:2.13.0com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.13.0com.fasterxml.jackson.module:jackson-module-scala_3:2.13.0
- 调整集群Spark类加载优先级,避免优先加载集群自带的旧版Jackson,在集群配置页的Spark配置项中添加以下两个参数,修改后重启集群生效:
spark.driver.userClassPathFirst true spark.executor.userClassPathFirst true - 优化初始化代码,避免后续Scala类型序列化异常:
val xmlMapper: XmlMapper = XmlMapper.builder() .addModule(DefaultScalaModule) .build() val jsonNode: JsonNode = xmlMapper.readTree(responseBody) // 直接传入XML字符串即可,无需额外转字节数组
其他依赖冲突修复建议
- 你当前同时安装了2.7.5、3.14.9、4.9.0三个版本的OkHttp,会引发类冲突,根据你的导入语句用的是OkHttp3的API,仅保留
com.squareup.okhttp3:okhttp:4.9.0即可,卸载另外两个版本 - 你安装的
com.typesafe:scalalogging-slf4j_2.10:1.1.0是Scala 2.10版本的包,和你用的Scala 3版本不匹配,需要更换为对应Scala 3版本的scalalogging依赖 - 未使用的依赖如
org.scala-lang.modules:scala-swing_3:3.0.0、cc.spray.json:spray-json_2.9.1:1.0.1建议卸载,减少不必要的冲突风险
内容的提问来源于stack exchange,提问作者Karzyfox
相关产品推荐
相关产品推荐

