2011-12-21 25 views
7

Tôi không thấy cách kiểm tra chuẩn nếu tất cả Tùy chọn được cung cấp trong đầu vào Chuỗi [] đến thư viện CLI của apache. Đó là - các tùy chọn của tôi là tất cả REUIRED tại dòng lệnh, nếu không, tôi muốn một ngoại lệ để ném.Làm thế nào để đảm bảo rằng tất cả các đối số được cung cấp trong Apache Commons CLI?

Im cố gắng sau như một cách giải quyết, nhưng nhận được một ngoại lệ Nullpointer trong câu lệnh if ...

PosixParser p = new PosixParser(); 
     CommandLine cli=p.parse(options,args); 
     for(Object o : options.getOptions()) 
     { 
      Option op = (Option)o; 
      if(cli.getOptionValue(op.getName())) 
      throw new ParseException("Missing argument ! " + op.getArgName() + ":"+op.getDescription()); 
    } 

CẬP NHẬT NÀY: phương pháp getopt() dường như cung cấp các đối số tên viết tắt.

Tuy nhiên, nếu tôi thay thế op.getName() bằng opt.getLongName() ... nó hoạt động!

Trong mọi trường hợp .. Tôi có 2 câu hỏi:

1) Tại sao sẽ là một lựa chọn có tên null, chưa một longname không null?
2) Có cách nào đơn giản đảm bảo rằng tất cả các tùy chọn được cung cấp String []? Ví dụ, tôi muốn gọi:

if(! options.isAllProvided()) 
    throw new ParseException("You are missing some options ! " + StringUtils.join(userInputArray,',')); 
+0

Chỉ cần nhận thấy: Để có được một tùy chọn bằng tên ngắn của nó, bạn gọi getOpt(), chứ không phải getArgName() hoặc bất kỳ phương thức nào khác. – jayunit100

Trả lời

9

Đây là cách bạn có thể thiết lập một tùy chọn để được yêu cầu:

Option logfile = OptionBuilder.withArgName("file") 
      .isRequired() // make it required 
      .hasArg() 
      .withDescription( "use given file for log") 
      .create("logfile"); 

(Tôi không nghĩ rằng có một cách dễ dàng để làm cho tất cả tùy chọn cần thiết trong một bước)

+1

hmmm ... thats to bad. trông giống như api này cần phục sinh. – jayunit100

+0

Bạn có thực sự đánh dấu các tùy chọn theo yêu cầu. Nếu một số tùy chọn bị thiếu, bạn sẽ nhận được một ngoại lệ có chứa danh sách các tùy chọn bị thiếu. –

+0

Thật vậy nó là tiết và xấu xí, nhưng tôi thấy rằng làm cho một lớp nhà máy với các phương pháp như 'makeRequiredOption' rất có thể cải thiện khả năng đọc của lớp học chính của bạn. – bcoughlan

Các vấn đề liên quan