Skip to content

Commit 918363d

Browse files
Use InvalidServiceTypeError for unavailable service type in GenericClient (#2629)
Signed-off-by: Barry Xu <[email protected]>
1 parent 97c386c commit 918363d

File tree

2 files changed

+22
-13
lines changed

2 files changed

+22
-13
lines changed

rclcpp/src/rclcpp/generic_client.cpp

+21-12
Original file line numberDiff line numberDiff line change
@@ -31,22 +31,31 @@ GenericClient::GenericClient(
3131
rcl_client_options_t & client_options)
3232
: ClientBase(node_base, node_graph)
3333
{
34-
ts_lib_ = get_typesupport_library(
35-
service_type, "rosidl_typesupport_cpp");
36-
37-
auto service_ts_ = get_service_typesupport_handle(
38-
service_type, "rosidl_typesupport_cpp", *ts_lib_);
39-
40-
auto response_type_support_intro = get_message_typesupport_handle(
41-
service_ts_->response_typesupport,
42-
rosidl_typesupport_introspection_cpp::typesupport_identifier);
43-
response_members_ = static_cast<const rosidl_typesupport_introspection_cpp::MessageMembers *>(
44-
response_type_support_intro->data);
34+
const rosidl_service_type_support_t * service_ts;
35+
try {
36+
ts_lib_ = get_typesupport_library(
37+
service_type, "rosidl_typesupport_cpp");
38+
39+
service_ts = get_service_typesupport_handle(
40+
service_type, "rosidl_typesupport_cpp", *ts_lib_);
41+
42+
auto response_type_support_intro = get_message_typesupport_handle(
43+
service_ts->response_typesupport,
44+
rosidl_typesupport_introspection_cpp::typesupport_identifier);
45+
response_members_ = static_cast<const rosidl_typesupport_introspection_cpp::MessageMembers *>(
46+
response_type_support_intro->data);
47+
} catch (std::runtime_error & err) {
48+
RCLCPP_ERROR(
49+
rclcpp::get_node_logger(node_handle_.get()).get_child("rclcpp"),
50+
"Invalid service type: %s",
51+
err.what());
52+
throw rclcpp::exceptions::InvalidServiceTypeError(err.what());
53+
}
4554

4655
rcl_ret_t ret = rcl_client_init(
4756
this->get_client_handle().get(),
4857
this->get_rcl_node_handle(),
49-
service_ts_,
58+
service_ts,
5059
service_name.c_str(),
5160
&client_options);
5261
if (ret != RCL_RET_OK) {

rclcpp/test/rclcpp/test_generic_client.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ TEST_F(TestGenericClient, construction_and_destruction) {
105105
ASSERT_THROW(
106106
{
107107
auto client = node->create_generic_client("test_service", "test_msgs/srv/InvalidType");
108-
}, std::runtime_error);
108+
}, rclcpp::exceptions::InvalidServiceTypeError);
109109
}
110110
}
111111

0 commit comments

Comments
 (0)