2012-04-04 46 views
0
<BADFM> 
<Order > 
<Ord OrdQty="1" faft="O"> 
<Bag pakka="1" DSE="C"/> 
</Ord> 
</Order> 
</BADFM> 

=================JAXB:從XML到Java的數據綁定是不是跟這個結構發生

@XmlRootElement(name="BADFM") 
public class Message 
{ 
@XmlElement(name="Order") 
private MobBlock mob; 
public MobBlock getMob() { 
return mob; 
} 
public void setmob(MobBlock mob) { 
this.mob = mob; 
} 
} 

===== =============

public class MobBlock { 
    private Ord ord; 
    @XmlElement(name="Ord") 
        public Ord getOrd() { 
    return ord; 
    } 
    public void setOrd(Ord ord) { 
     this.ord = ord; 
    } 
} 

===================

public class Ord { 
private Bagger Bagger; 
@XmlElement(name="Bag") 
    public Bagger getBagger() { 
    return Bagger; 
    } 
    public void setBagger(Bagger Bagger) { 
       this.Bagger = Bagger; 
    } 
    } 

==== ===================

public class Bagger { 
    private String dsc; 
    @XmlAttribute(name = "DSE") 
    public String getDSE() { 
     return dsc; 
    } 
       public void setDSE(String dsc) { 
    this.dsc = dsc; 
        } 

} 

========================

它返回我空,當我試圖訪問

系統.out.println(m.getMob()getOrd()getBagger()getDSE()。);

請問有誰能告訴我是什麼問題?

這是我的解析器

public class BadFmParser 
{ 
public static AbstractMessageT parse(String Str) throws Exception { 
    private static JAXBContext jc = null; 

      jc = JAXBContext.newInstance("mypackage"); 

     Unmarshaller um = jc.createUnmarshaller(); 
     BADFM badfmMessage = (BADFM) um.unmarshal(new StringReader(Str)); 
     JAXBElement<? extends Message> element = badfmMessage.getMessage(); 
     return element.getValue(); 
} 

我打電話這樣說

Message message = BADFMParser.parse(XMLFile); 

回答

1

你在哪裏得到的 'M'?發佈解碼代碼。

作爲一個方面說明,如果您手動創建類,可能會發生錯誤。執行完整性檢查的最簡單方法是爲XML創建模式(如果您沒有它,則應該出於許多原因)並使用'xjc'(隨JDK提供)生成Java類。然後你可以直接使用這些類到Marshal/Unmarshal,或者只是檢查它們,看看它們與你的不同。

+0

我已經添加了它在我的問題(解析器類) – Pawan 2012-04-04 13:50:22

0

代碼的此位...

BADFM badfmMessage = (BADFM) um.unmarshal(new StringReader(Str)); 
JAXBElement<? extends Message> element = badfmMessage.getMessage(); 

......是有點令人費解。你從Unmarshaller中獲得一個Object,將它轉換爲BADFM,然後從中獲得一個JAXBElement?這個BADFM課程是什麼?

我已經採取了你的消息,MobBlock,Ord和巴格爾班,把他們安置在一個包,然後創造了這個主類:

package jaxb1; 

import java.io.Reader; 
import java.io.StringReader; 
import javax.xml.bind.JAXBContext; 
import javax.xml.bind.Unmarshaller; 

public class Main { 

    public static void main(String[] args) throws Exception { 

     final JAXBContext context = 
      JAXBContext.newInstance(
      Bagger.class, 
      Ord.class, 
      MobBlock.class, 
      Message.class 
      ); 

     final Unmarshaller unmarshaller = context.createUnmarshaller(); 

     final Reader reader = 
      new StringReader("<?xml version=\"1.0\"?>\r\n" 
      + "<BADFM>\r\n" 
      + "<Order >\r\n" 
      + "<Ord OrdQty=\"1\" faft=\"O\">\r\n" 
      + "<Bag pakka=\"1\" DSE=\"C\"/>\r\n" 
      + "</Ord>\r\n" 
      + "</Order>\r\n" 
      + "</BADFM>"); 

     final Object o = unmarshaller.unmarshal(reader); 

     final Message m = (Message)o; 

     System.out.println(m.getMob().getOrd().getBagger().getDSE()); 

    } 

} 

結果工作正常。運行時輸出C