@@ -31,22 +31,31 @@ GenericClient::GenericClient(
31
31
rcl_client_options_t & client_options)
32
32
: ClientBase(node_base, node_graph)
33
33
{
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
+ }
45
54
46
55
rcl_ret_t ret = rcl_client_init (
47
56
this ->get_client_handle ().get (),
48
57
this ->get_rcl_node_handle (),
49
- service_ts_ ,
58
+ service_ts ,
50
59
service_name.c_str (),
51
60
&client_options);
52
61
if (ret != RCL_RET_OK) {
0 commit comments