|
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