2013-01-17 15 views
6

Tôi có trường văn bản nơi người dùng có thể nhập biểu thức cron (ví dụ: 0 */5 * * * *). Sau đó tôi chia nó và xây dựng một javax.ejb.ScheduleExpression.Xác thực javax.ejb.ScheduleExpression

Bây giờ javax.ejb.ScheduleExpression chấp nhận bất kỳ Chuỗi nào cho các phần tử khác nhau mà không xác thực. Tôi có thể ví dụ:

scheduleExpression.minute("randomText"); 

và được chấp nhận. Nếu sau đó cố gắng sử dụng ScheduleExpression tôi rõ ràng nhận được lỗi (ví dụ, khi tôi cố gắng tạo ra một bộ đếm thời gian với nó).

Tôi đã bắt đầu viết mã để xác nhận đầu vào, nhưng các quy tắc không phải là quá ngắn và tầm thường: http://docs.oracle.com/javaee/6/api/javax/ejb/ScheduleExpression.html

Có một cách đơn giản (trong Java EE) hoặc một thư viện nào đã thực hiện công việc?

Trả lời

-2

Nếu bạn đang ở trong một môi trường Java EE và có thạch anh có sẵn, có lẽ this question có câu trả lời mà bạn tìm kiếm ...

+1

Thực ra không: cú pháp được chấp nhận bởi 'ScheduleExpression' không giống với' CronExpression'. Ví dụ trong khi '0 0 5? * L' hợp lệ cho 'CronExpression' là ** không ** hợp lệ cho' ScheduleExpression'. – Matteo

+0

Đồng ý @Matteo, đó là một ý tưởng hay, nhưng không đúng. – rjdkolb

3

Kể từ khi tôi chạy vào cùng một vấn đề tôi đã đóng một chú thích đậu validator cho timers EJB.

Hãy sử dụng nó. Đối với tất cả những người không muốn hoặc có thể sử dụng xác thực bean, hãy xem regex trong tệp CronField.java để xác thực chuỗi của bạn theo cách thủ công.

Cụm từ thông dụng được thiết kế cho "ScheduleExpression" không dành cho "CronExpression" vì vậy tên được chọn của tôi có vẻ hơi khó hiểu.

Nếu bạn có cải tiến hoặc tối ưu hóa, vui lòng gửi cho tôi yêu cầu kéo hoặc tin nhắn.

Nguồn có sẵn tại số repository này.

Cách sử dụng: public class Tháng {

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

Một số ví dụ khác có sẵn trong thư mục kiểm tra trong kho cùng.

+0

Xin chào, có vẻ thú vị. Bạn có thể vui lòng thêm thông tin cấp phép không? Mã nguồn của bạn có phải là mã nguồn mở không? Giấy phép nào? – Matteo

+0

Hey BigAl, tôi thấy rằng bạn đang cho phép "/" cho trường năm, nhưng điều này dẫn đến một ScheduleExpression không hợp lệ. Vì vậy, regex (^ (((((\\ d {4}) | \\ *) (- (\\ d {4}))?,) * ((\\ d {4}) | \\ *) (- (\\ d {4}))?) $) sẽ là người dùng ở đây. – user1983983

+0

Cảm ơn gợi ý. Tôi đã thay đổi regex này trong repo. Xin lỗi vì trả lời muộn, nhưng tôi đã đi nghỉ. Ngoài ra tôi tìm kiếm một giấy phép. Nhưng tôi không thấy một trong số lượng lớn giấy phép này là tốt hơn để sử dụng ?! – BigAl