【发布时间】:2021-10-20 16:39:55
【问题描述】:
TL;DR:当我从 XML 解组到 POJO 时,我只有 XmlAttributes 映射良好,但是所有 XmlElement 都是空的。
你好!
我有以下问题。这个类是用 JAXB 生成的
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"activity"
})
@XmlRootElement(name = "activityDetails", namespace = "http://lorem.ipsum.com/")
public class ActivityDetails {
@XmlElement(required = true)
protected Activity activity;
@XmlAttribute(name = "schemaVersion", required = true)
protected float schemaVersion;
@XmlAttribute(name = "actionType")
protected ActionTypes actionType;
@XmlSchemaType(name = "dateTime")
protected XMLGregorianCalendar timestamp;
这是一个示例 XML
<activityDetails
actionType="CREATE"
schemaVersion="2.0"
timestamp="2020-01-02T15:31:50.549Z"
xmlns="http://lorem.ipsum.com/">
<activity>
<activityId>
<start>2020-01-01T03:00:00Z</start>
<end>2020-01-02T02:59:00Z</end>
</activityId>
</activity>
</activityDetails>
但是,当这段代码被执行时(请不要评判我,它是遗留代码):
Object xmlClass = Class.forName("com.lorem.ipsum." + className).getConstructor().newInstance();
final JAXBContext jaxbContext = JAXBContext.newInstance(xmlClass.getClass());
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
Object object = unmarshaller.unmarshal(new StringReader(element));
结果“对象”的所有 XmlAttribute 都映射得很好,但没有一个 XmlElement
PS:生成的类中的命名空间是手动添加的,如果我不这样做我有这个异常:
javax.xml.bind.UnmarshalException: unexpected element (uri:"http://lorem.ipsum.com/", local:"activityDetails"). Expected elements are <{}activityDetails>
提前致谢。
更新:如果我设置所有 @XmlElement 命名空间属性,我最终会映射元素,但我必须干预所有类。有没有另一种方法可以在不必修改所有类的所有字段的情况下实现这一点?
【问题讨论】: