我必须使用JAXB将xml-soap字符串解组为Java对象。 XML包含许多带有填充属性的空标记,例如,消息中的大多数信息都按如下方式中继:
<ID code="123" codeSystem="12.12.12"/>
我对属性感兴趣。
问题: 如果我在解组后检查对象,则所有空标记(如上面的标记)在Java对象中都没有表示(例如,为null)。只有填充的标签(例如123已添加到Java对象中)。 也许这种行为符合xml标准,但我仍然对这些属性感兴趣。 有人能告诉我是否有办法获取属性?
可能的解决方法:通过使用bindings-file将每个元素绑定到适配器,为其赋予每个元素一个默认值(“”)。但我只是成功地为简单类型做了这个。
已使用的版本:我们正在使用Java 1.6中的jaxb实现
非常感谢。
Wybrand。
答案 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元素视为消息的一部分。