2012-08-22 20 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

非常感谢 –