[ https://issues.apache.org/jira/browse/THRIFT-4079?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
James E. King, III updated THRIFT-4079: --------------------------------------- Labels: regression (was: ) > Generated perl code that returns structures from included thrift files is > missing a necessary use clause > -------------------------------------------------------------------------------------------------------- > > Key: THRIFT-4079 > URL: https://issues.apache.org/jira/browse/THRIFT-4079 > Project: Thrift > Issue Type: Bug > Components: Perl - Compiler > Affects Versions: 0.10.0 > Environment: Ubuntu 14.04 LTS (perl 5.18.2) with thrift 0.10.0 > Reporter: James E. King, III > Assignee: James E. King, III > Priority: Critical > Labels: regression > > I made a very simple example which I will attach, however in a nutshell if I > define a structure in one thrift file like this: > {{ForeignInfo.thrift:}} > {noformat} > namespace perl org.fiction.rpc > struct ForeignInfo > { > 1: string someData > } > {noformat} > Then I define a service in another namespace like this: > {{SomeService.thrift:}} > {noformat} > namespace perl org.real > include "ForeignInfo.thrift" > service Company > { > ForeignInfo.ForeignInfo getForeignInfoList(); > } > {noformat} > Then I compile both of them, the resulting generated perl code in > {{gen-perl/org/real/Company.pm}} has the following use clauses in it: > {noformat} > require 5.6.0; > use strict; > use warnings; > use Thrift; > use org::real::Types; > {noformat} > Later on in the file we have: > {noformat} > SWITCH: for($fid) > { > /^0$/ && do{ if ($ftype == TType::STRUCT) { > $self->{success} = new org::fiction::rpc::ForeignInfo(); > $xfer += $self->{success}->read($input); > } else { > $xfer += $input->skip($ftype); > } > last; }; > $xfer += $input->skip($ftype); > } > {noformat} > If you put a simple wrapper around this call, the client gets an exception: > {noformat} > Undefined subroutine &org::fiction::rpc::ForeignInfo called at > gen-perl/org/real/Company.pm line 98 > {noformat} > Line 98 is where {{org::fiction::rpc::ForeignInfo}} is mentioned. Without a > use clause for the Types defined by the include it cannot be used. > If I add this line to the generated code in Company.pm: > {noformat} > use org::fiction::rpc::Types; > {noformat} > Then everything works. -- This message was sent by Atlassian JIRA (v6.3.15#6346)