21

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

我的问题和这个讨论一样:http: //old.nabble.com/AXIS2,-JAXB---Unmarshalling-td26847419.html

首先也是最重要的:有没有办法让它正确填充数据?

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

4

5 回答 5

58

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

unmarshaller.setEventHandler(
    new ValidationEventHandler() {
        @Override
        public boolean handleEvent(ValidationEvent event ) {
            throw new RuntimeException(event.getMessage(),
                                       event.getLinkedException());
        }
});
于 2010-07-06T22:06:02.317 回答
1

最近我遇到了类似的问题,可以解决如下:

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

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

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

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

于 2011-06-08T10:16:32.423 回答
0

只是想补充一点,当 Axis2 与 Rampart(SOAP 主体加密)和 JAXB 一起使用时,总是会出现这个问题。

详见:AXIS2-4981

于 2011-03-29T12:22:47.523 回答
0

必须编译 package-info.java 文件。Eclipse 必须找到所有 .java 文件并编译它们。如果从命令行编译,并让 javac 搜索依赖项,它不会找到它。然后,当您运行时,您会得到空对象。似乎 JAXB 中的一个错误至少不能在某处导入该文件。并且错误应该告诉您可以编译该文件。

于 2012-06-19T17:56:10.427 回答
0

当用于创建 Java 代码的 xsd 文件引用了无法访问的 url 时,我遇到了这个问题。

幸运的是,所有这些引用都出现在package-info.java文件中,所以我最终不得不在删除它们的antRun任务之后添加一个任务。xjc

于 2019-07-10T13:24:56.257 回答