Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAXB:如何解组由多个标记或属性值组成的Java对象_Java_Xml Parsing_Guava_Jaxb2 - Fatal编程技术网

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

JAXB:如何解组由多个标记或属性值组成的Java对象,java,xml-parsing,guava,jaxb2,Java,Xml Parsing,Guava,Jaxb2,我正在从SAX解析器转换到JAXB,无法理解如何将多个标记/属性值解组为单个(可兼容)Java POJO 我有如下xml文件: <item validFrom="1950" validUntil="1980"> <description>some text</description> </item> 我曾尝试使用适配器,但它并没有同时捕获“from”和“until”两个值来创建可变范围实例。我尝试使用@XmlMixed,但没有成功 JAX

我正在从SAX解析器转换到JAXB,无法理解如何将多个标记/属性值解组为单个(可兼容)Java POJO

我有如下xml文件:

<item validFrom="1950" validUntil="1980">
    <description>some text</description>
</item>
我曾尝试使用适配器,但它并没有同时捕获“from”和“until”两个值来创建可变范围实例。我尝试使用
@XmlMixed
,但没有成功

JAXB规定的实现方法是什么


一旦解决了这个问题,我将使用(
XmlAdapter
)扩展
MutableRange
,作为创建番石榴不可变范围对象的包装器,使用
@XmlJavaTypeAdapter(MutableRange.class)
将其映射到
validRange
,注意:
我是专家组的负责人和成员

您可以使用MOXy的
@XmlPath
扩展来映射此用例:

@XmlRootElement
@XmlAccessorType(XmlAcccessType.FIELD)
public class Item {
    @org.eclipse.persistence.oxm.annotations.XmlPath(".")
    private MutableRange validRange;

    @XmlElement
    private String description;
}
了解更多信息


我会用一些简单的方法:

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;
    }
}
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;
    }
}