是否有可能在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 =&#39; Hello World&#39;和cdf =&#39;你好&#39;。就是abc字段的子字符串。
我尝试将XMLJavaAdapter用于cdf字段,但在Adapter类的unmarshal方法中,我只能将字符串虚拟为ValueType,即cdf字段的值。
这可以在JAXB中实现吗?
答案 0 :(得分:1)
您可以映射abc
,然后将cdf
标记为@XmlTransient
(以防止它作为unmarshal
的一部分进行填充。
@XmlRootElement(name="message")
class Message{
public String abc;
@XmlTransient
public String cdf;
}
然后,您可以在解组完成后利用unmarshal事件填充cdf
字段。以下是执行此操作的两种不同方法的链接:
在创建Message
:
JAXBContext
课程
JAXBContext jc = JAXBContext.newInstance(Message.class);
此外,您需要确保在@XmlRootElement
注释中指定的名称与XML文档中的根元素名称相匹配。目前,您使用的案例不匹配。
答案 1 :(得分:0)
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Message{
private String abc;
private String cdf;
public Message(){}
public void setAbc(String abc){
this.abc = abc;
this.cdf = /*substring of abc*/ ;
}
public String getAbc(){
return abc;
}
public void setCdf(String cdf){
//
}
public void getCdf(){
return cdf;
}
}