2012-08-22 21 views
4

我們有一個xml文件,我們需要解組(轉換爲Java對象)。現在Java對象是第三方的,我不能註釋它來取消編組。任何想法如何我可以unmarshal沒有註釋。請在下面找到我的代碼片段JAXB unmarshalling無註釋的自定義實體

JAXBContext context; 
     try { 
      context = JAXBContext.newInstance(Abc.class); 
      Unmarshaller unMarshaller = context.createUnmarshaller(); 
      Abc abc= (Abc) unMarshaller.unmarshal(new FileInputStream("C:\\Documents and Settings\\sandeep.nair\\Desktop\\abc.xml")); 
     } catch (JAXBException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     }catch (Exception e){ 

     } 

我收到以下例外。一個沒有參數構造函數(我知道我可以通過添加適配器的註釋來解決這個問題,但我想知道或看到一個示例代碼片段來處理它,而沒有註釋)

同樣我收到另一個消息,因爲接口無法處理JAXB。

com.sun.xml.bind.v2.runtime.IllegalAnnotationsException:5個IllegalAnnotationExceptions的計數 java.sql.Timestamp沒有無參數默認構造函數。在公衆的java.sql.Timestamp com.test.Abc.getSomeTimestamp() 在com.riteaid.entities.customer.Customer com.test 在java.sql.Timestamp中 : 這個問題涉及到以下位置。 Def沒有一個無參數的默認構造函數。 此問題與以下位置有關: at com.test.Def ...

java.sql.Date沒有無參數默認構造函數。 此問題與以下位置有關: at java.sql.Date ... com.test.Ghi是一個接口,而JAXB無法處理接口。 此問題與以下位置有關: ... com.test.Ghi沒有無參數默認構造函數。 這個問題涉及到以下位置: ..

回答

4

注:我是EclipseLink JAXB (MOXy)鉛和JAXB (JSR-222)專家小組的成員。

JAXB是例外配置,所以你只需要添加註釋要覆蓋默認的映射行爲:

提供元數據的標準方法是通過註解。在不能註釋第三方類的情況下,您可能對MOXy的外部映射文檔擴展感興趣。

您可以使用XmlAdapter處理javax.sql.Datejavax.sql.Timestamp類型:

+0

感謝布萊斯。所以你的意思是說我沒有選擇,要麼關於元數據的信息應該註釋或XML應該有屬性?除此之外,沒有其他選擇。我看到一個名爲setAdapter的方法,它接受一個Map。我不知道它會做什麼,或者它能否解決我的問題,以編程方式提供解組時所需的信息。 –

+0

@SandeepNair - 'setAdapter'方法允許你在'Marshaller' /'Unmarshaller'上指定一個'XmlAdapter'的有狀態實例(例子見:http://blog.bdoughan.com/2011/09/混合嵌套和引用-with.html)。 –

+1

非常感謝 –