Thank you Mark Slee. I will make the suggested changes.

Regards
Bala Mudiam





On Tue, Mar 9, 2010 at 5:51 PM, Mark Slee <[email protected]> wrote:
> Ah yes, here's the issue:
>
> service MyServer {
>  set<MyResponse> findValue(1: MyRequest request )
>    throws (1: MyException ex)
>
> Thrift/PHP does not support sets of objects. This is because in PHP Thrift 
> implements sets as a dictionary hash, and PHP arrays only support scalar keys.
>
> You should probably just use list<MyResponse> instead of set.
>
> -----Original Message-----
> From: Balanagireddy Mudiam [mailto:[email protected]]
> Sent: Tuesday, March 09, 2010 2:45 PM
> To: [email protected]
> Subject: Re: PHP error calling thrift method
>
> Hi,
>
> The reason I kept the request was, I thought set type was creating the 
> problem.
>
> Here is the complete thrift file.
>
>  struct MyResponse {
>   1: i64 totalValue,
>   2: i64 Value1,
>   3: i64 Value2,
>   4: i64 Value3,
>   5: map<string,i64> sourceValMap
>  }
>
> struct MyRequest {
>  1: set<string> name,
>  2: i32 startDate,
>  3: i32 endDate,
>  }
>
> service MyServer {
>  set<MyResponse> findValue(1: MyRequest request )
>    throws (1: MyException ex)
>
> }
>
>
> Here is the read method for response, generated by thrift.
>
>  public function read($input)
>  {
>    $xfer = 0;
>    $fname = null;
>    $ftype = 0;
>    $fid = 0;
>    $xfer += $input->readStructBegin($fname);
>    while (true)
>    {
>      $xfer += $input->readFieldBegin($fname, $ftype, $fid);
>      if ($ftype == TType::STOP) {
>        break;
>      }
>      switch ($fid)
>      {
>        case 0:
>          if ($ftype == TType::SET) {
>            $this->success = array();
>            $_size16 = 0;
>            $_etype19 = 0;
>            $xfer += $input->readSetBegin($_etype19, $_size16);
>            for ($_i20 = 0; $_i20 < $_size16; ++$_i20)
>            {
>              $elem21 = null;
>              $elem21 = new MyResponse();
>              $xfer += $elem21->read($input);
> -->              $this->success[$elem21] = true;
>            }
>            $xfer += $input->readSetEnd();
>          } else {
>            $xfer += $input->skip($ftype);
>          }
>          break;
>        case 1:
>          if ($ftype == TType::STRUCT) {
>            $this->ex = new MyException();
>            $xfer += $this->ex->read($input);
>          } else {
>            $xfer += $input->skip($ftype);
>          }
>          break;
>        default:
>          $xfer += $input->skip($ftype);
>          break;
>      }
>      $xfer += $input->readFieldEnd();
>    }
>    $xfer += $input->readStructEnd();
>    return $xfer;
>  }
>
> Here is how I am invoking it.
>
> $vals['name'] = array("USA");
> $vals['startDate'] = '20100201';
> $vals['endDate'] = '20100120';
>
> $myrequest = new MyRequest($vals);
>
> $results = $mvr->findValue($myrequest);
>
> Thank you.
>
> Regards
> Bala Mudiam
>
>
>
>
>
> On Tue, Mar 9, 2010 at 5:34 PM, Mark Slee <[email protected]> wrote:
>> I think something is missing here. The struct you show is MyRequest but this 
>> generated code is dealing with a MyResponse.
>>
>> Can you send over your full .thrift file, more context in the generated 
>> code, and how you're invoking it?
>>
>> -----Original Message-----
>> From: Balanagireddy Mudiam [mailto:[email protected]]
>> Sent: Tuesday, March 09, 2010 2:20 PM
>> To: [email protected]
>> Subject: PHP error calling thrift method
>>
>> Hi,
>>
>> I am having the below request object and I am calling a method using
>> thrift from php.
>>
>>  struct MyRequest {
>>   1: set<string> name,
>>   2: i32 startDate,
>>   3: i32 endDate,
>>  }
>>
>> When I execute my php, I get the following error. This warning is
>> thrown from thrift generated code. The reason for the warning is
>> $elem21(object) cannot be used as a key.
>>
>> Warning: Illegal offset type in Server.php on line 226
>>
>> 223               $elem21 = null;
>> 224               $elem21 = new MyResponse();
>> 225               $xfer += $elem21->read($input);
>> 226               $this->success[$elem21] = true;
>>
>> Any idea, how to resolve this issue.
>>
>> Thank you.
>>
>> Regards
>> Bala Mudiam
>>
>

Reply via email to