<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="120"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
だから私はそれをJava次のようなコードに変換したい:
public void setAge(int age){
if(age < 0 || age > 120){
//throw some exception
}
//setting the age as it is a valid value
}
JAXBで可能ですか?
いくつかのWebServiceクライアントスタブジェネレーターがこれを実行しているのを見たことがありますが、おそらくaxis2Webサービスですが確かではありません。
JAXB(JSR-222) 仕様は、ドメインモデルへのフェイルファストロジックの生成をカバーしていません。現在の一般的な方法は、検証ルールを注釈(またはXML)の形式で表現し、それらに対して検証を実行することです。 Bean Validation(JSR-303) これを標準化し、任意のJava EE 6実装。
XJC拡張機能
私は次の拡張機能を自分で試していませんが、 Bean Validation(JSR-303) アノテーションを生成するように見えますXMLスキーマからのドメインモデル表現検証ルール。 XJCは非常に拡張性が高いため、他のプラグインも利用できる場合があります。
JAXB-Facets を試すことができます。クイックスニペット:
class MyClass {
@MinOccurs(1) @MaxOccurs(10)
@Facets(minInclusive=-100, maxInclusive=100)
public List<Integer> value;
@Facets(pattern="[a-z][a-z0-9]{0,4}")
public String name;
}
JAXBでこの検証を実行するための推奨される方法は、マーシャラー応答でスキーマ検証をオンにすることです。アンマーシャラー:
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = schemaFactory.newSchema(...);
ValidationEventHandler valHandler = new ValidationEventHandler() {
public boolean handleEvent(ValidationEvent event) {
...
}
};
marshaller.setSchema(schema);
marshaller.setEventHandler(valHandler);