public static Options getOptions(Object pojo) throws CLIOptionBindingException
	{
		Options options = new Options();		
		try{
		Class<? extends Object> clazz = pojo.getClass();
		Field[] fields = clazz.getDeclaredFields();			
		for (Field field : fields) {				
			if (field.isAnnotationPresent(CLIOptionBinding.class))
			{
				CLIOptionBinding cliBinding = field
						.getAnnotation(CLIOptionBinding.class);
				Option opt = new Option(String.valueOf(cliBinding.shortOption()), cliBinding.longOption(), cliBinding.hasValue(), cliBinding.description());
				options.addOption(opt);		
				
			}
		}
		Method[] methods = clazz.getMethods();
		for (Method method : methods) {
			if (method.isAnnotationPresent(CLIOptionBinding.class)
					&& method.getParameterTypes().length == 1) {
				CLIOptionBinding cliBinding = method
						.getAnnotation(CLIOptionBinding.class);
				Option opt = new Option(String.valueOf(cliBinding.shortOption()), cliBinding.longOption(), cliBinding.hasValue(), cliBinding.description());
				options.addOption(opt);		
			}
		}	
		}catch(Throwable ex){
			throw new CLIOptionBindingException(
					"Failed to generate cli option from POJO:" + pojo.toString());
		}
		return options;
	}