首页 文章

JAXB Unmarshall创建了一个空对象

提问于
浏览
21

我正在使用JAXB将XML文件解组为对象树 . 根对象是非null的,但即使XML文件中有数据,它的所有成员都是null . 我的对象类是使用wsdls中的Axis2生成的 . 我有ObjectFactory类,jaxb.index类,package.info注释等 .

我的问题与此讨论相同:http://old.nabble.com/AXIS2,-JAXB---Unmarshalling-td26847419.html

首要的是:有没有办法可以让它正确地填充数据?

如果没有,是否有一个很好的替代库,无论是Axis2还是JAXB都可以做同样的事情,但是它们可以很好地相互配合?

4 回答

  • 0

    默认情况下,JAXB会默默地忽略错误 . 我看不出这是默认配置的原因 . 如果出现问题,请尝试添加此代码以引发异常 .

    unmarshaller.setEventHandler(
        new ValidationEventHandler() {
            public boolean handleEvent(ValidationEvent event ) {
                throw new RuntimeException(event.getMessage(),
                                           event.getLinkedException());
            }
    });
    
  • 50

    最近我有类似的问题,并能够修复如下:

    1)修复xsd文件 . 在我的例子中,我确保xsd中的所有复杂元素都使用ref属性引用它们的相应类型,而不是使用type属性声明它们 .

    我已经通过在Eclipse中从XML Schema文件选项创建xml文件来验证我的xsd是否正确 .

    在修复之前,xml文件中的根元素为空 . 修复xsd后,使用一些示例值正确创建了xml .

    2)清理并重新构建在重新生成类之前必须进行清理 .

  • 0

    只是想补充一点,当Axis2与Rampart(SOAP Body加密)和JAXB一起使用时,始终会出现此问题 .

    详情请见:AXIS2-4981

  • 1

    必须编译package-info.java文件 . Eclipse必须找到所有.java文件并进行编译 . 如果从命令行进行编译,并让javac搜索依赖项,它将无法找到它 . 然后当你跑步时你会得到空物 . 看起来像JAXB中的一个错误,至少不能在某处导入该文件 . 并且错误应该告诉您可能编译该文件 .

相关问题