21
<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 Client スタブ ジェネレーターがこれを実行しているのを見たことがありますが、これはおそらく axis2 Webservice ですが、確かではありません。

4

3 に答える 3

21

JAXB(JSR-222)仕様は、ドメインモデルへのフェイルファストロジックの生成をカバーしていません。現在の一般的な方法は、検証ルールを注釈(またはXML)の形式で表現し、それらに対して検証を実行することです。 Bean Validation(JSR-303)はこれを標準化し、任意のJavaEE6実装で使用できます。

XJC拡張機能

私は次の拡張機能を自分で試していませんが、XMLスキーマからドメインモデル表現検証ルールにBean Validation(JSR-303)アノテーションを生成するように見えます。XJCは非常に拡張性が高いため、他のプラグインも利用できる場合があります。

于 2012-12-12T11:46:27.567 に答える
5

JAXB でこの検証を実行するための推奨される方法は、マーシャラー resp でスキーマ検証をオンにすることです。アンマーシャラー:

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);
于 2012-12-10T09:07:13.747 に答える