Mehdi Salarkia created THRIFT-4501:
--------------------------------------
Summary: Java client hides server side exceptions
Key: THRIFT-4501
URL: https://issues.apache.org/jira/browse/THRIFT-4501
Project: Thrift
Issue Type: Bug
Components: Java - Library
Affects Versions: 0.11.0
Reporter: Mehdi Salarkia
In my thrift definition I have some void methods that may through exceptions.
When I generate my java client with my thrift definition it seems like there is
a bug in the generated code that does not throw the RuntimeException that was
thrown by the server in the client.
However this works fine for non void functions. When I looked at the generated
codes for non-void functions seems like there is a call to
`recv_${method_name}` that will check if the error occurred on the server side,
it will re-throw on the client side but for the void method it simply returns
null.
After making the following change everything looks to be working.
```
--- a/compiler/cpp/src/thrift/generate/t_java_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_java_generator.cc
@@ -3177,7 +3177,8 @@ void
t_java_generator::generate_service_async_client(t_service* tservice) {
"client.getProtocolFactory().getProtocol(memoryTransport);" << endl;
indent(f_service_);
if (ret_type->is_void()) { // NB: Includes oneways which always return void.
- f_service_ << "return null;" << endl;
+ f_service_ << "(new Client(prot)).recv" + sep + javaname + "();"<< endl;
+ indent(f_service_) << "return null;" << endl;
} else {
f_service_ << "return (new Client(prot)).recv" + sep + javaname + "();" <<
endl;
}
```
I don't have the commit permission yet but I will create a pull request after
your confirmation.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)