2013-01-17 40 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

同意@Matteo,這是一個好主意,但它是不正確的。 – rjdkolb

3

因爲我遇到了我所建的EJB計時器的Bean驗證註解同樣的問題。

隨意使用它。對於所有不想或可以使用bean驗證的人,請查看文件CronField.java中的正則表達式來手動驗證您的字符串。

正則表達式是專爲「ScheduleExpression」不爲「CronExpression」所以我選擇的名稱似乎有點混亂。

如果你有改進或優化,請給我一個拉請求或消息。

源可在此repository

用法: 公共類月份{

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

一些更多的例子在同一倉庫在測試文件夾中。

+0

嗨,看起來很有趣。你能否請添加許可信息?你的代碼是否是開源的?哪個許可證? – Matteo

+0

嘿BigAl,我看到你允許「/」爲年份字段,但是這會導致無效的ScheduleExpression。所以正則表達式(^((((\\ d {4})| \\ *)( - (\\ d {4}))?,)*((\\ d {4})| \\ *) ( - (\\ d {4}))?)$)將在這裏使用。 – user1983983

+0

感謝您的提示。我在回購中改變了這個正則表達式。對不起,我遲到了,但我正在度假。另外我正在尋找一個許可證。但是我看不出哪一個這麼多的牌照更好用?! – BigAl