Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml JAXB解组将创建一个空对象_Xml_Jaxb_Axis2_Unmarshalling - Fatal编程技术网

Xml JAXB解组将创建一个空对象

Xml JAXB解组将创建一个空对象,xml,jaxb,axis2,unmarshalling,Xml,Jaxb,Axis2,Unmarshalling,我正在使用JAXB将XML文件解组到对象树中。根对象是非空的,但是它的所有成员都是空的,即使XML文件中有数据。我的对象类是由wsdls中的Axis2生成的。我有ObjectFactory类、jaxb.index类、package.info注释等 我的问题与本次讨论相同: 首先也是最重要的:我有没有办法让它正确地填充数据 如果没有,Axis2或JAXB是否有一个很好的替代库,可以做同样的事情,但可以很好地相互配合?默认情况下,JAXB会自动忽略错误。我看不出这是默认配置的任何原因。尝试添加此代码

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

我的问题与本次讨论相同:

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


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

默认情况下,JAXB会自动忽略错误。我看不出这是默认配置的任何原因。尝试添加此代码以在出现错误时引发异常

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

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


有关详细信息,请参阅:

最近,我遇到了类似的问题,可以按如下方式进行修复:

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

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

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

2) 清理和重建
必须在重新生成类之前进行清理。

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

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


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

在回答这个问题之前,我们需要一些JAXB类和XML示例。你知道是什么导致了这个问题吗?很好的建议。然而,我要提醒大家不要认为JAXB开发人员不是很好——JAXB的大部分内容都是由Jenkins,Kohsuke Kawaguchi背后的天才编写的。允许使用可插拔事件处理程序可以带来极大的灵活性(以简单性为代价)。@JaysonRaymond-你说得对,我不应该使用这些词。然而,我刚刚发现我浪费了两天的工作,因为JAXB默默地忽略了错误,至少可以说是令人沮丧的。我强烈主张这不应该是默认配置,但我会编辑我回答中的措辞。如果使用
Jaxb2Marshaller
,则它是
解组器。setValidationEventHandler()
。我浪费了很多时间试图找出我的POJO有什么问题。这最后是最大的帮助:)另一种选择是使用DefaultValidationHandler:
unmarshaller.setEventHandler(新的javax.xml.bind.helpers.DefaultValidationEventHandler())