gpt4 book ai didi

java - 当 Java 类具有 java.util.Properties 时如何进行 JAXB 转换?

转载 作者:数据小太阳 更新时间:2023-10-29 02:45:26 26 4
gpt4 key购买 nike

我有一个带有“id”字符串字段和 java.util.Properties 字段及其 getter 和 setter 的 Java 类。我如何使用 JAXB 将此类的实例转换为 XML?

非常感谢!

最佳答案

因为 JAXB 显然可以处理 collections , 但不是 maps , 您可以提供自己的 properties Collection View 字段,基于 AbstractCollection .

@XmlType(name="property") class XmlProperty {
@XmlAttribute public String key;
@XmlValue public String value;
}

class XmlProperties extends AbstractCollection<XmlProperty> {
private final Properties props;
public XmlProperties(Properties props) { this.props = props; }
public int size() { return props.size(); }
public Iterator<XmlProperty> iterator() {
return new XmlPropertyIterator(props.entrySet().iterator());
}
public boolean add(XmlProperty xml) {
return !xml.value.equals(props.setProperty(xml.key, xml.value));
}
}

class XmlPropertyIterator implements Iterator<XmlProperty> {
private final Iterator<Map.Entry<Object, Object>> base;
public XmlPropertyIterator(Iterator<Map.Entry<Object, Object>> base) {
this.base = base;
}
public boolean hasNext() { return base.hasNext(); }
public void remove() { base.remove(); }
public XmlProperty next() {
Map.Entry<?, ?> entry = base.next();
XmlProperty xml = new XmlProperty();
xml.key = entry.getKey().toString();
xml.value = entry.getValue().toString();
return xml;
}
}

你可以有一个 Collection<XmlProperty> 类型的 getter返回 XmlProperties包装你的对象 Properties字段。

我再次提供了 an executable demo of this code .它有一个类似于您描述的类,带有一个标识符和一个属性字段。属性字段使用

建模
@XmlElement(name="property")
public Collection<XmlProperty> getProperties() {
return new XmlProperties(props);
}

请注意 Properties 的各个条目集合将是代表您的包含类的元素的直接子元素。如果这不合需要,您可以使用 @XmlElementWrapper 注释以在它们周围提供包装器元素。

将此答案与 my first 进行比较, 它似乎更有效,因为它一次只转换一个映射条目,而且对于是否要将 XML 元素包裹在整个属性集上,它似乎也更灵活。

关于java - 当 Java 类具有 java.util.Properties 时如何进行 JAXB 转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19509130/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com