JAX-WSを使用してjava-first Webサービスを実装していて、@SchemaValidation
を使用してwebMethodパラメータに必要な要素を検証しようとしています。 ここに私の必要な属性を宣言しています。JAX-WS/JAXBでschemaValidationを使用してnull要素を検証する方法
@XmlElement(required=true)
は、私のwsdlスキーマを完全に(minOccurは0ではなく)マップしますが、schemaValidationは渡されたnull要素を検証しません。
@XmlElement(required=true, nillable=false)
public String getClubName() {
return clubName;
}
APIを使用するすべてのクライアントはnull要素を渡すことができます。 JAXBを使ってこれを防ぐ方法はありません。
一方、Beanの検証は次のように動作します。ただし、文字列フィールドではありません
@Column(name = "FOUNDATION_YEAR", nullable = false)
private Integer foundationYear; //schemaValidation validates
@Column(name = "CLUB_NAME", length=100, nullable = false)
private String clubName; //schemaValidation does not validate
文字列値を検証するために、どのようにschemaValidationを使用できますか? 1つの方法は制限を付けることですが、java-first Webサービスを使用するときにはできません。
<xsd:simpleType name="NotEmptyString">
<xsd:restriction base="xsd:string">
<xsd:minLength value="1"/>
</xsd:restriction>
</xsd:simpleType>
関連記事
Validation for generated JAXB Classes (JSR 303/Spring)
How to enable schema validation so that JAXB rejects empty element?