2013-01-17 8 views
6

Mam pole tekstowe, w którym użytkownicy mogą wprowadzić wyrażenie cron (np. 0 */5 * * * *). Następnie podzielę go i zbuduję javax.ejb.ScheduleExpression.Validate a javax.ejb.ScheduleExpression

Teraz javax.ejb.ScheduleExpression przyjmuje każdy Ciąg dla różnych elementów bez sprawdzania poprawności. Mogę na przykład:

scheduleExpression.minute("randomText"); 

i jest akceptowane. Jeśli następnie spróbujesz użyć funkcji ScheduleExpression, oczywiście dostaję błędy (np. Kiedy próbuję utworzyć z nim timer).

zacząłem pisać kod do sprawdzania poprawności danych wejściowych, ale przepisy nie są tak krótkie i banalny: http://docs.oracle.com/javaee/6/api/javax/ejb/ScheduleExpression.html

Czy istnieje prosty sposób (Java EE) lub biblioteka, która ma już spełnia swoje zadanie?

Odpowiedz

-2

Jeśli jesteś w środowisku Java EE i mieć kwarc dostępne, chyba this question ma odpowiedź, której szukasz ...

+1

Faktycznie nie: składnia zaakceptowana przez 'ScheduleExpression' nie jest taka sama jak" CronExpression ". Na przykład podczas gdy '0 0 5? * L' jest ważne dla 'CronExpression' jest ** nie ** poprawne dla' ScheduleExpression'. – Matteo

+0

Uzgodnione @Matteo, to niezły pomysł, ale to nie w porządku. – rjdkolb

3

Odkąd wpadł na ten sam problem mam zbudował adnotacji fasola validator dla timerów EJB.

Zapraszam do korzystania z niego. Dla wszystkich, którzy nie chcą lub mogą używać sprawdzania fasoli, spójrz na wyrażenie w pliku CronField.java, aby ręcznie sprawdzić poprawność łańcuchów.

Wyrażenia regularne są przeznaczone dla wyrażenia "ScheduleExpression", a nie dla "CronExpression", więc moje wybrane imię może wydawać się nieco mylące.

Jeśli masz ulepszenia lub optymalizację, wyślij mi żądanie pobrania lub wiadomość.

Źródło jest dostępne pod tym numerem repository.

Zastosowanie: public class Miesiąc {

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

Więcej przykładów są dostępne w folderze testowym w tym samym repozytorium.

+0

Cześć, wydaje się interesująca. Czy mógłbyś dodać informacje o licencjach? Czy twój kod jest open source? Która licencja? – Matteo

+0

Hej, BigAl, Widzę, że dopuszczasz "/" dla pola roku, ale powoduje to niepoprawną edycję ScheduleExpression. Tak więc wyrażenie regularne (^ ((((\ \ d {4}) | \\ *) (- (\\ d {4}))?,) * ((\\ d {4}) | \\ *) (- (\ \ d {4}))?) $) byłby tutaj używany. – user1983983

+0

Dzięki za podpowiedź. Zmieniłem to wyrażenie regularne w repozytorium. Przepraszam za spóźnioną odpowiedź, ale byłem na wakacjach. Dodatkowo szukam licencji. Ale nie widzę, która z tych ogromnych ilości licencji jest lepsza w użyciu ?! – BigAl

Powiązane problemy