2017-05-30 8 views
0

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」プロパティ(前者は私にとってより論理的です)。

+0

これは本当に 'ConstraintValidator'の定義方法に依存します。 「@Target({ElementType.TYPE})」や「Field Level」の 'ConstraintValidator'を' @Target({ElementType.FIELD}) 'で注釈を付けることで、「クラスレベル」の「ConstraintValidator」を定義することができます –

答えて

関連する問題