2013-01-17 4 views
6

ユーザーがcron式を入力できるテキストフィールドがあります(例:0 */5 * * * *)。私はそれを分割し、javax.ejb.ScheduleExpressionを構築します。javax.ejb.ScheduleExpressionを検証する

今すぐjavax.ejb.ScheduleExpressionは、検証なしでさまざまな要素の任意の文字列を受け入れます。例えば、

scheduleExpression.minute("randomText"); 

が受け入れられます。 ScheduleExpressionを使用しようとすると、明らかにエラーが発生します(たとえば、タイマーを作成しようとすると)。

私は入力を検証するコードを記述するために始めていたが、ルールはとても短く、些細ではありません。http://docs.oracle.com/javaee/6/api/javax/ejb/ScheduleExpression.html

は、簡単な方法(JavaのEEの場合)、またはすでに仕事をしないライブラリはありますか?

答えて

-2

は、Java EE環境であり、利用できる水晶を持っている、おそらくthis questionはあなたが求める答えを持っている場合...

+1

実際には 'ScheduleExpression'で受け入れられる構文は' CronExpression'と同じではありません。たとえば、 '0 0 5? * L'は 'CronExpression'に有効です**は' ScheduleExpression'には有効ではありません**。 – Matteo

+0

合意@マッテオ、いいアイデアですが、それは正しくありません。 – rjdkolb

3

私はEJBタイマーの豆バリデータアノテーションを建てたのと同じ問題に遭遇したので。

気軽にお使いください。 Beanの検証を欲しくない、または使用することができない人は、ファイルCronField.javaの正規表現を見て、手動で文字列を検証してください。

正規表現は "CronExpression"ではなく "ScheduleExpression"用に設計されているので、私の選択した名前はちょっと混乱しているようです。

改善や最適化がある場合は、私にプルリクエストまたはメッセージを送信してください。

このソースはrepositoryから入手できます。

使用法: パブリッククラス月{

@CheckCronField(CronField.MONTH) 
    public String expression; 
    ... 
} 

は、いくつかのより多くの例は、同じリポジトリ内のテストフォルダ内に用意されています。

+0

こんにちは、興味深いですね。ライセンス情報を追加してください。あなたのコードはオープンソースですか?どのライセンス? – Matteo

+0

ちょっとbigAl、私はあなたが年フィールドの "/"を許可しているが、これは無効なScheduleExpressionになります。正規表現(^((\\ d {4})| \\ *)( - (\\ d {4}))?、)*((\\ d {4})| \\ *) ( - (\\ d {4}))?)$)はここで使用するものです。 – user1983983

+0

ヒントをありがとう。私はレポでこの正規表現を変更しました。遅く返事を申し訳ありませんが、私は休暇中でした。さらに私はライセンスを探しています。しかし、私はこの巨大なライセンスのどれが使い易いのか見ていませんか? – BigAl

関連する問題