我正在使用JAXB将XML文件解组为对象树。根对象是非null的,但即使XML文件中有数据,它的所有成员都是null。我的对象类是使用wsdls中的Axis2生成的。我有ObjectFactory类,jaxb.index类,package.info注释等。
我的问题与此讨论相同:http://old.nabble.com/AXIS2,-JAXB---Unmarshalling-td26847419.html
首先:有没有办法可以让它正确地填充数据?
如果没有,对于Axis2或JAXB是否有一个很好的替代库可以做同样的事情但是它们可以很好地相互配合?
答案 0 :(得分:52)
默认情况下,JAXB会默默地忽略错误。我看不出这是默认配置的原因。如果出现问题,请尝试添加此代码以引发异常。
unmarshaller.setEventHandler(
new ValidationEventHandler() {
public boolean handleEvent(ValidationEvent event ) {
throw new RuntimeException(event.getMessage(),
event.getLinkedException());
}
});
答案 1 :(得分:1)
最近我遇到了类似的问题,并且能够解决如下问题:
1)修复xsd文件。 在我的例子中,我已经确保xsd中的所有复杂元素都使用ref属性引用它们的相应类型,而不是使用type属性声明它们。
我已经通过在Eclipse中从XML Schema文件选项创建xml文件来验证我的xsd是否正确。
在修复之前,xml文件中的根元素为空。修复xsd后,使用一些样本值正确创建了xml。
2)清洁并重建 在重新生成类之前必须进行清理。
答案 2 :(得分:0)
只是想补充一点,当Axis2与Rampart(SOAP Body加密)和JAXB一起使用时,总会出现此问题。
详见:AXIS2-4981
答案 3 :(得分:0)
必须编译package-info.java文件。 Eclipse必须找到所有.java文件并进行编译。如果从命令行编译,并让javac搜索依赖项,它将找不到它。然后当你跑步时你会得到空物。看起来像JAXB中的一个错误,至少不能在某处导入该文件。并且错误应该告诉您可能编译该文件。
答案 4 :(得分:0)
当用于创建Java代码的xsd文件引用了无法访问的网址时,我遇到了这个问题。
幸运的是,所有这些引用都出现在package-info.java
文件中,因此我最终不得不在删除它们的antRun
任务之后添加一个xjc
任务。