|
8 | 8 | import com.azure.core.credential.TokenCredential; |
9 | 9 | import com.azure.core.exception.AzureException; |
10 | 10 | import com.azure.core.http.HttpClient; |
| 11 | +import com.azure.core.http.HttpHeader; |
| 12 | +import com.azure.core.http.HttpHeaders; |
11 | 13 | import com.azure.core.http.HttpPipeline; |
12 | 14 | import com.azure.core.http.HttpPipelineBuilder; |
| 15 | +import com.azure.core.http.HttpPipelinePosition; |
13 | 16 | import com.azure.core.http.policy.AddHeadersFromContextPolicy; |
| 17 | +import com.azure.core.http.policy.AddHeadersPolicy; |
14 | 18 | import com.azure.core.http.policy.HttpLogDetailLevel; |
15 | 19 | import com.azure.core.http.policy.HttpLogOptions; |
16 | 20 | import com.azure.core.http.policy.HttpLoggingPolicy; |
|
55 | 59 | @ServiceClientBuilder(serviceClients = {ServiceBusAdministrationClient.class, |
56 | 60 | ServiceBusAdministrationAsyncClient.class}) |
57 | 61 | public final class ServiceBusAdministrationClientBuilder { |
| 62 | + private static final String CLIENT_NAME; |
| 63 | + private static final String CLIENT_VERSION; |
| 64 | + |
| 65 | + static { |
| 66 | + Map<String, String> properties = CoreUtils.getProperties("azure-messaging-servicebus.properties"); |
| 67 | + |
| 68 | + CLIENT_NAME = properties.getOrDefault("name", "UnknownName"); |
| 69 | + CLIENT_VERSION = properties.getOrDefault("version", "UnknownVersion"); |
| 70 | + } |
| 71 | + |
58 | 72 | private final ClientLogger logger = new ClientLogger(ServiceBusAdministrationClientBuilder.class); |
59 | 73 | private final ServiceBusManagementSerializer serializer = new ServiceBusManagementSerializer(); |
60 | | - private final List<HttpPipelinePolicy> userPolicies = new ArrayList<>(); |
61 | | - private final Map<String, String> properties = |
62 | | - CoreUtils.getProperties("azure-messaging-servicebus.properties"); |
| 74 | + |
| 75 | + private final List<HttpPipelinePolicy> perCallPolicies = new ArrayList<>(); |
| 76 | + private final List<HttpPipelinePolicy> perRetryPolicies = new ArrayList<>(); |
63 | 77 |
|
64 | 78 | private Configuration configuration; |
65 | 79 |
|
@@ -142,7 +156,12 @@ public ServiceBusAdministrationClient buildClient() { |
142 | 156 | */ |
143 | 157 | public ServiceBusAdministrationClientBuilder addPolicy(HttpPipelinePolicy policy) { |
144 | 158 | Objects.requireNonNull(policy); |
145 | | - userPolicies.add(policy); |
| 159 | + if (policy.getPipelinePosition() == HttpPipelinePosition.PER_CALL) { |
| 160 | + perCallPolicies.add(policy); |
| 161 | + } else { |
| 162 | + perRetryPolicies.add(policy); |
| 163 | + } |
| 164 | + |
146 | 165 | return this; |
147 | 166 | } |
148 | 167 |
|
@@ -348,44 +367,38 @@ private HttpPipeline createPipeline() { |
348 | 367 |
|
349 | 368 | // Closest to API goes first, closest to wire goes last. |
350 | 369 | final List<HttpPipelinePolicy> httpPolicies = new ArrayList<>(); |
351 | | - final String clientName = properties.getOrDefault("name", "UnknownName"); |
352 | | - final String clientVersion = properties.getOrDefault("version", "UnknownVersion"); |
353 | 370 |
|
354 | 371 | // Find applicationId to use |
355 | | - String logApplicationId = null; |
356 | | - if (httpLogOptions != null) { |
357 | | - logApplicationId = httpLogOptions.getApplicationId(); |
358 | | - } |
| 372 | + final String applicationId = CoreUtils.getApplicationId(clientOptions, httpLogOptions); |
359 | 373 |
|
360 | | - String clientApplicationId = null; |
361 | | - if (clientOptions != null && clientOptions.getApplicationId() != null) { |
362 | | - clientApplicationId = clientOptions.getApplicationId(); |
363 | | - } |
364 | | - |
365 | | - if (logApplicationId != null && clientApplicationId != null |
366 | | - && !logApplicationId.equalsIgnoreCase(clientApplicationId)) { |
367 | | - throw logger.logExceptionAsError(new IllegalStateException( |
368 | | - "'httpLogOptions.getApplicationId() and clientOptions.getApplicationId()' cannot be different.")); |
369 | | - } |
370 | | - // We prioritize application id set in ClientOptions. |
371 | | - final String applicationId = clientApplicationId != null ? clientApplicationId : logApplicationId; |
372 | | - |
373 | | - httpPolicies.add(new UserAgentPolicy(applicationId, clientName, clientVersion, |
374 | | - buildConfiguration)); |
| 374 | + httpPolicies.add(new UserAgentPolicy(applicationId, CLIENT_NAME, CLIENT_VERSION, buildConfiguration)); |
375 | 375 | httpPolicies.add(new ServiceBusTokenCredentialHttpPolicy(tokenCredential)); |
376 | 376 | httpPolicies.add(new AddHeadersFromContextPolicy()); |
377 | 377 |
|
| 378 | + httpPolicies.addAll(perCallPolicies); |
| 379 | + |
378 | 380 | HttpPolicyProviders.addBeforeRetryPolicies(httpPolicies); |
379 | 381 |
|
380 | 382 | httpPolicies.add(retryPolicy == null ? new RetryPolicy() : retryPolicy); |
381 | | - httpPolicies.addAll(userPolicies); |
| 383 | + httpPolicies.addAll(perRetryPolicies); |
| 384 | + |
| 385 | + if (clientOptions != null) { |
| 386 | + List<HttpHeader> httpHeaderList = new ArrayList<>(); |
| 387 | + clientOptions.getHeaders().forEach(h -> httpHeaderList.add(new HttpHeader(h.getName(), h.getValue()))); |
| 388 | + |
| 389 | + if (!httpHeaderList.isEmpty()) { |
| 390 | + httpPolicies.add(new AddHeadersPolicy(new HttpHeaders(httpHeaderList))); |
| 391 | + } |
| 392 | + } |
| 393 | + |
382 | 394 | httpPolicies.add(new HttpLoggingPolicy(httpLogOptions)); |
383 | 395 |
|
384 | 396 | HttpPolicyProviders.addAfterRetryPolicies(httpPolicies); |
385 | 397 |
|
386 | 398 | return new HttpPipelineBuilder() |
387 | 399 | .policies(httpPolicies.toArray(new HttpPipelinePolicy[0])) |
388 | 400 | .httpClient(httpClient) |
| 401 | + .clientOptions(clientOptions) |
389 | 402 | .build(); |
390 | 403 | } |
391 | 404 | } |
0 commit comments