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

使用JAXB获取XML子节点CODE值时返回null,应如何排查问题?

错误原因

你的实体类结构没有匹配XML的嵌套层级:CODE、DESCRIPTION等节点不是根节点<tpDoc>的直接子元素,它的完整层级路径为tpDoc > PAYLOAD > CHARGE_CODE > CODE。你直接在根节点对应的实体类中声明CODE作为直接子元素,JAXB找不到对应节点,所以返回null。

修复方案

按照XML的层级定义对应的实体类即可:

1. 定义CHARGE_CODE节点对应的实体类

@XmlAccessorType(XmlAccessType.FIELD)
public class ChargeCode {
    @XmlElement(name = "CODE")
    private String code;
    @XmlElement(name = "DESCRIPTION")
    private String description;
    @XmlElement(name = "SALES_ACCOUNT")
    private String salesAccount;
    @XmlElement(name = "COSTS_ACCOUNT")
    private String costsAccount;

    public String getCode() {
        return code;
    }
    // 按需补充其他字段的getter、setter
}

2. 定义PAYLOAD节点对应的实体类

@XmlAccessorType(XmlAccessType.FIELD)
public class Payload {
    @XmlElement(name = "CHARGE_CODE")
    private ChargeCode chargeCode;
    // 后续如果有多个CHARGE_CODE,将上面字段改为 List<ChargeCode> 即可

    public ChargeCode getChargeCode() {
        return chargeCode;
    }
}

3. 定义根节点tpDoc对应的实体类

@XmlRootElement(name = "tpDoc")
@XmlAccessorType(XmlAccessType.FIELD)
public class TpDoc {
    @XmlElement(name = "PAYLOAD")
    private Payload payload;

    public Payload getPayload() {
        return payload;
    }
}

4. 修改反序列化逻辑

public class XMLtoJava {
    public static void main(String[] args) throws JAXBException {
        File inputFile = new File("C:\\Users\\Inbar\\OneDrive\\OneDrive - alfacloud.co.il\\MSF\\Developments\\OrdertoCashThirdPartyProcess(B2B)\\MSF XMLFiles\\ChargeCodesSmall.XML");
        JAXBContext jaxbContext = JAXBContext.newInstance(TpDoc.class);
        Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
        TpDoc tpDoc = (TpDoc) unmarshaller.unmarshal(inputFile);
        System.out.println(tpDoc.getPayload().getChargeCode().getCode());
    }
}

修改后运行即可正常输出TEST。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:48:01