是否有可能在 JAXB 中实现以下目标
msg.txt
<Message>
<abc>Hello World</abc>
<cdf>Dummy</cdf>
</Message>
@XmlRootElement(name="message")
class Message{
public String abc;
public String cdf;
}
class Test{
public static void main(String args[]){
JAXBContext jc = JAXBContext.newInstance();
Unmarshaller u = jc.createUnmarshaller();
Message m = (Message) u.unmarshal(new File("C:/msg.txt"));
}
}
现在,我想用 abc = 'Hello World' 和 cdf = 'Hello' 填充 Message 对象。也就是说,abc 字段的子字符串。
我尝试将 XMLJavaAdapter 用于 cdf 字段,但在 Adapter 类的解码方法中我只能将字符串虚拟作为 ValueType,即 cdf 字段的值。
这在 JAXB 中可行吗?
最佳答案
您可以映射 abc
,然后将 cdf
标记为 @XmlTransient
(以防止它被填充为 unmarshal 的一部分
。
@XmlRootElement(name="message")
class Message{
public String abc;
@XmlTransient
public String cdf;
}
然后您可以在解码完成后利用解码事件填充 cdf
字段。以下是执行此操作的 2 种不同方法的链接:
- http://docs.oracle.com/javase/7/docs/api/javax/xml/bind/Unmarshaller.Listener.html
- http://docs.oracle.com/javase/7/docs/api/javax/xml/bind/Unmarshaller.html#unmarshalEventCallback
对您的演示代码的更正
创建 JAXBContext
时需要包含 Message
类:
JAXBContext jc = JAXBContext.newInstance(Message.class);
您还需要确保在 @XmlRootElement
注释中指定的名称与 XML 文档中的根元素名称相匹配。目前,您使用的大小写不匹配。
关于java - 如何将单个标记映射到 JAXB 中的多个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21240994/