JAXBを使用して、wsdl検証を処理しています。 wsdlには、次のような列挙があります。
<xs:simpleType name="myEnum">
<xs:annotation>
<xs:documentation>The enums which matter.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="MYENUM_1">
<xs:annotation>
<xs:documentation>MYENUM_1 is the first enum.</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="MYENUM_2">
<xs:annotation>
<xs:documentation>MYENUM_2 is the second enum.</xs:documentation>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
無効な文字列を列挙型として渡すとたとえば、MYENUM_7の場合、予想されるようなエラーをスローする代わりに、値はnullに設定されます。コードを掘り下げると、RuntimeEnumLeafInfoImpl.javaから次のものが見つかります。
package com.sun.xml.bind.v2.model.impl;
//...
public T parse(CharSequence lexical) throws AccessorException, SAXException {
// TODO: error handling
B b = baseXducer.parse(lexical);
if(b==null) {
return null;
}
return parseMap.get(b);
}
parseMapがリストであることは明らかですただし、マップのキー(この場合はbの値)がマップにない場合は、nullを返します。 bがparseMapにない場合、何らかの例外をスローして例外をスローするようにします。
これを修正して独自のJAXBを再コンパイルする以外に、これを解決する他の方法はありますか?
編集:説明のため
JAXB 2.1.9を使用しており、データを非整列化し、検証する必要があります。検証に関するドキュメントで何かを見落としている可能性は確かにあります。
回答:
回答№1は2あなたはJAXBを使用していると言っていますデータを検証しますが、XMLドキュメントを非整列化した後に予期しない結果を記述するだけです。 JAXBでは、少なくとも3つの異なるモードでJAXBを使用できるため、検証とアンマーシャリングは2つの異なる、おそらく独立した問題です。
- 検証しない
- 検証、エラーの報告、ただし非整列化の続行
- エラーを検証して中断する
スキーマを有効にしましたか?アンマーシャラーの検証と、潜在的なエラーを評価していますか? JAXB 1.0または2.0を使用しているかどうかによって、その方法はかなり異なりますが、ドキュメントでその方法を説明する必要があります。