diff --git a/eng/versioning/external_dependencies.txt b/eng/versioning/external_dependencies.txt
index 8bb071c8802d..0917ab9ccfcb 100644
--- a/eng/versioning/external_dependencies.txt
+++ b/eng/versioning/external_dependencies.txt
@@ -211,4 +211,4 @@ media_com.microsoft.azure:adal4j;1.2.0
servicebus_com.microsoft.azure:azure-client-authentication;1.6.7
# sdk\storage\azure-storage-blob-cryptography\pom.xml
-storage_com.microsoft.azure:azure-storage;8.4.0
\ No newline at end of file
+storage_com.microsoft.azure:azure-storage;8.4.0
diff --git a/eng/versioning/version_client_java_files.txt b/eng/versioning/version_client_java_files.txt
index b59b8ee005c9..9f2721aa11ba 100644
--- a/eng/versioning/version_client_java_files.txt
+++ b/eng/versioning/version_client_java_files.txt
@@ -4,12 +4,3 @@
# The file format here should be the relative path from the root of the azure-sdk-for-java
sdk/core/azure-core-amqp/src/main/java/com/azure/core/amqp/implementation/ClientConstants.java
-sdk/keyvault/azure-security-keyvault-certificates/src/main/java/com/azure/security/keyvault/certificates/AzureKeyVaultConfiguration.java
-sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/implementation/AzureKeyVaultConfiguration.java
-sdk/keyvault/azure-security-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/AzureKeyVaultConfiguration.java
-sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/implementation/util/BuilderHelper.java
-sdk/storage/azure-storage-blob-cryptography/src/main/java/com/azure/storage/blob/specialized/cryptography/BlobCryptographyConfiguration.java
-sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/implementation/util/BuilderHelper.java
-sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/FileConfiguration.java
-sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/util/BuilderHelper.java
-sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/QueueConfiguration.java
diff --git a/sdk/appconfiguration/azure-data-appconfiguration/src/main/java/com/azure/data/appconfiguration/ConfigurationClient.java b/sdk/appconfiguration/azure-data-appconfiguration/src/main/java/com/azure/data/appconfiguration/ConfigurationClient.java
index d3a3a8b58bbf..cc68fd2e2aa2 100644
--- a/sdk/appconfiguration/azure-data-appconfiguration/src/main/java/com/azure/data/appconfiguration/ConfigurationClient.java
+++ b/sdk/appconfiguration/azure-data-appconfiguration/src/main/java/com/azure/data/appconfiguration/ConfigurationClient.java
@@ -334,7 +334,7 @@ public ConfigurationSetting setReadOnly(String key, String label, boolean isRead
*
*
Set the setting to read-only with the key-label "prodDBConnection"-"westUS".
*
- * {@codesnippet com.azure.data.applicationconfig.configurationclient.setReadOnlyWithResponse#ConfigurationSetting-boolean-Context}
+ * {@codesnippet com.azure.data.applicationconfig.configurationclient.setReadOnlyWithResponse#ConfigurationSetting-Boolean-Context}
*
* Clear read-only of the setting with the key-label "prodDBConnection"-"westUS".
*
diff --git a/sdk/appconfiguration/azure-data-appconfiguration/src/main/java/com/azure/data/appconfiguration/ConfigurationClientBuilder.java b/sdk/appconfiguration/azure-data-appconfiguration/src/main/java/com/azure/data/appconfiguration/ConfigurationClientBuilder.java
index df4d670d247e..d4f2533c0a85 100644
--- a/sdk/appconfiguration/azure-data-appconfiguration/src/main/java/com/azure/data/appconfiguration/ConfigurationClientBuilder.java
+++ b/sdk/appconfiguration/azure-data-appconfiguration/src/main/java/com/azure/data/appconfiguration/ConfigurationClientBuilder.java
@@ -76,16 +76,16 @@ public final class ConfigurationClientBuilder {
private static final String CONTENT_TYPE_HEADER_VALUE = "application/json";
private static final String ACCEPT_HEADER = "Accept";
private static final String ACCEPT_HEADER_VALUE = "application/vnd.microsoft.azconfig.kv+json";
+ // This is properties file's name.
private static final String APP_CONFIG_PROPERTIES = "azure-appconfig.properties";
- private static final String NAME = "name";
- private static final String VERSION = "version";
+ private static final String SDK_NAME = "name";
+ private static final String SDK_VERSION = "version";
private static final RetryPolicy DEFAULT_RETRY_POLICY = new RetryPolicy("retry-after-ms", ChronoUnit.MILLIS);
private final ClientLogger logger = new ClientLogger(ConfigurationClientBuilder.class);
private final List policies;
private final HttpHeaders headers;
- private final String clientName;
- private final String clientVersion;
+ private final Map properties;
private ConfigurationClientCredentials credential;
private TokenCredential tokenCredential;
@@ -105,9 +105,7 @@ public ConfigurationClientBuilder() {
policies = new ArrayList<>();
httpLogOptions = new HttpLogOptions();
- Map properties = CoreUtils.getProperties(APP_CONFIG_PROPERTIES);
- clientName = properties.getOrDefault(NAME, "UnknownName");
- clientVersion = properties.getOrDefault(VERSION, "UnknownVersion");
+ properties = CoreUtils.getProperties(APP_CONFIG_PROPERTIES);
headers = new HttpHeaders()
.put(ECHO_REQUEST_ID_HEADER, "true")
@@ -175,6 +173,9 @@ public ConfigurationAsyncClient buildAsyncClient() {
// Closest to API goes first, closest to wire goes last.
final List policies = new ArrayList<>();
+ String clientName = properties.getOrDefault(SDK_NAME, "UnknownName");
+ String clientVersion = properties.getOrDefault(SDK_VERSION, "UnknownVersion");
+
policies.add(new UserAgentPolicy(httpLogOptions.getApplicationId(), clientName, clientVersion,
buildConfiguration));
policies.add(new RequestIdPolicy());
diff --git a/sdk/keyvault/azure-security-keyvault-certificates/src/main/java/com/azure/security/keyvault/certificates/AzureKeyVaultConfiguration.java b/sdk/keyvault/azure-security-keyvault-certificates/src/main/java/com/azure/security/keyvault/certificates/AzureKeyVaultConfiguration.java
deleted file mode 100644
index 05abc2d279a5..000000000000
--- a/sdk/keyvault/azure-security-keyvault-certificates/src/main/java/com/azure/security/keyvault/certificates/AzureKeyVaultConfiguration.java
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-package com.azure.security.keyvault.certificates;
-
-class AzureKeyVaultConfiguration {
- //TODO: Eventually remove these hardcoded strings with https://github.com/Azure/azure-sdk-for-java/issues/3141
- static final String SDK_NAME = "Azure-Keyvault";
- // {x-version-update-start;com.azure:azure-security-keyvault-certificates;current}
- static final String SDK_VERSION = "4.0.0-beta.7";
- // {x-version-update-end}
-}
diff --git a/sdk/keyvault/azure-security-keyvault-certificates/src/main/java/com/azure/security/keyvault/certificates/CertificateClientBuilder.java b/sdk/keyvault/azure-security-keyvault-certificates/src/main/java/com/azure/security/keyvault/certificates/CertificateClientBuilder.java
index 8fbc0583e74e..0c349784b1d2 100644
--- a/sdk/keyvault/azure-security-keyvault-certificates/src/main/java/com/azure/security/keyvault/certificates/CertificateClientBuilder.java
+++ b/sdk/keyvault/azure-security-keyvault-certificates/src/main/java/com/azure/security/keyvault/certificates/CertificateClientBuilder.java
@@ -24,6 +24,7 @@
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
/**
@@ -57,8 +58,12 @@
@ServiceClientBuilder(serviceClients = {CertificateClient.class, CertificateAsyncClient.class})
public final class CertificateClientBuilder {
private final ClientLogger logger = new ClientLogger(CertificateClientBuilder.class);
-
+ // This is properties file's name.
+ private static final String AZURE_KEY_VAULT_CERTIFICATES_PROPERTIES = "azure-key-vault-certificates.properties";
+ private static final String SDK_NAME = "name";
+ private static final String SDK_VERSION = "version";
private final List policies;
+ private final Map properties;
private TokenCredential credential;
private HttpPipeline pipeline;
private URL vaultUrl;
@@ -75,6 +80,7 @@ public CertificateClientBuilder() {
retryPolicy = new RetryPolicy();
httpLogOptions = new HttpLogOptions();
policies = new ArrayList<>();
+ properties = CoreUtils.getProperties(AZURE_KEY_VAULT_CERTIFICATES_PROPERTIES);
}
/**
@@ -110,11 +116,13 @@ public CertificateClient buildClient() {
* {@link CertificateClientBuilder#vaultUrl(String)} have not been set.
*/
public CertificateAsyncClient buildAsyncClient() {
- Configuration buildConfiguration = (configuration == null) ? Configuration.getGlobalConfiguration().clone() : configuration;
+ Configuration buildConfiguration = (configuration != null) ? configuration
+ : Configuration.getGlobalConfiguration().clone();
URL buildEndpoint = getBuildEndpoint(buildConfiguration);
if (buildEndpoint == null) {
- throw logger.logExceptionAsError(new IllegalStateException(KeyVaultErrorCodeStrings.getErrorString(KeyVaultErrorCodeStrings.VAULT_END_POINT_REQUIRED)));
+ throw logger.logExceptionAsError(new IllegalStateException(
+ KeyVaultErrorCodeStrings.getErrorString(KeyVaultErrorCodeStrings.VAULT_END_POINT_REQUIRED)));
}
CertificateServiceVersion serviceVersion = version != null ? version : CertificateServiceVersion.getLatest();
@@ -123,12 +131,18 @@ public CertificateAsyncClient buildAsyncClient() {
}
if (credential == null) {
- throw logger.logExceptionAsError(new IllegalStateException(KeyVaultErrorCodeStrings.getErrorString(KeyVaultErrorCodeStrings.CREDENTIALS_REQUIRED)));
+ throw logger.logExceptionAsError(new IllegalStateException(
+ KeyVaultErrorCodeStrings.getErrorString(KeyVaultErrorCodeStrings.CREDENTIALS_REQUIRED)));
}
// Closest to API goes first, closest to wire goes last.
final List policies = new ArrayList<>();
- policies.add(new UserAgentPolicy(httpLogOptions.getApplicationId(), AzureKeyVaultConfiguration.SDK_NAME, AzureKeyVaultConfiguration.SDK_VERSION, buildConfiguration));
+
+ String clientName = properties.getOrDefault(SDK_NAME, "UnknownName");
+ String clientVersion = properties.getOrDefault(SDK_VERSION, "UnknownVersion");
+ policies.add(new UserAgentPolicy(httpLogOptions.getApplicationId(), clientName, clientVersion,
+ buildConfiguration));
+
HttpPolicyProviders.addBeforeRetryPolicies(policies);
policies.add(retryPolicy);
policies.add(new KeyVaultCredentialPolicy(credential));
diff --git a/sdk/keyvault/azure-security-keyvault-certificates/src/main/resources/azure-key-vault-certificates.properties b/sdk/keyvault/azure-security-keyvault-certificates/src/main/resources/azure-key-vault-certificates.properties
new file mode 100644
index 000000000000..ca812989b4f2
--- /dev/null
+++ b/sdk/keyvault/azure-security-keyvault-certificates/src/main/resources/azure-key-vault-certificates.properties
@@ -0,0 +1,2 @@
+name=${project.artifactId}
+version=${project.version}
diff --git a/sdk/keyvault/azure-security-keyvault-certificates/src/main/resources/kvErrorStrings.properties b/sdk/keyvault/azure-security-keyvault-certificates/src/main/resources/kvErrorStrings.properties
index ffced4746fc3..df9cd43cfcc1 100644
--- a/sdk/keyvault/azure-security-keyvault-certificates/src/main/resources/kvErrorStrings.properties
+++ b/sdk/keyvault/azure-security-keyvault-certificates/src/main/resources/kvErrorStrings.properties
@@ -1,2 +1,3 @@
credentials_required=Azure Key Vault credentials are required.
vault_endpoint_required=Azure Key Vault endpoint url is required.
+
diff --git a/sdk/keyvault/azure-security-keyvault-certificates/src/test/java/com/azure/security/keyvault/certificates/CertificateClientTestBase.java b/sdk/keyvault/azure-security-keyvault-certificates/src/test/java/com/azure/security/keyvault/certificates/CertificateClientTestBase.java
index f7d2d5be365e..f7003dbf352e 100644
--- a/sdk/keyvault/azure-security-keyvault-certificates/src/test/java/com/azure/security/keyvault/certificates/CertificateClientTestBase.java
+++ b/sdk/keyvault/azure-security-keyvault-certificates/src/test/java/com/azure/security/keyvault/certificates/CertificateClientTestBase.java
@@ -57,6 +57,8 @@
import static org.junit.jupiter.api.Assertions.fail;
public abstract class CertificateClientTestBase extends TestBase {
+ private static final String SDK_NAME = "client_name";
+ private static final String SDK_VERSION = "client_version";
@Override
protected String getTestName() {
@@ -80,7 +82,7 @@ T clientSetup(Function clientBuilder) {
HttpClient httpClient;
// Closest to API goes first, closest to wire goes last.
final List policies = new ArrayList<>();
- policies.add(new UserAgentPolicy(AzureKeyVaultConfiguration.SDK_NAME, AzureKeyVaultConfiguration.SDK_VERSION,
+ policies.add(new UserAgentPolicy(SDK_NAME, SDK_VERSION,
Configuration.getGlobalConfiguration().clone(), CertificateServiceVersion.getLatest()));
HttpPolicyProviders.addBeforeRetryPolicies(policies);
policies.add(new RetryPolicy());
diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/KeyClientBuilder.java b/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/KeyClientBuilder.java
index 986fe3c7d0c3..fd9a05b45977 100644
--- a/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/KeyClientBuilder.java
+++ b/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/KeyClientBuilder.java
@@ -18,13 +18,13 @@
import com.azure.core.http.policy.UserAgentPolicy;
import com.azure.core.annotation.ServiceClientBuilder;
import com.azure.core.util.logging.ClientLogger;
-import com.azure.security.keyvault.keys.implementation.AzureKeyVaultConfiguration;
import com.azure.security.keyvault.keys.implementation.KeyVaultCredentialPolicy;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
/**
@@ -60,8 +60,12 @@
@ServiceClientBuilder(serviceClients = KeyClient.class)
public final class KeyClientBuilder {
private final ClientLogger logger = new ClientLogger(KeyClientBuilder.class);
-
+ // This is properties file's name.
+ private static final String AZURE_KEY_VAULT_KEYS = "azure-key-vault-keys.properties";
+ private static final String SDK_NAME = "name";
+ private static final String SDK_VERSION = "version";
private final List policies;
+ private final Map properties;
private TokenCredential credential;
private HttpPipeline pipeline;
private URL vaultUrl;
@@ -78,6 +82,7 @@ public KeyClientBuilder() {
retryPolicy = new RetryPolicy();
httpLogOptions = new HttpLogOptions();
policies = new ArrayList<>();
+ properties = CoreUtils.getProperties(AZURE_KEY_VAULT_KEYS);
}
/**
@@ -136,7 +141,10 @@ public KeyAsyncClient buildAsyncClient() {
// Closest to API goes first, closest to wire goes last.
final List policies = new ArrayList<>();
- policies.add(new UserAgentPolicy(httpLogOptions.getApplicationId(), AzureKeyVaultConfiguration.SDK_NAME, AzureKeyVaultConfiguration.SDK_VERSION,
+
+ String clientName = properties.getOrDefault(SDK_NAME, "UnknownName");
+ String clientVersion = properties.getOrDefault(SDK_VERSION, "UnknownVersion");
+ policies.add(new UserAgentPolicy(httpLogOptions.getApplicationId(), clientName, clientVersion,
buildConfiguration));
HttpPolicyProviders.addBeforeRetryPolicies(policies);
policies.add(retryPolicy);
diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/cryptography/CryptographyClientBuilder.java b/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/cryptography/CryptographyClientBuilder.java
index 5a76313f4fc8..09d3a75b6d28 100644
--- a/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/cryptography/CryptographyClientBuilder.java
+++ b/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/cryptography/CryptographyClientBuilder.java
@@ -16,13 +16,14 @@
import com.azure.core.annotation.ServiceClientBuilder;
import com.azure.core.http.policy.HttpPolicyProviders;
import com.azure.core.util.Configuration;
+import com.azure.core.util.CoreUtils;
import com.azure.core.util.logging.ClientLogger;
import com.azure.security.keyvault.keys.implementation.KeyVaultCredentialPolicy;
-import com.azure.security.keyvault.keys.implementation.AzureKeyVaultConfiguration;
import com.azure.security.keyvault.keys.models.JsonWebKey;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
/**
@@ -63,7 +64,12 @@
@ServiceClientBuilder(serviceClients = CryptographyClient.class)
public final class CryptographyClientBuilder {
final List policies;
+ final Map properties;
private final ClientLogger logger = new ClientLogger(CryptographyClientBuilder.class);
+ // This is properties file's name.
+ private static final String AZURE_KEY_VAULT_KEYS = "azure-key-vault-keys.properties";
+ private static final String SDK_NAME = "name";
+ private static final String SDK_VERSION = "version";
private TokenCredential credential;
private HttpPipeline pipeline;
private JsonWebKey jsonWebKey;
@@ -81,6 +87,7 @@ public CryptographyClientBuilder() {
retryPolicy = new RetryPolicy();
httpLogOptions = new HttpLogOptions();
policies = new ArrayList<>();
+ properties = CoreUtils.getProperties(AZURE_KEY_VAULT_KEYS);
}
/**
@@ -153,7 +160,10 @@ HttpPipeline setupPipeline() {
// Closest to API goes first, closest to wire goes last.
final List policies = new ArrayList<>();
- policies.add(new UserAgentPolicy(httpLogOptions.getApplicationId(), AzureKeyVaultConfiguration.SDK_NAME, AzureKeyVaultConfiguration.SDK_VERSION,
+
+ String clientName = properties.getOrDefault(SDK_NAME, "UnknownName");
+ String clientVersion = properties.getOrDefault(SDK_VERSION, "UnknownVersion");
+ policies.add(new UserAgentPolicy(httpLogOptions.getApplicationId(), clientName, clientVersion,
buildConfiguration));
HttpPolicyProviders.addBeforeRetryPolicies(policies);
policies.add(retryPolicy);
diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/implementation/AzureKeyVaultConfiguration.java b/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/implementation/AzureKeyVaultConfiguration.java
deleted file mode 100644
index 46296bf3478b..000000000000
--- a/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/implementation/AzureKeyVaultConfiguration.java
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-package com.azure.security.keyvault.keys.implementation;
-
-public final class AzureKeyVaultConfiguration {
- //TODO: Eventually remove these hardcoded strings with https://github.com/Azure/azure-sdk-for-java/issues/3141
- public static final String SDK_NAME = "Azure-Keyvault";
- // {x-version-update-start;com.azure:azure-security-keyvault-keys;current}
- public static final String SDK_VERSION = "4.1.0-beta.1";
- // {x-version-update-end}
-}
diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/main/resources/azure-key-vault-keys.properties b/sdk/keyvault/azure-security-keyvault-keys/src/main/resources/azure-key-vault-keys.properties
new file mode 100644
index 000000000000..ca812989b4f2
--- /dev/null
+++ b/sdk/keyvault/azure-security-keyvault-keys/src/main/resources/azure-key-vault-keys.properties
@@ -0,0 +1,2 @@
+name=${project.artifactId}
+version=${project.version}
diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyClientTestBase.java b/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyClientTestBase.java
index 89d86b36d0d3..16bcf9b89b7c 100644
--- a/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyClientTestBase.java
+++ b/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyClientTestBase.java
@@ -21,7 +21,6 @@
import com.azure.core.test.TestBase;
import com.azure.core.util.Configuration;
import com.azure.identity.DefaultAzureCredentialBuilder;
-import com.azure.security.keyvault.keys.implementation.AzureKeyVaultConfiguration;
import com.azure.security.keyvault.keys.models.CreateKeyOptions;
import com.azure.security.keyvault.keys.models.KeyType;
import com.azure.security.keyvault.keys.models.KeyVaultKey;
@@ -47,6 +46,8 @@ public abstract class KeyClientTestBase extends TestBase {
private static final String KEY_NAME = "javaKeyTemp";
private static final KeyType RSA_KEY_TYPE = KeyType.RSA;
private static final KeyType EC_KEY_TYPE = KeyType.EC;
+ private static final String SDK_NAME = "client_name";
+ private static final String SDK_VERSION = "client_version";
@Override
protected String getTestName() {
@@ -70,7 +71,7 @@ T clientSetup(Function clientBuilder) {
HttpClient httpClient;
// Closest to API goes first, closest to wire goes last.
final List policies = new ArrayList<>();
- policies.add(new UserAgentPolicy(AzureKeyVaultConfiguration.SDK_NAME, AzureKeyVaultConfiguration.SDK_VERSION, Configuration.getGlobalConfiguration().clone(), KeyServiceVersion.getLatest()));
+ policies.add(new UserAgentPolicy(SDK_NAME, SDK_VERSION, Configuration.getGlobalConfiguration().clone(), KeyServiceVersion.getLatest()));
HttpPolicyProviders.addBeforeRetryPolicies(policies);
policies.add(new RetryPolicy());
if (credential != null) {
diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyVaultKeysUserAgentPropertiesTest.java b/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyVaultKeysUserAgentPropertiesTest.java
new file mode 100644
index 000000000000..b4c5c0c88f07
--- /dev/null
+++ b/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyVaultKeysUserAgentPropertiesTest.java
@@ -0,0 +1,20 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+package com.azure.security.keyvault.keys;
+
+import com.azure.core.util.CoreUtils;
+import java.util.Map;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class KeyVaultKeysUserAgentPropertiesTest {
+
+ @Test
+ public void testAzureConfiguration() {
+ Map properties = CoreUtils.getProperties("azure-key-vault-keys.properties");
+ assertTrue(properties.get("name").matches("azure-security-keyvault-keys"));
+ assertTrue(properties.get("version").matches("(\\d)+.(\\d)+.(\\d)+([-a-zA-Z0-9.])*"));
+ }
+}
diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/cryptography/CryptographyClientTestBase.java b/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/cryptography/CryptographyClientTestBase.java
index 7d7df1d6280e..31df034c7ffc 100644
--- a/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/cryptography/CryptographyClientTestBase.java
+++ b/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/cryptography/CryptographyClientTestBase.java
@@ -20,7 +20,6 @@
import com.azure.core.test.TestBase;
import com.azure.core.util.Configuration;
import com.azure.identity.DefaultAzureCredentialBuilder;
-import com.azure.security.keyvault.keys.implementation.AzureKeyVaultConfiguration;
import org.junit.jupiter.api.Test;
import java.math.BigInteger;
@@ -45,6 +44,8 @@
public abstract class CryptographyClientTestBase extends TestBase {
+ private static final String SDK_NAME = "client_name";
+ private static final String SDK_VERSION = "client_version";
@Override
protected String getTestName() {
@@ -77,7 +78,7 @@ T clientSetup(Function clientBuilder) {
// Closest to API goes first, closest to wire goes last.
final List policies = new ArrayList<>();
- policies.add(new UserAgentPolicy(AzureKeyVaultConfiguration.SDK_NAME, AzureKeyVaultConfiguration.SDK_VERSION, Configuration.getGlobalConfiguration().clone(), CryptographyServiceVersion.getLatest()));
+ policies.add(new UserAgentPolicy(SDK_NAME, SDK_VERSION, Configuration.getGlobalConfiguration().clone(), CryptographyServiceVersion.getLatest()));
HttpPolicyProviders.addBeforeRetryPolicies(policies);
policies.add(new RetryPolicy());
if (credential != null) {
diff --git a/sdk/keyvault/azure-security-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/AzureKeyVaultConfiguration.java b/sdk/keyvault/azure-security-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/AzureKeyVaultConfiguration.java
deleted file mode 100644
index c3ac3ff8fc93..000000000000
--- a/sdk/keyvault/azure-security-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/AzureKeyVaultConfiguration.java
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-package com.azure.security.keyvault.secrets;
-
-class AzureKeyVaultConfiguration {
- //TODO: Eventually remove these hardcoded strings with https://github.com/Azure/azure-sdk-for-java/issues/3141
- static final String SDK_NAME = "Azure-Keyvault";
- // {x-version-update-start;com.azure:azure-security-keyvault-secrets;current}
- static final String SDK_VERSION = "4.1.0-beta.1";
- // {x-version-update-end}
-}
diff --git a/sdk/keyvault/azure-security-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/SecretClientBuilder.java b/sdk/keyvault/azure-security-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/SecretClientBuilder.java
index 2cc1c59a4a52..c790625ea190 100644
--- a/sdk/keyvault/azure-security-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/SecretClientBuilder.java
+++ b/sdk/keyvault/azure-security-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/SecretClientBuilder.java
@@ -24,6 +24,7 @@
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
/**
@@ -58,8 +59,13 @@
@ServiceClientBuilder(serviceClients = SecretClient.class)
public final class SecretClientBuilder {
private final ClientLogger logger = new ClientLogger(SecretClientBuilder.class);
+ // This is properties file's name.
+ private static final String AZURE_KEY_VAULT_SECRETS = "azure-key-vault-secrets.properties";
+ private static final String SDK_NAME = "name";
+ private static final String SDK_VERSION = "version";
private final List policies;
+ final Map properties;
private TokenCredential credential;
private HttpPipeline pipeline;
private URL vaultUrl;
@@ -76,6 +82,7 @@ public SecretClientBuilder() {
retryPolicy = new RetryPolicy();
httpLogOptions = new HttpLogOptions();
policies = new ArrayList<>();
+ properties = CoreUtils.getProperties(AZURE_KEY_VAULT_SECRETS);
}
/**
@@ -137,7 +144,10 @@ public SecretAsyncClient buildAsyncClient() {
// Closest to API goes first, closest to wire goes last.
final List policies = new ArrayList<>();
- policies.add(new UserAgentPolicy(httpLogOptions.getApplicationId(), AzureKeyVaultConfiguration.SDK_NAME, AzureKeyVaultConfiguration.SDK_VERSION,
+
+ String clientName = properties.getOrDefault(SDK_NAME, "UnknownName");
+ String clientVersion = properties.getOrDefault(SDK_VERSION, "UnknownVersion");
+ policies.add(new UserAgentPolicy(httpLogOptions.getApplicationId(), clientName, clientVersion,
buildConfiguration));
HttpPolicyProviders.addBeforeRetryPolicies(policies);
policies.add(retryPolicy);
diff --git a/sdk/keyvault/azure-security-keyvault-secrets/src/main/resources/azure-key-vault-secrets.properties b/sdk/keyvault/azure-security-keyvault-secrets/src/main/resources/azure-key-vault-secrets.properties
new file mode 100644
index 000000000000..ca812989b4f2
--- /dev/null
+++ b/sdk/keyvault/azure-security-keyvault-secrets/src/main/resources/azure-key-vault-secrets.properties
@@ -0,0 +1,2 @@
+name=${project.artifactId}
+version=${project.version}
diff --git a/sdk/keyvault/azure-security-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/KeyVaultSecretsUserAgentPropertiesTest.java b/sdk/keyvault/azure-security-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/KeyVaultSecretsUserAgentPropertiesTest.java
new file mode 100644
index 000000000000..95aaac5b8de1
--- /dev/null
+++ b/sdk/keyvault/azure-security-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/KeyVaultSecretsUserAgentPropertiesTest.java
@@ -0,0 +1,20 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+package com.azure.security.keyvault.secrets;
+
+import com.azure.core.util.CoreUtils;
+import java.util.Map;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class KeyVaultSecretsUserAgentPropertiesTest {
+
+ @Test
+ public void testAzureConfiguration() {
+ Map properties = CoreUtils.getProperties("azure-key-vault-secrets.properties");
+ assertTrue(properties.get("name").matches("azure-security-keyvault-secrets"));
+ assertTrue(properties.get("version").matches("(\\d)+.(\\d)+.(\\d)+([-a-zA-Z0-9.])*"));
+ }
+}
diff --git a/sdk/keyvault/azure-security-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/SecretClientTestBase.java b/sdk/keyvault/azure-security-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/SecretClientTestBase.java
index 7bc64e3579f2..1af14cd26fe1 100644
--- a/sdk/keyvault/azure-security-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/SecretClientTestBase.java
+++ b/sdk/keyvault/azure-security-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/SecretClientTestBase.java
@@ -45,6 +45,9 @@ public abstract class SecretClientTestBase extends TestBase {
private static final String SECRET_NAME = "javaSecretTemp";
private static final String SECRET_VALUE = "Chocolate is hidden in the toothpaste cabinet";
+ private static final String SDK_NAME = "client_name";
+ private static final String SDK_VERSION = "client_version";
+
@Override
protected String getTestName() {
return "";
@@ -63,7 +66,7 @@ T clientSetup(Function clientBuilder) {
HttpClient httpClient;
// Closest to API goes first, closest to wire goes last.
final List policies = new ArrayList<>();
- policies.add(new UserAgentPolicy(AzureKeyVaultConfiguration.SDK_NAME, AzureKeyVaultConfiguration.SDK_VERSION, Configuration.getGlobalConfiguration().clone(), SecretServiceVersion.getLatest()));
+ policies.add(new UserAgentPolicy(SDK_NAME, SDK_VERSION, Configuration.getGlobalConfiguration().clone(), SecretServiceVersion.getLatest()));
HttpPolicyProviders.addBeforeRetryPolicies(policies);
policies.add(new RetryPolicy());
if (credential != null) {
diff --git a/sdk/storage/azure-storage-blob-cryptography/src/main/java/com/azure/storage/blob/specialized/cryptography/BlobCryptographyConfiguration.java b/sdk/storage/azure-storage-blob-cryptography/src/main/java/com/azure/storage/blob/specialized/cryptography/BlobCryptographyConfiguration.java
deleted file mode 100644
index 604222e54bcb..000000000000
--- a/sdk/storage/azure-storage-blob-cryptography/src/main/java/com/azure/storage/blob/specialized/cryptography/BlobCryptographyConfiguration.java
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-package com.azure.storage.blob.specialized.cryptography;
-
-class BlobCryptographyConfiguration {
- static final String NAME = "azure-storage-blob-cryptography";
- // {x-version-update-start;com.azure:azure-storage-blob-cryptography;current}
- static final String VERSION = "12.2.0-beta.1";
- // {x-version-update-end}
-}
diff --git a/sdk/storage/azure-storage-blob-cryptography/src/main/java/com/azure/storage/blob/specialized/cryptography/CryptographyConstants.java b/sdk/storage/azure-storage-blob-cryptography/src/main/java/com/azure/storage/blob/specialized/cryptography/CryptographyConstants.java
index b6dd0dce1187..bca0671b6b8f 100644
--- a/sdk/storage/azure-storage-blob-cryptography/src/main/java/com/azure/storage/blob/specialized/cryptography/CryptographyConstants.java
+++ b/sdk/storage/azure-storage-blob-cryptography/src/main/java/com/azure/storage/blob/specialized/cryptography/CryptographyConstants.java
@@ -3,6 +3,8 @@
package com.azure.storage.blob.specialized.cryptography;
+import com.azure.core.util.CoreUtils;
+import java.util.Map;
final class CryptographyConstants {
static final String ENCRYPTION_PROTOCOL_V1 = "1.0";
@@ -15,7 +17,9 @@ final class CryptographyConstants {
static final String AES = "AES";
- static final String AGENT_METADATA_VALUE = "JavaTrack2" + BlobCryptographyConfiguration.VERSION;
+ static final Map USER_AGENT_PROPERTIES = CoreUtils.getProperties("azure-storage-blob.properties");
+
+ static final String AGENT_METADATA_VALUE = "JavaTrack2" + USER_AGENT_PROPERTIES.get("version");
static final String ENCRYPTION_DATA_KEY = "encryptiondata";
@@ -34,6 +38,8 @@ final class CryptographyConstants {
static final String DECRYPT_UNENCRYPTED_BLOB = "Encryption client is being used but the blob metadata indicates "
+ "that it is not encrypted.";
+
private CryptographyConstants() {
}
+
}
diff --git a/sdk/storage/azure-storage-blob-cryptography/src/main/java/com/azure/storage/blob/specialized/cryptography/EncryptedBlobClientBuilder.java b/sdk/storage/azure-storage-blob-cryptography/src/main/java/com/azure/storage/blob/specialized/cryptography/EncryptedBlobClientBuilder.java
index ddcbf18452df..6fe06546aade 100644
--- a/sdk/storage/azure-storage-blob-cryptography/src/main/java/com/azure/storage/blob/specialized/cryptography/EncryptedBlobClientBuilder.java
+++ b/sdk/storage/azure-storage-blob-cryptography/src/main/java/com/azure/storage/blob/specialized/cryptography/EncryptedBlobClientBuilder.java
@@ -45,6 +45,8 @@
import java.util.List;
import java.util.Objects;
+import static com.azure.storage.blob.specialized.cryptography.CryptographyConstants.USER_AGENT_PROPERTIES;
+
/**
* This class provides a fluent builder API to help aid the configuration and instantiation of Storage Blob clients.
*
@@ -73,6 +75,8 @@
@ServiceClientBuilder(serviceClients = {EncryptedBlobAsyncClient.class, EncryptedBlobClient.class})
public final class EncryptedBlobClientBuilder {
private final ClientLogger logger = new ClientLogger(EncryptedBlobClientBuilder.class);
+ private static final String SDK_NAME = "name";
+ private static final String SDK_VERSION = "version";
private String endpoint;
private String accountName;
@@ -151,15 +155,15 @@ private HttpPipeline getHttpPipeline() {
return httpPipeline;
}
- String userAgentName = BlobCryptographyConfiguration.NAME;
- String userAgentVersion = BlobCryptographyConfiguration.VERSION;
Configuration userAgentConfiguration = (configuration == null) ? Configuration.NONE : configuration;
// Closest to API goes first, closest to wire goes last.
List policies = new ArrayList<>();
policies.add(new BlobDecryptionPolicy(keyWrapper, keyResolver));
- policies.add(new UserAgentPolicy(logOptions.getApplicationId(), userAgentName, userAgentVersion,
+ String clientName = USER_AGENT_PROPERTIES.getOrDefault(SDK_NAME, "UnknownName");
+ String clientVersion = USER_AGENT_PROPERTIES.getOrDefault(SDK_VERSION, "UnknownVersion");
+ policies.add(new UserAgentPolicy(logOptions.getApplicationId(), clientName, clientVersion,
userAgentConfiguration));
policies.add(new RequestIdPolicy());
policies.add(new AddDatePolicy());
diff --git a/sdk/storage/azure-storage-blob-cryptography/src/main/resources/azure-storage-blob-cryptography.properties b/sdk/storage/azure-storage-blob-cryptography/src/main/resources/azure-storage-blob-cryptography.properties
new file mode 100644
index 000000000000..ca812989b4f2
--- /dev/null
+++ b/sdk/storage/azure-storage-blob-cryptography/src/main/resources/azure-storage-blob-cryptography.properties
@@ -0,0 +1,2 @@
+name=${project.artifactId}
+version=${project.version}
diff --git a/sdk/storage/azure-storage-blob-cryptography/src/test/java/com/azure/storage/blob/specialized/cryptography/BlobCryptographyUserAgentPropertiesTest.groovy b/sdk/storage/azure-storage-blob-cryptography/src/test/java/com/azure/storage/blob/specialized/cryptography/BlobCryptographyUserAgentPropertiesTest.groovy
new file mode 100644
index 000000000000..eb3a60059ac9
--- /dev/null
+++ b/sdk/storage/azure-storage-blob-cryptography/src/test/java/com/azure/storage/blob/specialized/cryptography/BlobCryptographyUserAgentPropertiesTest.groovy
@@ -0,0 +1,18 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+package com.azure.storage.blob.specialized.cryptography
+
+import com.azure.core.util.CoreUtils
+import spock.lang.Specification
+
+class BlobCryptographyUserAgentPropertiesTest extends Specification {
+
+ def "User agent properties not null"() {
+ given:
+ Map properties = CoreUtils.getProperties("azure-storage-blob-cryptography.properties")
+ expect:
+ properties.get("name") == "azure-storage-blob-cryptography"
+ properties.get("version").matches("(\\d)+.(\\d)+.(\\d)+([-a-zA-Z0-9.])*")
+ }
+}
diff --git a/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/implementation/util/BuilderHelper.java b/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/implementation/util/BuilderHelper.java
index f1abf2207f8c..31bcf0dc84ec 100644
--- a/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/implementation/util/BuilderHelper.java
+++ b/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/implementation/util/BuilderHelper.java
@@ -16,6 +16,7 @@
import com.azure.core.http.policy.RequestIdPolicy;
import com.azure.core.http.policy.UserAgentPolicy;
import com.azure.core.util.Configuration;
+import com.azure.core.util.CoreUtils;
import com.azure.core.util.logging.ClientLogger;
import com.azure.storage.blob.BlobUrlParts;
import com.azure.storage.common.StorageSharedKeyCredential;
@@ -30,6 +31,7 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
/**
* This class provides helper methods for common builder patterns.
@@ -37,10 +39,10 @@
* RESERVED FOR INTERNAL USE.
*/
public final class BuilderHelper {
- private static final String DEFAULT_USER_AGENT_NAME = "azure-storage-blob";
- // {x-version-update-start;com.azure:azure-storage-blob;current}
- private static final String DEFAULT_USER_AGENT_VERSION = "12.2.0-beta.1";
- // {x-version-update-end}
+ private static final Map PROPERTIES =
+ CoreUtils.getProperties("azure-storage-blob.properties");
+ private static final String SDK_NAME = "name";
+ private static final String SDK_VERSION = "version";
/**
* Constructs a {@link HttpPipeline} from values passed from a builder.
@@ -153,8 +155,10 @@ public static void httpsValidation(Object objectToCheck, String objectName, Stri
private static UserAgentPolicy getUserAgentPolicy(Configuration configuration) {
configuration = (configuration == null) ? Configuration.NONE : configuration;
- return new UserAgentPolicy(getDefaultHttpLogOptions().getApplicationId(), DEFAULT_USER_AGENT_NAME,
- DEFAULT_USER_AGENT_VERSION, configuration);
+ String clientName = PROPERTIES.getOrDefault(SDK_NAME, "UnknownName");
+ String clientVersion = PROPERTIES.getOrDefault(SDK_VERSION, "UnknownVersion");
+ return new UserAgentPolicy(getDefaultHttpLogOptions().getApplicationId(), clientName, clientVersion,
+ configuration);
}
/*
diff --git a/sdk/storage/azure-storage-blob/src/main/resources/azure-storage-blob.properties b/sdk/storage/azure-storage-blob/src/main/resources/azure-storage-blob.properties
new file mode 100644
index 000000000000..ca812989b4f2
--- /dev/null
+++ b/sdk/storage/azure-storage-blob/src/main/resources/azure-storage-blob.properties
@@ -0,0 +1,2 @@
+name=${project.artifactId}
+version=${project.version}
diff --git a/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/BlobUserAgentPropertiesTest.groovy b/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/BlobUserAgentPropertiesTest.groovy
new file mode 100644
index 000000000000..104ffe20273a
--- /dev/null
+++ b/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/BlobUserAgentPropertiesTest.groovy
@@ -0,0 +1,18 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+package com.azure.storage.blob
+
+import com.azure.core.util.CoreUtils
+import spock.lang.Specification
+
+class BlobUserAgentPropertiesTest extends Specification {
+
+ def "User agent properties not null"() {
+ given:
+ Map properties = CoreUtils.getProperties("azure-storage-blob.properties")
+ expect:
+ properties.get("name") == "azure-storage-blob"
+ properties.get("version").matches("(\\d)+.(\\d)+.(\\d)+([-a-zA-Z0-9.])*")
+ }
+}
diff --git a/sdk/storage/azure-storage-file-datalake/src/main/java/com/azure/storage/file/datalake/implementation/util/BuilderHelper.java b/sdk/storage/azure-storage-file-datalake/src/main/java/com/azure/storage/file/datalake/implementation/util/BuilderHelper.java
index a335d56e47ca..f3dba9d1914b 100644
--- a/sdk/storage/azure-storage-file-datalake/src/main/java/com/azure/storage/file/datalake/implementation/util/BuilderHelper.java
+++ b/sdk/storage/azure-storage-file-datalake/src/main/java/com/azure/storage/file/datalake/implementation/util/BuilderHelper.java
@@ -16,6 +16,7 @@
import com.azure.core.http.policy.RequestIdPolicy;
import com.azure.core.http.policy.UserAgentPolicy;
import com.azure.core.util.Configuration;
+import com.azure.core.util.CoreUtils;
import com.azure.core.util.logging.ClientLogger;
import com.azure.storage.blob.BlobUrlParts;
import com.azure.storage.blob.implementation.util.ModelHelper;
@@ -31,6 +32,7 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
/**
* This class provides helper methods for common builder patterns.
@@ -38,10 +40,10 @@
* RESERVED FOR INTERNAL USE.
*/
public final class BuilderHelper {
- private static final String DEFAULT_USER_AGENT_NAME = "azure-storage-file-datalake";
- // {x-version-update-start;com.azure:azure-storage-file-datalake;current}
- private static final String DEFAULT_USER_AGENT_VERSION = "12.0.0-preview.7";
- // {x-version-update-end}
+ private static final Map PROPERTIES =
+ CoreUtils.getProperties("azure-storage-file-datalake.properties");
+ private static final String SDK_NAME = "name";
+ private static final String SDK_VERSION = "version";
/**
* Constructs a {@link HttpPipeline} from values passed from a builder.
@@ -141,8 +143,10 @@ public static String getEndpoint(BlobUrlParts parts) {
private static UserAgentPolicy getUserAgentPolicy(Configuration configuration) {
configuration = (configuration == null) ? Configuration.NONE : configuration;
- return new UserAgentPolicy(getDefaultHttpLogOptions().getApplicationId(),
- DEFAULT_USER_AGENT_NAME, DEFAULT_USER_AGENT_VERSION, configuration);
+ String clientName = PROPERTIES.getOrDefault(SDK_NAME, "UnknownName");
+ String clientVersion = PROPERTIES.getOrDefault(SDK_VERSION, "UnknownVersion");
+ return new UserAgentPolicy(getDefaultHttpLogOptions().getApplicationId(), clientName, clientVersion,
+ configuration);
}
/*
diff --git a/sdk/storage/azure-storage-file-datalake/src/main/resources/azure-storage-file-datalake.properties b/sdk/storage/azure-storage-file-datalake/src/main/resources/azure-storage-file-datalake.properties
new file mode 100644
index 000000000000..ca812989b4f2
--- /dev/null
+++ b/sdk/storage/azure-storage-file-datalake/src/main/resources/azure-storage-file-datalake.properties
@@ -0,0 +1,2 @@
+name=${project.artifactId}
+version=${project.version}
diff --git a/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/FileConfiguration.java b/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/FileConfiguration.java
deleted file mode 100644
index 8946b7a2df0b..000000000000
--- a/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/FileConfiguration.java
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-package com.azure.storage.file.share;
-
-/*
- * Gets the SDK information for this library component.
- */
-class FileConfiguration {
- //TODO: Eventually remove these hardcoded strings with https://github.com/Azure/azure-sdk-for-java/issues/3141
- static final String NAME = "azure-storage-file-share";
- // {x-version-update-start;com.azure:azure-storage-file-share;current}
- static final String VERSION = "12.1.0-beta.1";
- // {x-version-update-end}
-}
diff --git a/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/implementation/util/BuilderHelper.java b/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/implementation/util/BuilderHelper.java
index 9f1f6ef4526d..64c5c9b393c0 100644
--- a/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/implementation/util/BuilderHelper.java
+++ b/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/implementation/util/BuilderHelper.java
@@ -24,6 +24,7 @@
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import java.util.function.Supplier;
import java.util.regex.Pattern;
@@ -31,10 +32,10 @@
* This class provides helper methods for common builder patterns.
*/
public final class BuilderHelper {
- private static final String DEFAULT_USER_AGENT_NAME = "azure-storage-file-share";
- // {x-version-update-start;com.azure:azure-storage-file-share;current}
- private static final String DEFAULT_USER_AGENT_VERSION = "12.1.0-beta.1";
- // {x-version-update-end}
+ private static final Map PROPERTIES =
+ CoreUtils.getProperties("azure-storage-file-share.properties");
+ private static final String SDK_NAME = "name";
+ private static final String SDK_VERSION = "version";
private static final Pattern IP_URL_PATTERN = Pattern
.compile("(?:\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})|(?:localhost)");
@@ -94,8 +95,10 @@ public static HttpPipeline buildPipeline(Supplier credential
private static UserAgentPolicy getUserAgentPolicy(Configuration configuration) {
configuration = (configuration == null) ? Configuration.NONE : configuration;
- return new UserAgentPolicy(getDefaultHttpLogOptions().getApplicationId(),
- DEFAULT_USER_AGENT_NAME, DEFAULT_USER_AGENT_VERSION, configuration);
+ String clientName = PROPERTIES.getOrDefault(SDK_NAME, "UnknownName");
+ String clientVersion = PROPERTIES.getOrDefault(SDK_VERSION, "UnknownVersion");
+ return new UserAgentPolicy(getDefaultHttpLogOptions().getApplicationId(), clientName, clientVersion,
+ configuration);
}
/**
diff --git a/sdk/storage/azure-storage-file-share/src/main/resources/azure-storage-file-share.properties b/sdk/storage/azure-storage-file-share/src/main/resources/azure-storage-file-share.properties
new file mode 100644
index 000000000000..ca812989b4f2
--- /dev/null
+++ b/sdk/storage/azure-storage-file-share/src/main/resources/azure-storage-file-share.properties
@@ -0,0 +1,2 @@
+name=${project.artifactId}
+version=${project.version}
diff --git a/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileShareUserAgentPropertiesTest.groovy b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileShareUserAgentPropertiesTest.groovy
new file mode 100644
index 000000000000..6630282aa294
--- /dev/null
+++ b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileShareUserAgentPropertiesTest.groovy
@@ -0,0 +1,18 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+package com.azure.storage.file.share
+
+import com.azure.core.util.CoreUtils
+import spock.lang.Specification
+
+class FileShareUserAgentPropertiesTest extends Specification {
+
+ def "User agent properties not null"() {
+ given:
+ Map properties = CoreUtils.getProperties("azure-storage-file-share.properties")
+ expect:
+ properties.get("name") == "azure-storage-file-share"
+ properties.get("version").matches("(\\d)+.(\\d)+.(\\d)+([-a-zA-Z0-9.])*")
+ }
+}
diff --git a/sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/QueueConfiguration.java b/sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/QueueConfiguration.java
deleted file mode 100644
index e2f678e6a109..000000000000
--- a/sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/QueueConfiguration.java
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (c) Microsoft Corporation. All rights reserved.
-// Licensed under the MIT License.
-
-package com.azure.storage.queue;
-
-/*
- * Gets the SDK information for this library component.
- */
-class QueueConfiguration {
- //TODO: Eventually remove these hardcoded strings with https://github.com/Azure/azure-sdk-for-java/issues/3141
- static final String NAME = "azure-storage-queue";
- // {x-version-update-start;com.azure:azure-storage-queue;current}
- static final String VERSION = "12.2.0-beta.1";
- // {x-version-update-end}
-}
diff --git a/sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/util/BuilderHelper.java b/sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/util/BuilderHelper.java
index 1774905f8c67..ec4e615d074c 100644
--- a/sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/util/BuilderHelper.java
+++ b/sdk/storage/azure-storage-queue/src/main/java/com/azure/storage/queue/implementation/util/BuilderHelper.java
@@ -19,7 +19,6 @@
import com.azure.core.util.CoreUtils;
import com.azure.core.util.logging.ClientLogger;
import com.azure.storage.common.StorageSharedKeyCredential;
-import com.azure.storage.common.sas.CommonSasQueryParameters;
import com.azure.storage.common.implementation.Constants;
import com.azure.storage.common.implementation.StorageImplUtils;
import com.azure.storage.common.implementation.credentials.SasTokenCredential;
@@ -29,11 +28,13 @@
import com.azure.storage.common.policy.ResponseValidationPolicyBuilder;
import com.azure.storage.common.policy.ScrubEtagPolicy;
import com.azure.storage.common.policy.StorageSharedKeyCredentialPolicy;
+import com.azure.storage.common.sas.CommonSasQueryParameters;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
import java.util.regex.Pattern;
@@ -41,10 +42,10 @@
* This class provides helper methods for common builder patterns.
*/
public final class BuilderHelper {
- private static final String DEFAULT_USER_AGENT_NAME = "azure-storage-queue";
- // {x-version-update-start;com.azure:azure-storage-queue;current}
- private static final String DEFAULT_USER_AGENT_VERSION = "12.2.0-beta.1";
- // {x-version-update-end}
+ private static final Map PROPERTIES =
+ CoreUtils.getProperties("azure-storage-queue.properties");
+ private static final String SDK_NAME = "name";
+ private static final String SDK_VERSION = "version";
private static final Pattern IP_URL_PATTERN = Pattern
.compile("(?:\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})|(?:localhost)");
@@ -103,7 +104,6 @@ public static QueueUrlParts parseEndpoint(String endpoint, ClientLogger logger)
parts.setEndpoint(String.format("%s://%s", url.getProtocol(), url.getAuthority()));
}
- // TODO (gapra) : What happens if a user has custom queries?
// Attempt to get the SAS token from the URL passed
String sasToken = new CommonSasQueryParameters(
StorageImplUtils.parseQueryStringSplitValues(url.getQuery()), false).encode();
@@ -202,8 +202,10 @@ public static HttpLogOptions getDefaultHttpLogOptions() {
private static UserAgentPolicy getUserAgentPolicy(Configuration configuration) {
configuration = (configuration == null) ? Configuration.NONE : configuration;
- return new UserAgentPolicy(getDefaultHttpLogOptions().getApplicationId(),
- DEFAULT_USER_AGENT_NAME, DEFAULT_USER_AGENT_VERSION, configuration);
+ String clientName = PROPERTIES.getOrDefault(SDK_NAME, "UnknownName");
+ String clientVersion = PROPERTIES.getOrDefault(SDK_VERSION, "UnknownVersion");
+ return new UserAgentPolicy(getDefaultHttpLogOptions().getApplicationId(), clientName, clientVersion,
+ configuration);
}
/*
diff --git a/sdk/storage/azure-storage-queue/src/main/resources/azure-storage-queue.properties b/sdk/storage/azure-storage-queue/src/main/resources/azure-storage-queue.properties
new file mode 100644
index 000000000000..ca812989b4f2
--- /dev/null
+++ b/sdk/storage/azure-storage-queue/src/main/resources/azure-storage-queue.properties
@@ -0,0 +1,2 @@
+name=${project.artifactId}
+version=${project.version}
diff --git a/sdk/storage/azure-storage-queue/src/test/java/com/azure/storage/queue/QueueUserAgentPropertiesTest.groovy b/sdk/storage/azure-storage-queue/src/test/java/com/azure/storage/queue/QueueUserAgentPropertiesTest.groovy
new file mode 100644
index 000000000000..57c874d79253
--- /dev/null
+++ b/sdk/storage/azure-storage-queue/src/test/java/com/azure/storage/queue/QueueUserAgentPropertiesTest.groovy
@@ -0,0 +1,19 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+package com.azure.storage.queue;
+
+import com.azure.core.util.CoreUtils
+import com.azure.core.util.UserAgentProperties
+import spock.lang.Specification
+
+class QueueUserAgentPropertiesTest extends Specification {
+
+ def "User agent properties not null"() {
+ given:
+ Map properties = CoreUtils.getProperties("azure-storage-queue.properties")
+ expect:
+ properties.get("name") == "azure-storage-queue"
+ properties.get("version").matches("(\\d)+.(\\d)+.(\\d)+([-a-zA-Z0-9.])*")
+ }
+}