首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JAXB:如何解组由多个标记或属性值组成的Java对象

JAXB:如何解组由多个标记或属性值组成的Java对象
EN

Stack Overflow用户
提问于 2013-04-09 23:32:01
回答 2查看 566关注 0票数 2

我正在从SAX解析器转换到JAXB -我不知道如何将多个标记/属性值解组为单个(可兼容的) Java POJO。

我有这样的xml文件:

代码语言:javascript
复制
<item validFrom="1950" validUntil="1980">
    <description>some text</description>
</item>

"validFrom“和"validUntil”值应该组合成一个有效的"MutableRange“POJO (参见下面的定义)。

我需要将其解组到的Java项定义是:

代码语言:javascript
复制
@XmlRootElement
@XmlAccessorType(XmlAcccessType.FIELD)
public class Item {
    // ??? need help mapping this to be composed from "validFrom", "validUntil" attributes
    private MutableRange validRange;

    @XmlElement
    private String description;
}

// assume all other boilerplate code exists
public class MutableRange {
    private int lowerBound;
    private int upperBound;
}

我尝试过使用适配器,但它不能同时捕获两个值:"from“和"until”值,以便我创建MutableRange实例。我尝试使用@XmlMixed,但没有成功。

JAXB规定的完成此任务的方法是什么?

一旦解决了这个问题,我将使用(XmlAdapter)扩展MutableRange作为包装器来创建guava的不可变的Range对象,并使用@XmlJavaTypeAdapter(MutableRange.class)将其映射到validRange

EN

回答 2

Stack Overflow用户

发布于 2013-04-09 23:57:59

注意:我是的负责人,也是专家组的成员。

你可以使用MOXy的@XmlPath扩展来映射这个用例:

代码语言:javascript
复制
@XmlRootElement
@XmlAccessorType(XmlAcccessType.FIELD)
public class Item {
    @org.eclipse.persistence.oxm.annotations.XmlPath(".")
    private MutableRange validRange;

    @XmlElement
    private String description;
}

有关详细信息的,请访问

  • http://blog.bdoughan.com/2010/07/xpath-based-mapping.html
  • http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html
票数 1
EN

Stack Overflow用户

发布于 2013-04-10 01:31:05

我会使用像这样简单的东西:

代码语言:javascript
复制
public interface MutableRange() {
    public int getLowerBound();
    public int getUpperBound();
    public void setLowerBound(int lowerBound);
    public void setUpperBound(int upperBound);
}

@XmlRootElement(name = "item")
@XmlAccessorType(XmlAccessType.NONE)
public class Item {
    @XmlAttribute(name = "validFrom")
    private int validFrom;
    @XmlAttribute(name = "validUntil")
    private int validUntil;
    @XmlElement(name = "description")
    private String description;

    public MutableRange getValidRange() {
        return new MutableRange() {
            public int getLowerBound() { return validFrom; }
            public int getUpperBound() { return validUntil; }
            public void setLowerBound(int lowerBound) { validFrom = lowerBound; }
            public void setUpperBound(int upperBound) { validUntil = upperBound; }
        }
    }

    public String getDescription() {
       return description;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15906165

复制
相关文章

相似问题

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