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 コードでは、上記のように識別子型の "name" プロパティを読み取ろうとすると、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 でもあります。質問は、このような場合、コードや名前などの属性値をどのように読み取るかです。