|
6 | 6 | using System.Diagnostics; |
7 | 7 | using System.Net; |
8 | 8 | using System.Text; |
| 9 | +using System.Text.Json; |
9 | 10 |
|
10 | 11 | namespace Node.Runtime.Connectors; |
11 | 12 |
|
@@ -98,9 +99,27 @@ public async Task InitializeAsync(CancellationToken cancellationToken = default) |
98 | 99 | activity?.SetTag("base.url", _options.BaseUrl); |
99 | 100 | activity?.SetTag("max.retries", _options.MaxRetryAttempts); |
100 | 101 | } |
| 102 | + catch (UriFormatException ex) |
| 103 | + { |
| 104 | + _logger.LogError(ex, "Invalid base URL format: {BaseUrl}", _options.BaseUrl); |
| 105 | + activity?.SetStatus(ActivityStatusCode.Error, ex.Message); |
| 106 | + throw; |
| 107 | + } |
| 108 | + catch (ArgumentException ex) |
| 109 | + { |
| 110 | + _logger.LogError(ex, "Invalid HTTP configuration: {Message}", ex.Message); |
| 111 | + activity?.SetStatus(ActivityStatusCode.Error, ex.Message); |
| 112 | + throw; |
| 113 | + } |
| 114 | + catch (InvalidOperationException ex) |
| 115 | + { |
| 116 | + _logger.LogError(ex, "Invalid operation during HTTP connector initialization: {Message}", ex.Message); |
| 117 | + activity?.SetStatus(ActivityStatusCode.Error, ex.Message); |
| 118 | + throw; |
| 119 | + } |
101 | 120 | catch (Exception ex) |
102 | 121 | { |
103 | | - _logger.LogError(ex, "Failed to initialize HTTP output connector"); |
| 122 | + _logger.LogError(ex, "Unexpected error initializing HTTP output connector"); |
104 | 123 | activity?.SetStatus(ActivityStatusCode.Error, ex.Message); |
105 | 124 | throw; |
106 | 125 | } |
@@ -194,6 +213,38 @@ public async Task<SendMessageResult> SendMessageAsync( |
194 | 213 | IsRetryable = true |
195 | 214 | }; |
196 | 215 | } |
| 216 | + catch (JsonException ex) |
| 217 | + { |
| 218 | + _logger.LogError( |
| 219 | + ex, |
| 220 | + "JSON serialization error while sending message: MessageId={MessageId}", |
| 221 | + message.MessageId); |
| 222 | + |
| 223 | + activity?.SetStatus(ActivityStatusCode.Error, "Serialization error"); |
| 224 | + |
| 225 | + return new SendMessageResult |
| 226 | + { |
| 227 | + Success = false, |
| 228 | + ErrorMessage = $"JSON error: {ex.Message}", |
| 229 | + IsRetryable = false |
| 230 | + }; |
| 231 | + } |
| 232 | + catch (InvalidOperationException ex) |
| 233 | + { |
| 234 | + _logger.LogError( |
| 235 | + ex, |
| 236 | + "Invalid operation while sending message: MessageId={MessageId}", |
| 237 | + message.MessageId); |
| 238 | + |
| 239 | + activity?.SetStatus(ActivityStatusCode.Error, ex.Message); |
| 240 | + |
| 241 | + return new SendMessageResult |
| 242 | + { |
| 243 | + Success = false, |
| 244 | + ErrorMessage = ex.Message, |
| 245 | + IsRetryable = false |
| 246 | + }; |
| 247 | + } |
197 | 248 | catch (Exception ex) |
198 | 249 | { |
199 | 250 | _logger.LogError( |
@@ -235,9 +286,20 @@ public async Task CloseAsync(CancellationToken cancellationToken = default) |
235 | 286 |
|
236 | 287 | _logger.LogInformation("HTTP output connector closed successfully"); |
237 | 288 | } |
| 289 | + catch (ObjectDisposedException ex) |
| 290 | + { |
| 291 | + _logger.LogWarning(ex, "HTTP client already disposed during close"); |
| 292 | + activity?.SetStatus(ActivityStatusCode.Error, ex.Message); |
| 293 | + } |
| 294 | + catch (InvalidOperationException ex) |
| 295 | + { |
| 296 | + _logger.LogError(ex, "Invalid operation while closing HTTP output connector"); |
| 297 | + activity?.SetStatus(ActivityStatusCode.Error, ex.Message); |
| 298 | + throw; |
| 299 | + } |
238 | 300 | catch (Exception ex) |
239 | 301 | { |
240 | | - _logger.LogError(ex, "Error closing HTTP output connector"); |
| 302 | + _logger.LogError(ex, "Unexpected error closing HTTP output connector"); |
241 | 303 | activity?.SetStatus(ActivityStatusCode.Error, ex.Message); |
242 | 304 | throw; |
243 | 305 | } |
|
0 commit comments