[英]JAXB ignores inner elements
我一直在尝试将自行创建的xml配置文件解编到具有JAXB默认实现的对象中,我忽略了原因,但是跳过了一些内部元素和值,使结果为空。
这是xml文档:
<import-sources>
<domain-objects>
<domain-object class="xxx.xxx.core.business.mapping.Make">
<sources>
<source name="xxxxxx" class="xxx.xxx.core.web.common.model.xxxxxxx.output.MakeDTO">
<uri secured="true" value="xxxxxxxxxxxxxxxxxx"/>
<key name="api_key" mode="in_uri" value="xxxxxxxxxxxx"/>
</source>
</sources>
</domain-object>
</domain-objects>
这是映射的类:
@XmlRootElement(name = "import-sources")
public class ImportSources {
@XmlType
public static class DomainObject {
@XmlType
public static class Source {
@XmlType
public static class URI {
private String value;
private boolean secured;
}
@XmlType
public static class Key {
@XmlEnum
public enum Mode {
@XmlEnumValue("in_uri")
IN_URI,
@XmlEnumValue("in_header")
IN_HEADER
}
private String name;
private String value;
private Mode mode;
}
private String name;
private URI uri;
private Key key;
@XmlElement(name = "class")
private Class outputClass;
}
@XmlAttribute(name = "class")
private Class<? extends Entity> subjectClass;
@XmlElementWrapper
@XmlElement(name = "source")
private Source[] sources;
}
@XmlElementWrapper(name = "domain-objects")
@XmlElement(name = "domain-object")
private DomainObject[] domainObjects;
}
用Unmarshaller.unmarshall()解析文档后,所有Source的字段都为空,如果我替换其内部标记属性,则可以得到其标量字段:
<source>
<name>....</name>
<class>...</class>
</source>
由于冗余,我要避免这种情况。
我终于通过用'@XmlAttribute'注释打开标签或单个标签内的所有字段来解决我的问题。
我建议相应地将字段显式注释为@XmlElement
或@XmlAttribute
。 然后,您的班级将类似于以下内容,并填充字段:
@XmlRootElement(name = "import-sources")
public class ImportSources {
@XmlType
public static class DomainObject {
@XmlType
public static class Source {
@XmlType
public static class URI {
@XmlAttribute //here
private String value;
@XmlAttribute //here
private boolean secured;
}
@XmlType
public static class Key {
@XmlEnum
public enum Mode {
@XmlEnumValue("in_uri")
IN_URI,
@XmlEnumValue("in_header")
IN_HEADER
}
@XmlAttribute //here
private String name;
@XmlAttribute //here
private String value;
@XmlAttribute //here
private Mode mode;
}
@XmlAttribute //here
private String name;
@XmlElement //here
private URI uri;
@XmlElement //here
private Key key;
@XmlElement(name = "class")
private Class outputClass;
}
@XmlAttribute(name = "class")
private Class<? extends Entity> subjectClass;
@XmlElementWrapper
@XmlElement(name = "source")
private Source[] sources;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.