【问题标题】:JAXB unmarshalling Custom entities without annotationJAXB 解组没有注释的自定义实体
【发布时间】:2012-08-22 19:08:37
【问题描述】:

我们有一个需要解组的 xml 文件(转换为 Java 对象)。现在 Java 对象是第三方的,我无法对其进行注释以进行解组。关于如何在没有注释的情况下解组的任何想法。请在下面找到我的代码 sn-p

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){

        }

我收到以下异常。一个为无参数构造函数(我知道我可以通过为适配器添加注释来解决这个问题,但我想知道或查看一个示例 sn-p 以在没有注释的情况下处理它)

同样,我收到另一条关于接口无法由 JAXB 处理的消息。

com.sun.xml.bind.v2.runtime.IllegalAnnotationsException:5 个 IllegalAnnotationExceptions 计数 java.sql.Timestamp 没有无参数默认构造函数。 此问题与以下位置有关: 在 java.sql.Timestamp 在公共 java.sql.Timestamp com.test.Abc.getSomeTimestamp() 在 com.riteaid.entities.customer.Customer com.test.Def 没有无参数默认构造函数。 此问题与以下位置有关: 在 com.test.Def...

java.sql.Date 没有无参数的默认构造函数。 此问题与以下位置有关: 在 java.sql.Date ... com.test.Ghi 是一个接口,JAXB 不能处理接口。 此问题与以下位置有关: ... com.test.Ghi 没有无参数默认构造函数。 此问题与以下位置有关: ..

【问题讨论】:

    标签: jaxb jaxb2 jaxb2-basics


    【解决方案1】:

    注意:我是EclipseLink JAXB (MOXy) 领导,也是JAXB (JSR-222) 专家组的成员。

    JAXB 是通过异常配置的,因此您只需在要覆盖默认映射行为的地方添加注释:

    提供元数据的标准方式是通过注释。在您无法注释的情况下,例如 3rd 方类,那么您可能会对 MOXy 的外部映射文档扩展感兴趣。

    您可以使用XmlAdapter 来处理javax.sql.Datejavax.sql.Timestamp 类型:

    【讨论】:

    • 谢谢布莱斯。所以你的意思是说我没有选择,关于元数据的信息应该被注释还是xml应该有属性?除此之外没有其他选择。我看到了一个名为 setAdapter 的方法,它接受一个 Map。我想知道它是做什么的,或者它是否能解决我的问题,在解组时以编程方式提供所需的信息。
    • @SandeepNair - setAdapter 方法允许您在 Marshaller/Unmarshaller 上指定 XmlAdapter 的有状态实例(示例参见:blog.bdoughan.com/2011/09/…)。跨度>
    猜你喜欢
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 2015-12-15
    相关资源
    最近更新 更多