2013-01-17 8 views
6

Ho un campo di testo in cui gli utenti possono immettere un'espressione cron (ad es., 0 */5 * * * *). Quindi lo divido e costruisco un javax.ejb.ScheduleExpression.Convalida javax.ejb.ScheduleExpression

Ora javax.ejb.ScheduleExpression accetta qualsiasi stringa per i diversi elementi senza convalida. Posso ad esempio

scheduleExpression.minute("randomText"); 

ed è accettato. Se poi provi ad usare ScheduleExpression, ovviamente ottengo errori (ad es. Quando provo a creare un timer con esso).

stavo cominciando a scrivere il codice per validare l'input, ma le regole non sono così breve e banale: http://docs.oracle.com/javaee/6/api/javax/ejb/ScheduleExpression.html

C'è un modo semplice (in Java EE) o una libreria che fa già fa il lavoro?

risposta

-2

Se siete in un ambiente Java EE e hanno quarzo a disposizione, forse this question ha la risposta che cercate ...

+1

In realtà no: la sintassi accettata da 'ScheduleExpression' non è la stessa di' CronExpression'. Ad esempio mentre '0 0 5? * L' è valido per 'CronExpression' è ** non ** valido per' ScheduleExpression'. – Matteo

+0

Concordato @Matteo, è una buona idea, ma non è giusto. – rjdkolb

3

Da quando ho incontrato lo stesso problema io ho costruito un'annotazione validatore di fagioli per i timer EJB.

Sentitevi liberi di usarlo. Per tutti coloro che non vogliono o possono utilizzare la convalida del bean, dai un'occhiata alla regex nel file CronField.java per convalidare le tue stringhe manualmente.

Le espressioni regolari sono progettate per "ScheduleExpression" non per "CronExpression", quindi il mio nome scelto potrebbe sembrare un po 'confuso.

Se si dispone di miglioramenti o ottimizzazione, si prega di inviarmi una richiesta di pull o un messaggio.

La sorgente è disponibile in questo repository.

Usage: public class Mese {

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

Alcuni altri esempi sono disponibili nella cartella di prova nello stesso repository.

+0

Ciao, sembra interessante. Potresti per favore aggiungere informazioni sulla licenza? Il tuo codice è open source? Quale licenza? – Matteo

+0

Hey BigAl, vedo che stai permettendo "/" per il campo dell'anno, ma questo si traduce in un espressione di pianificazione non valida. Quindi la regex (^ (((\\ d {4}) | \\ *) (- (\\ d {4}))?,) * ((\\ d {4}) | \\ *) (- (\\ d {4}))?) $) sarebbe quello da usare qui. – user1983983

+0

Grazie per il suggerimento. Ho cambiato questo regex nel repository. Scusa per la risposta in ritardo, ma ero in vacanza. Inoltre, cerco una licenza. Ma non vedo quale di questa enorme quantità di licenze è meglio usare ?! – BigAl

Problemi correlati