2014-04-26 40 views
0

Im尝试使用嵌套元素从java类创建XML。 我不明白我的错误在哪里,我该怎么改变 谢谢!未能封送元素嵌套

我的主类:

String MY_XML = "my path..."; //hier is the path... 

JAXBContext context = JAXBContext.newInstance(MasterDataRM.class); 
Marshaller m = context.createMarshaller(); 
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); 

Master temp = new Master(); 
temp.setTransactionStatus("AlmostOk"); 
m.marshal(temp, new File(MY_XML)); 
m.marshal(temp, System.out); 

我的类将被编组:

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlRootElement 
public class Master { 

    @XmlElement 
    protected Date ResponseDatetime = new Date(); 

    @XmlElement 
    protected Transaction transaction; 


    public void setResponseDatetime(Date date){ 
     this.ResponseDatetime = date; 
    } 

    public Date getDate(){ 
     return ResponseDatetime; 
    } 

    public static class Transaction{ 
     @XmlElement 
     String status = "OK"; 
    } 

    public void setStatus(String status){ 
     transaction.status = status; // This throws the NullPointerException !!! 
    } 

    public String getStatus(){ 
     return transaction.status; 
    } 

回答

0
transaction.status = status; // This throws the NullPointerException !!! 

因为你不初始化内部静态类,记住所有的方法之前初始化实例变量用户它,这就是为什么你越来越NLP

首先创建Transcation对象,并使用外部类对象作为

temp.setTransaction(new Master.Transaction()); 

更新您的类像

@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Master { 

    public Master() { 
    } 

    @XmlElement 
    protected Date ResponseDatetime = new Date(); 

    @XmlElement 
    protected Transaction transaction; 

    public void setResponseDatetime(Date date) { 
     this.ResponseDatetime = date; 
    } 

    public Date getDate() { 
     return ResponseDatetime; 
    } 

    public static class Transaction { 
     @XmlElement 
     String status = "OK"; 
    } 

    public void setStatus(String status) { 
     transaction.status = status; // This throws the NullPointerException !!! 
    } 

    public String getStatus() { 
     return transaction.status; 
    } 

    public Transaction getTransaction() { 
     return transaction; 
    } 

    public void setTransaction(Transaction transaction) { 
     this.transaction = transaction; 
    } 

} 

马什设置它

JAXBContext jaxbContext = JAXBContext.newInstance(Master.class); 
     Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); 
     jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 

     Master temp = new Master(); 
     temp.setTransaction(new Master.Transaction()); 
     temp.setStatus("AlmostOk"); 
     jaxbMarshaller.marshal(temp, new File(MY_XML)); 
     jaxbMarshaller.marshal(temp, System.out);