jaxb umarshalling问题:无法获取空xml标记的属性

时间:2011-07-02 12:19:34

标签: java jaxb unmarshalling

我必须使用JAXB将xml-soap字符串解组为Java对象。 XML包含许多带有填充属性的空标记,例如,消息中的大多数信息都按如下方式中继:

<ID code="123" codeSystem="12.12.12"/>

我对属性感兴趣。

问题: 如果我在解组后检查对象,则所有空标记(如上面的标记)在Java对象中都没有表示(例如,为null)。只有填充的标签(例如123已添加到Java对象中)。 也许这种行为符合xml标准,但我仍然对这些属性感兴趣。 有人能告诉我是否有办法获取属性?

可能的解决方法:通过使用bindings-file将每个元素绑定到适配器,为其赋予每个元素一个默认值(“”)。但我只是成功地为简单类型做了这个。

已使用的版本:我们正在使用Java 1.6中的jaxb实现

非常感谢。

Wybrand。

2 个答案:

答案 0 :(得分:1)

由于XML属性没有默认值,我将在afterUnmarshal方法中实现初始化代码。在那里,您可以检查您感兴趣的所有属性,并将它们设置为有效的非空值。

有关如何使用afterUnmarshal的详细信息,请参阅:How can I have JAXB call a method after it has completed unmarshalling an XML file into an object?

答案 1 :(得分:1)

我解决了这个问题。但问题不在于JAXB。

将xml发送给umarshall的派对在元素声明中添加了“null namespace”。

Xml片段:

    

id元素的声明中包含xmlns =“”。 (我认为这是一个错误)并且根标签具有声明xmlns:ns3 =“urn:hl7-org:v3”

由于这个原因(我认为),jaxb unmarshaller没有将id元素视为消息的一部分。