def get_item(opts)
      opts = opts.clone
      [:item_shape, :item_ids].each do |k|
        validate_param(opts, k, true)
      end
      req = build_soap! do |type, builder|
        if(type == :header)
        else
          builder.nbuild.GetItem {
            builder.nbuild.parent.default_namespace = @default_ns
            builder.item_shape!(opts[:item_shape])
            builder.item_ids!(opts[:item_ids])
          }
        end
      end
      do_soap_request(req, response_class: EwsResponse)
    end
def get_item(opts)
      opts = opts.clone
      [:item_shape, :item_ids].each do |k|
        validate_param(opts, k, true)
      end
      req = build_soap! do |type, builder|
        if(type == :header)
        else
          builder.nbuild.GetItem {
            builder.nbuild.parent.default_namespace = @default_ns
            builder.item_shape!(opts[:item_shape])
            builder.item_ids!(opts[:item_ids])
          }
        end
      end
      do_soap_request(req, response_class: EwsResponse)
    end
Gets items from the Exchange store
 @see http://msdn.microsoft.com/en-us/library/aa565934(v=EXCHG.140).aspx

 @param [Hash] opts
 @option opts [Hash] :item_shape The item shape properties
   Ex: {:base_shape => 'Default'}
 @option opts [Array<Hash>] :item_ids ItemIds Hash. The keys in these Hashes can be
   :item_id, :occurrence_item_id, or :recurring_master_item_id. Please see the
   Microsoft docs for more information.
 @example
   opts = {
     :item_shape => {:base_shape => 'Default'},
     :item_ids   => [
       {:item_id => {:id => 'id1'}},
       {:occurrence_item_id => {:recurring_master_id => 'rid1', :change_key => 'ck', :instance_index => 1}},
       {:recurring_master_item_id => {:occurrence_id => 'oid1', :change_key => 'ck'}}
       ]}