[
https://issues.apache.org/jira/browse/THRIFT-5085?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17031024#comment-17031024
]
Jens Geyer edited comment on THRIFT-5085 at 2/5/20 9:01 PM:
------------------------------------------------------------
You can't do it that way, because the client is for a different service. Even
if the methid names accidentally match like with {{findPosition}}, there is no
guarantee that the call succeeds. The argument list may be differnt, there may
be different return data or the throws clause may not match. From the interface
contract, these are two different services.
But in that case you still have an option left. Thrift supports inheritance at
the service level, like so:
{code:java}
service PositionService {
PositionDTO findPosition(1:PositionInputDTO) throws (1:
PositionServiceException e);
}
service PositionServiceV2 extends PositionService {
OwnerStoresListDTO listPositions(1:ListPositionInputDTO) throws
(1:PositionServiceException e);
}
{code}
Of course, a server can still only respond to calls that are actually
implemented server-side. Targeting a V2 client at a V1 server will not
magically implement the V2 interface.
was (Author: jensg):
You can't do it that way, because the client is for a different service. Even
if the methid names accidentally match like with {{findPosition}}, there is no
guarantee that the call succeeds. The argument list may be differnt, there may
be different return data or the throws clause may not match. From the interface
contract, these are two different services.
But in that case you still have an option left. Thrift supports inheritance at
the service level, like so:
{code}
service PositionService {
PositionDTO findPosition(1:PositionInputDTO) throws (1:
PositionServiceException e);
}
service PositionServiceV2 extends PositionService {
OwnerStoresListDTO listPositions(1:ListPositionInputDTO) throws
(1:PositionServiceException e);
}
{code}
> How do I execute a call to a server that supports multiple versions?
> --------------------------------------------------------------------
>
> Key: THRIFT-5085
> URL: https://issues.apache.org/jira/browse/THRIFT-5085
> Project: Thrift
> Issue Type: Question
> Components: Go - Compiler, Go - Library
> Affects Versions: 0.13.0
> Environment: OS:macOS
> On the client-side, I've got auto-generated code for go
> On the server-side, I've got auto-generated code for java
> Reporter: Andres Camilo Martinez Cano
> Priority: Major
> Fix For: 0.13.0
>
>
> Hi, my apologies beforehand If I say something strange or weird. I'm still
> quite new to thrift but I love it so far.
> I have a thrift file that supports two services like so(both services use the
> same structs):
> {code:java}
> service PositionService {
> PositionDTO findPosition(1:PositionInputDTO) throws (1:
> PositionServiceException e);
> }
> service PositionServiceV2 {
> PositionDTO findPosition(1:PositionInputDTO) throws (1:
> PositionServiceException e),
> OwnerStoresListDTO listPositions(1:ListPositionInputDTO) throws
> (1:PositionServiceException e);
> }
> {code}
> What I'm currently trying to do is to call the method \{{listPositions from
> the {{PositionServiceV2 }}but when I execute the call I keep receiving the
> error message "Invalid method name: listPositions" which makes me think that
> my call is being directed towards the PositionService even though I'm using
> the PostionServiceV2Client to make the call for this. Please help I don't
> know how to make this work.
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)