JAXBを利用したSOAPサービスへのインメモリAPIゲートウェイを実装しています。スキーマ要素の1つは「選択」であり、選択ブロックにはいくつかの要素があります。javax.validationを使用して選択可能なBeanを検証する
クライアントネームスペースで生成されたJAXBクラスをミラーリングしようとしています。この「選択」シナリオでは、いくつかのプロパティを持つBeanクラスがありますが、そのうちの1つだけがnullではありません。
ValidatorFactoryとValidatorとともに、javax.validationの@NotNullアノテーションを使用しようとしています。しかし、「選択」シナリオはこれをもう少し複雑にします。私は、カスタムConstraintValidatorを参照するカスタム注釈とともに、カスタムConstraintValidatorを呼び出すと推測しています。たとえば、ここに私の構造の一部に似ているいくつかの偽のコードが
です:
public class InquireRandomInformationRequest {
@NotNull(message ="subscriberSelector cannot be null")
@Valid
private SubscriberSelector subscriberSelector; // required
private SelectorMode mode; // optional
...
}
public class SubscriberSelector {
// Choice 1
private String billingAccountNumber; // \d{8,9,12,13}; required
private MarketInfo billingMarket; // optional
// Choice 2
private String subscriberNumber; // \d{10}; required
private ValidationCriteria validationCriteria; // optional
private BillingAccountInformation billingAccountInformation; // optional
private MemoProductType memoProductType; // optional
// Choice 3
private String unifiedBillingAccountNumber; // [0-9A-Za-z]{13}; required
...
}
私はサブオブジェクトを検証するためのバリデータのために、「subscriberSelector」財産上の@Valid注釈が必要であることを理解して。それを過ぎて、私は選択問題を処理するために何をする必要があるのかよく分かりません。
私の例に合うように、 "billingAccountNumber"、 "subscriberNumber"、または "unifiedBillingAccountNumber"のいずれか1つだけがnullでない必要があります(ただし、特定のシーケンスの最初のnull以外のものを取り除くことで妥協できます)。各「選択肢グループ」では、他のプロパティーはオプションですが、その特定の選択肢グループが選択されている場合(セレクター・プロパティーがNULLでない、言い換えれば)、別のプロパティーが「必須」になる可能性があります。
私はHibernate Validatorのドキュメントを見てきましたが、この状況でどのように適用するか正確にはわかりません。
カスタムアノテーションとカスタムConstraintValidatorを定義する場合、参照されるアノテーションはどこですか?クラス(「SubscriberSelector」など)または「subscriberSelector」プロパティ(前者は私にとってより論理的です)。
これは本当に 'ConstraintValidator'の定義方法に依存します。 「@Target({ElementType.TYPE})」や「Field Level」の 'ConstraintValidator'を' @Target({ElementType.FIELD}) 'で注釈を付けることで、「クラスレベル」の「ConstraintValidator」を定義することができます –