プロジェクトをJAXB1.0からJAXB2.1に移行していますが、データ型のマッピングに問題があります。
Ant xjcバインディングコンパイラを使用しており、(たとえば)xs:dateがjava.util.Calendarにマップされるようにグローバルバインディングを正常に構成しました。
Boolean
ただし、が必要なのに対して、を返す生成されたメソッドを取得していboolean
ます。
複合型は次のとおりです。
<xs:element name="usage-auth-rate-charge">
<xs:complexType>
<xs:sequence>
<xs:element name="service-id" type="xs:string"/>
<xs:element name="pricepoint_custom_fields_required" type="xs:boolean" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
そして、生成されたクラスは次のようになります。
public class UsageAuthRateCharge {
........
public Boolean isPricepointCustomFieldsRequired() {
return pricepointCustomFieldsRequired;
}
問題は、ボクシングは機能しますが、提供されたXMLにの値が含まれていない場合pricepoint_custom_fields_required
、クラスのブール値フィールドがfalseではなくnullになることです。したがって、次のようなことを行うとNullPointerExceptionsが発生します。
methodWhichTakesPrimitiveBooleanArg(myUsageAuthRateChargeInstance.isPricepointCustomFieldsRequired());
nullである場合を除いて、渡されたブール値のボックスを解除しようとするためです。
スキーマを変更できず、nullチェックを実行するようにすべてのクライアントコードを調整できません。
私は次のようにbinding.xmlでoptionalProperty属性を設定しました:
<globalBindings optionalProperty="primitive">
仕様では、「属性の値が「プリミティブ」の場合、JAXB1.0の場合と同じようにバインドされます」と記載されています。
しかし、これは明らかに起こっていません。
どうすればこの問題を解決できますか?
アップデート:
これはjaxb2.2.9で修正されました: https ://java.net/jira/browse/JAXB/fixforversion/16850