我正在从SAX解析器转换到JAXB -我不知道如何将多个标记/属性值解组为单个(可兼容的) Java POJO。
我有这样的xml文件:
<item validFrom="1950" validUntil="1980">
<description>some text</description>
</item>"validFrom“和"validUntil”值应该组合成一个有效的"MutableRange“POJO (参见下面的定义)。
我需要将其解组到的Java项定义是:
@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
发布于 2013-04-09 23:57:59
注意:我是的负责人,也是专家组的成员。
你可以使用MOXy的@XmlPath扩展来映射这个用例:
@XmlRootElement
@XmlAccessorType(XmlAcccessType.FIELD)
public class Item {
@org.eclipse.persistence.oxm.annotations.XmlPath(".")
private MutableRange validRange;
@XmlElement
private String description;
}有关详细信息的,请访问
发布于 2013-04-10 01:31:05
我会使用像这样简单的东西:
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;
}
}https://stackoverflow.com/questions/15906165
复制相似问题