我正在尝试使用 JAXWS 和 wsimport 使用 Web 服务。WSIMPORT 工具生成了所有必需的类,我可以毫无问题地调用该服务。
但是,我注意到在响应包含具有有效属性值的 nil 元素的情况下,JAXWS 无法解组它并抛出 NullPointerException。我使用 SOAP UI 来帮助调试,这就是我发现的。响应返回以下 XML(摘录):
<externalIdentifiers>
<identifierType code="2" name="Passport" xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
<identifierValue/>
<issuingCountry xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
</externalIdentifiers>
在我的 Java 代码中,当尝试读取上述标识符类型的“名称”属性时,它会引发 NPE:
if(id.getIdentifierType() == null)
{
System.out.println("NULL");
}
System.out.println("Identifier Type: " + id.getIdentifierType().getName());
输出:
NULL
Exception in thread "main" java.lang.NullPointerException
对我来说,这看起来是一个合理的响应,因为在响应中,identifierType 设置为 xsi:nil="true"。根据 W3C,这也是完全有效的 XML。问题是,在这种情况下如何读取代码和名称等属性值?