首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >com.fasterxml.jackson.dataformat.xml.XmlMapper.coercionConfigDefaults()上的NoSuchMethodError

com.fasterxml.jackson.dataformat.xml.XmlMapper.coercionConfigDefaults()上的NoSuchMethodError
EN

Stack Overflow用户
提问于 2021-10-07 11:38:41
回答 1查看 2.3K关注 0票数 5

我正在解析一个XML字符串,以便在Scala中使用Jackson库中的XmlMapper将其转换为JsonNode。我在Databricks笔记本上编写代码,所以编译是在云集群上完成的。在编译我的代码时,我得到了这个错误java.lang.NoSuchMethodError: com.fasterxml.jackson.dataformat.xml.XmlMapper.coercionConfigDefaults()Lcom/fasterxml/jackson/databind/cfg/MutableCoercionConfig;,其中有一百行"at com.databricks.“

我可能忘了导入一些东西,但对我来说这是可以的(如果我错了请告诉我):

代码语言:javascript
运行
复制
import ch.qos.logback.classic._
import com.typesafe.scalalogging._
import com.fasterxml.jackson._
import com.fasterxml.jackson.core._
import com.fasterxml.jackson.databind.{ObjectMapper, JsonNode}
import com.fasterxml.jackson.dataformat.xml._
import com.fasterxml.jackson.module.scala._
import com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper
import java.io._
import java.time.Instant
import java.util.concurrent.TimeUnit
import javax.xml.parsers._
import okhttp3.{Headers, OkHttpClient, Request, Response, RequestBody, FormBody}
import okhttp3.OkHttpClient.Builder._
import org.apache.spark._
import org.xml.sax._

因为我使用的是Databricks,所以没有用于依赖项的SBT文件。相反,我直接在集群上安装了所需的库。下面是我正在使用的:

代码语言:javascript
运行
复制
com.squareup.okhttp:okhttp:2.7.5
com.squareup.okhttp3:okhttp:4.9.0
com.squareup.okhttp3:okhttp:3.14.9
org.scala-lang.modules:scala-swing_3:3.0.0
ch.qos.logback:logback-classic:1.2.6
com.typesafe:scalalogging-slf4j_2.10:1.1.0
cc.spray.json:spray-json_2.9.1:1.0.1
com.fasterxml.jackson.module:jackson-module-scala_3:2.13.0
javax.xml.parsers:jaxp-api:1.4.5
org.xml.sax:2.0.1

导致错误的代码很简单(出自此处:https://www.baeldung.com/jackson-convert-xml-json第5章):

代码语言:javascript
运行
复制
val xmlMapper: XmlMapper = new XmlMapper()
val jsonNode: JsonNode = xmlMapper.readTree(responseBody.getBytes())

其中responseBody是一个包含XML文档的字符串(我之前检查过XML的完整性)。删除这两行代码后,代码运行正常。

我已经阅读了大量的文章或论坛,但我不知道是什么导致了我的问题。有人能帮帮我吗?非常感谢!:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-07 12:01:15

欢迎来到依赖地狱和库中的破坏性更改。

当不同的库引入同一库的不同版本时,通常会发生这种情况。在这种情况下,它是杰克逊。java.lang.NoSuchMethodError: com.fasterxml.jackson.dataformat.xml.XmlMapper.coercionConfigDefaults()Lcom/fasterxml/jackson/databind/cfg/MutableCoercionConfig;的意思是:一个库可能需要Jackson版本,它有这个方法,但在类路径上是version,它还没有这个函数,或者被删除了bcs被弃用或重命名。

在这样的情况下,打印依赖树并检查libs中所需的Jackson版本是很好的。如果可能的话,使用更新版本的requid库。

解决方案:使用libs,它使用Jackson lib的兼容版本。没有其他可能的捷径。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69480470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档