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

XML字符串转Java对象报错求助:NoSuchMethodError问题排查

XML转Java对象时出现NoSuchMethodError问题排查

问题场景

已有对应POJO类,使用Jackson XmlMapper实现XML到Java对象的转换,代码如下:

ObjectMapper xmlMapper = new XmlMapper();
Request value = xmlMapper.readValue(xmlContent, Request.class);
System.out.println(xmlMapper.writeValueAsString(value));

错误信息

运行时抛出如下错误:

Exception in thread "main" java.lang.NoSuchMethodError:
'com.fasterxml.jackson.core.io.ContentReference
com.fasterxml.jackson.dataformat.xml.XmlFactory._createContentReference(java.lang.Object)'
at
com.fasterxml.jackson.dataformat.xml.XmlFactory.createParser(XmlFactory.java:492)
at
com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3677)
at
com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3645)
at
com.clover.myspringbootapp.example.XmlToJsonObject.main(XmlToJsonObject.java:25)

待转换XML示例

<XMLRequest>
    <RequestAction>Modify</RequestAction>
    <MerchantDetail>
        <CloverID>10</CloverID>
        <MerchantNumber>111111</MerchantNumber>
        <Platform>N</Platform>
        <DBAName>Test_306</DBAName>
        <LegalName>Test_306</LegalName>
        <Address1>Fountain road</Address1>
        <City>Vista</City>
        <State>Boulder</State>
        <Zip>1518580</Zip>
        <Country>US</Country>
        <PhoneNumber>1234567890</PhoneNumber>
        <Email>test@gmail.com</Email>
        <Contact>Test_306</Contact>
        <Reseller>DevelopersUS</Reseller>
        <MCCCode>7394</MCCCode>
        <Currency>USD</Currency>
        <TAEncryptionType>0001</TAEncryptionType>
        <GroupID>10001</GroupID>
        <SupportPhone>1234567890</SupportPhone>
        <ABAAccountNumber>000000000000000</ABAAccountNumber>
        <DDAAccountNumber>***********3770</DDAAccountNumber>
    </MerchantDetail>
    <CardTypes>
        <CardType CardName = "MASTER">
            <SENUMBER />
            <AlphaID>1234</AlphaID>
            <ServiceType>F</ServiceType>
        </CardType>
        <CardType CardName = "VISA">
            <SENUMBER />
            <AlphaID />
            <ServiceType />
        </CardType>
    </CardTypes>
</XMLRequest>

问题原因及解决方案

核心原因

该错误是Jackson核心组件与XML数据格式组件版本不兼容导致的:XmlFactory调用的_createContentReference方法在当前依赖的jackson-core包中不存在,说明jackson-core、jackson-databind、jackson-dataformat-xml三个核心包的版本不一致。

解决步骤

  1. 统一Jackson依赖版本
    确保项目中jackson-core、jackson-databind、jackson-dataformat-xml的版本完全相同。例如在Maven中,可通过dependencyManagement统一管理版本:

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.fasterxml.jackson</groupId>
                <artifactId>jackson-bom</artifactId>
                <version>2.15.2</version> <!-- 选择稳定版本,如2.15.x或最新稳定版 -->
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
  2. 排查依赖冲突
    执行依赖分析命令(Maven:mvn dependency:tree,Gradle:./gradlew dependencies),检查是否有旧版本Jackson包被间接引入,若有则在对应依赖中排除冲突版本:

    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-xml</artifactId>
        <exclusions>
            <exclusion>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
  3. 确保XML解析依赖完整
    jackson-dataformat-xml依赖woodstox-core作为XML解析器,需确保该依赖正常引入(Maven通常会自动传递引入,若缺失可手动添加):

    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-xml</artifactId>
    </dependency>
    <dependency>
        <groupId>org.codehaus.woodstox</groupId>
        <artifactId>woodstox-core-asl</artifactId>
    </dependency>
    

POJO类配置注意事项

为保证XML与Java对象正确映射,POJO类需添加Jackson XML注解:

  • 根类Request添加@XmlRootElement(name = "XMLRequest")
  • 字段与XML节点对应添加@XmlElement(name = "XXX")
  • CardType类中的CardName是XML属性,需添加@XmlAttribute(name = "CardName")
  • 空节点(如<SENUMBER />)需确保POJO字段允许为null(基本类型建议用包装类,如Integer代替int)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 00:42:20