@@ -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) {
0 commit comments