code: protected Object evaluateOptionsDataSource()
              throws JspException
      {
          if (_optionsDataSource == null) {
              // optionsDataSource is null, so provide an informational message.  This isn't an error because it's
              // possible for tags to list their options inside of their bodies rather than via an optionsDataSource
              logger.info(Bundle.getString("Tags_IteratorError",
                      new Object[]{getTagName(), "optionsDataSource", _optionsDataSource}));
              return IteratorFactory.EMPTY_ITERATOR;
          }
  
          if (_optionsDataSource instanceof Map)
              return _optionsDataSource;
  
          Iterator it;
          it = IteratorFactory.createIterator(_optionsDataSource);
          if (it == null)
              it = IteratorFactory.EMPTY_ITERATOR;
  
          assert (it != null && it instanceof Iterator);
          return it;
      }
docs: Return the real value of the <code>optionDataSource</code> attribute.  The value returned will
  always be an instance of <code>Iterator</code> This value reflects the
  result of expression evaluation on the options data source.
  @return the object that represents the options data source.
  @throws JspException when something bad happens