2014-01-08 73 views
3

在我的Java項目中,我有一個我用一些類生成的jar。我能夠實例是在我的罐子的類的實例:無法獲取JAXBContext?

Alert a = new Alert(); 

但文我試着這樣做:

JAXBContext context = JAXBContext.newInstance(Alert.class); 

我得到運行時異常這樣的:

java.lang.InternalError: Error occured while invoking reflection on target classes. Make sure all referenced classes are on classpath: interface javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter Exception: null

任何想法可能是什麼問題? 謝謝

+0

你可以顯示Alert類嗎?消息很明顯,類路徑中缺少一些類 –

+0

您在什麼環境中運行(即Java SE,OSGi,Java VM等頂部的東西)? –

+0

Alert類看起來是這樣的: @XmlAccessorType(XmlAccessType.FIELD) @XmlType(NAME = 「警報」,propOrder = { 「alertId」, }) 公共類警報 實現Serializable { 一些領域 } 而且我使用Java Eclipse – user3174776

回答

3

這發生在我身上,因爲我已經定義了XmlAdapter實現,它們位於不同的JAR中,而不是在類路徑中。當試圖創建JAXBContext時,它需要JAXB類型使用的這些適配器。現在我明白了這一點,這個信息更有意義,但仍然非常神祕。 XmlJavaTypeAdapter是註釋接口,代碼無法調用註釋的value()方法,因爲它返回的是類型路徑中未定義的類類型,即Class<? extends XmlAdapter>

如果你看看拋出異常的代碼,這是不可能的:

public Class More ...getClassValue(Annotation a, String name) { 
    try { 
    return (Class)a.annotationType().getMethod(name).invoke(a); 
    } catch (IllegalAccessException e) { 
    // impossible 
    throw new IllegalAccessError(e.getMessage()); 
    } catch (InvocationTargetException e) { 
    // impossible 
    throw new InternalError(e.getMessage()); 
    } catch (NoSuchMethodException e) { 
    throw new NoSuchMethodError(e.getMessage()); 
    } 
} 

將是很好,如果異常的原因並沒有失去。