【问题标题】:Unmarshalling Xml using JAXB without annotations returning null java object or class使用 JAXB 解组 Xml,不带注释返回 null java 对象或类
【发布时间】:2015-09-09 07:11:33
【问题描述】:

我正在尝试将 xml 文件读取到 java 对象,但它返回 null
下面是我的代码:

我的 xml:

<?xml version="1.0" encoding="UTF-8"?>
<Cricket>
    <Batting>
        <BattingData>
            <Name>playerBat1</Name>
            <Score>50</Score>
            <Balls>30</Balls>
        </BattingData>
        <BattingData>
            <Name>playerBat2</Name>
            <Score>50</Score>
            <Balls>30</Balls>
        </BattingData>
    </Batting>
    <Bowling>
        <BowlingData>
            <Name>playerBowl1</Name>
            <Wickets>2</Wickets>
            <Balls>24</Balls>
            <Overs>4</Overs>
        </BowlingData>
        <BowlingData>
            <Name>playerBowl2</Name>
            <Wickets>2</Wickets>
            <Balls>24</Balls>
            <Overs>4</Overs>
        </BowlingData>
    </Bowling>
    <Overs>20</Overs>
    <BattingTeam>Team A</BattingTeam>
    <BowlingTeam>Team B</BowlingTeam>
</Cricket>

    package cricket.domain;

    public class Cricket {
    private Batting Batting;
    private Bowling Bowling;
    private Integer Overs;
    private String BattingTeam;
    private String BowlingTeam;

    public Batting getBatting() {
        return Batting;
    }

    public void setBatting(Batting batting) {
        Batting = batting;
    }

    public Bowling getBowling() {
        return Bowling;
    }

    public void setBowling(Bowling bowling) {
        Bowling = bowling;
    }

    public Integer getOvers() {
        return Overs;
    }

    public void setOvers(Integer overs) {
        Overs = overs;
    }

    public String getBattingTeam() {
        return BattingTeam;
    }

    public void setBattingTeam(String battingTeam) {
        BattingTeam = battingTeam;
    }

    public String getBowlingTeam() {
        return BowlingTeam;
    }

    public void setBowlingTeam(String bowlingTeam) {
        BowlingTeam = bowlingTeam;
    }

}

解组

    try {

            JAXBContext context = JAXBContext.newInstance(Cricket.class);
            Unmarshaller m = context.createUnmarshaller();
            InputStream inputStream = null;
            try {
                inputStream = new FileInputStream(
                        "D://Documents//testXml//cricket.xml");
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            Source source = new StreamSource(inputStream);
            JAXBElement<Cricket> cri = m.unmarshal(source, Cricket.class);
            Cricket cricket = cri.getValue();
            System.out.println("object : " + cricket.getBattingTeam().toString());

        } catch (JAXBException e) {
            e.printStackTrace();
        }

当我在没有注释的情况下阅读此内容时,它会返回 null 对象。 我想知道我的xml格式是否正确还是我的代码有问题。

【问题讨论】:

  • 您不想添加 JAXB 注释?
  • 不,我不想添加注释

标签: java xml jaxb jaxbelement


【解决方案1】:

如果您不想指定 jaxb 注释,您可以实现 MessageBodyReader。这适用于 RESTful Web 服务,并且是 JEE7 的一部分。您必须使用@provider 和@consumes 注册

【讨论】:

  • 但我不能用 jaxb 来做,我猜问题在于将 xml 标签映射到 java 对象。但无法 2 找到它。你能帮忙解决这些问题吗
  • 你可以自己写
【解决方案2】:

问题在于 Java 命名约定:变量需要以小写字母开头。如果我使用小写的变量和元素名称,它工作正常。 因此,将 xml 和 java 对象更改为小写时,上述内容可以正常工作。到目前为止,它已解决。 但问题是,如果我的 xml 是静态的并且是以大写字母开头的固定格式。没有注解怎么解析?

【讨论】:

    猜你喜欢
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多