2012-04-04 48 views
1

我已經爲我的XML創建了一個結構以與JAXB解組一起工作 問題是,Unmarshaller沒有被創建。JAXB:在JAXB中創建Unmarshaller時引發NullPointerException

JAXBContext jc = JAXBContext.newInstance("A Fully qualified class name"); 
Unmarshaller um = jc.createUnmarshaller(); 

java.lang.NullPointerException is being thrown at 
Unmarshaller um = jc.createUnmarshaller(); 

除了java.lang.NullPointerException外,沒有什麼關於statcktrace的,所以無法調試它。 任何人都可以請告訴我如何解決這個在創建一個Unmarshaller?對於JAXB 2.0

對於refernece這是我的分析器類

public class BADFMMessageParser { 
private static JAXBContext jc = null; 
    static { 
     try { 
     jc = JAXBContext.newInstance("My Fully Qualified class name"); 
     } catch (Exception x) { 
     } 
    } 
    public static MyClass parse(String str) throws Exception { 
     Unmarshaller um = jc.createUnmarshaller(); 
     BADFM badfmMessage = (BADFM) um.unmarshal(new StringReader(requestStr)); 
     JAXBElement<? extends MyClass> value = badfmMessage.getMessage(); 
     return value.getValue(); 
    } 
} 

回答

1

我不知道爲什麼你看到一個NPE,但你似乎是正確創建JAXBContext。你可以做以下假設你有一個jaxb.index文件或ObjectFactory類指定包:

JAXBContext jc = JAXBContext.newInstance("your.domain.model.package"); 

否則,你可以在一個或多個類直接創建一個JAXBContext

JAXBContext jc = JAXBContext.newInstance(Foo.class,Bar.class); 

jaxb.index文件示例

引導JAXBContext上生成的模型實施例

Bootstap JAXBContext從類實施例

+0

謝謝,我指定了確切的合格包裝名稱,我通過調試驗證了這一點,請你讓我知道這是什麼jaxb.in​​dex?因爲ObjectFactory是由JAXB自動創建的。 – Pawan 2012-04-04 10:47:29

+0

@ yyyi777 - 我在回答中增加了幾個例子。扔我的部分是在你的帖子中,你有''完全合格的類名'「,我想確保你的意思是''一個完全合格的包名'」。 – 2012-04-04 10:54:05

+0

雅,我試過所有的選項(包括所有的線索和錯誤),包括包名,但我仍然得到這個NPE。 – Pawan 2012-04-04 10:59:22