Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 16 additions & 4 deletions sdk/keyvault/azure-security-keyvault-secrets/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,26 @@
# Release History

## 4.11.0-beta.2 (Unreleased)
## 4.11.0-beta.2 (2026-05-18)

### Features Added

### Breaking Changes
#### `models.SecretProperties` was modified

### Bugs Fixed
* `getPreviousVersion()` was added

### Other Changes
#### `SecretClient` was modified

* `getSecretWithResponse(java.lang.String,java.lang.String,java.lang.String,com.azure.core.util.Context)` was added
* `getSecret(java.lang.String,java.lang.String,java.lang.String)` was added

#### `SecretServiceVersion` was modified

* `V2026_03_01_PREVIEW` was added

#### `SecretAsyncClient` was modified

* `getSecret(java.lang.String,java.lang.String,java.lang.String)` was added
* `getSecretWithResponse(java.lang.String,java.lang.String,java.lang.String)` was added

## 4.10.7 (2026-05-05)

Expand Down
2 changes: 1 addition & 1 deletion sdk/keyvault/azure-security-keyvault-secrets/assets.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
"AssetsRepo": "Azure/azure-sdk-assets",
"AssetsRepoPrefixPath": "java",
"TagPrefix": "java/keyvault/azure-security-keyvault-secrets",
"Tag": "java/keyvault/azure-security-keyvault-secrets_d3c81a13be"
"Tag": "java/keyvault/azure-security-keyvault-secrets_157d16541f"
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,8 @@ private static void customizeServiceVersion(LibraryCustomization customization)
.addImplementedType("ServiceVersion")
.setJavadocComment("The versions of Azure Key Vault Secrets supported by this client library.");

for (String version : Arrays.asList("7.0", "7.1", "7.2", "7.3", "7.4", "7.5", "7.6", "2025-07-01")) {
for (String version : Arrays.asList("7.0", "7.1", "7.2", "7.3", "7.4", "7.5", "7.6", "2025-07-01",
"2026-03-01-preview")) {
enumDeclaration.addEnumConstant("V" + version.replace('.', '_').replace('-', '_').toUpperCase())
.setJavadocComment("Service version {@code " + version + "}.")
.addArgument(new StringLiteralExpr(version));
Expand All @@ -70,7 +71,7 @@ private static void customizeServiceVersion(LibraryCustomization customization)
.setType("SecretServiceVersion")
.setJavadocComment(new Javadoc(parseText("Gets the latest service version supported by this client library."))
.addBlockTag("return", "The latest {@link SecretServiceVersion}."))
.setBody(StaticJavaParser.parseBlock("{ return V2025_07_01; }"));
.setBody(StaticJavaParser.parseBlock("{ return V2026_03_01_PREVIEW; }"));

customization.getRawEditor()
.addFile("src/main/java/com/azure/security/keyvault/secrets/SecretServiceVersion.java",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,11 @@ public enum SecretServiceVersion implements ServiceVersion {
/**
* Service version {@code 2025-07-01}.
*/
V2025_07_01("2025-07-01");
V2025_07_01("2025-07-01"),
/**
* Service version {@code 2026-03-01-preview}.
*/
V2026_03_01_PREVIEW("2026-03-01-preview");

private final String version;

Expand All @@ -63,6 +67,6 @@ public String getVersion() {
* @return The latest {@link SecretServiceVersion}.
*/
public static SecretServiceVersion getLatest() {
return V2025_07_01;
return V2026_03_01_PREVIEW;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@
import org.junit.jupiter.api.Test;
import reactor.core.publisher.Mono;

import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.concurrent.atomic.AtomicReference;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
Expand Down Expand Up @@ -82,6 +84,90 @@ public void buildAsyncClientUsingDefaultApiVersionTest() {
assertEquals(SecretAsyncClient.class.getSimpleName(), secretAsyncClient.getClass().getSimpleName());
}

@Test
public void latestServiceVersionIs20260301Preview() {
assertEquals("2026-03-01-preview", SecretServiceVersion.V2026_03_01_PREVIEW.getVersion());
assertEquals(SecretServiceVersion.V2026_03_01_PREVIEW, SecretServiceVersion.getLatest());
}

@Test
public void defaultClientUsesLatestServiceVersion() {
AtomicReference<String> requestedUrl = new AtomicReference<>();
SecretClient secretClient = new SecretClientBuilder().vaultUrl(vaultUrl)
.credential(new TestUtils.TestCredential())
.httpClient(request -> {
requestedUrl.set(request.getUrl().toString());
return Mono.just(new MockHttpResponse(request, 200,
("{\"value\":\"secret-value\","
+ "\"id\":\"https://key-vault-url.vault.azure.net/secrets/TestSecret/version\"}")
.getBytes(StandardCharsets.UTF_8)));
})
.buildClient();

secretClient.getSecret(secretName);

assertTrue(requestedUrl.get().contains("api-version=2026-03-01-preview"));
}

@Test
public void configuredClientUses20260301PreviewServiceVersion() {
AtomicReference<String> requestedUrl = new AtomicReference<>();
SecretClient secretClient = new SecretClientBuilder().vaultUrl(vaultUrl)
.serviceVersion(SecretServiceVersion.V2026_03_01_PREVIEW)
.credential(new TestUtils.TestCredential())
.httpClient(request -> {
requestedUrl.set(request.getUrl().toString());
return Mono.just(new MockHttpResponse(request, 200,
("{\"value\":\"secret-value\","
+ "\"id\":\"https://key-vault-url.vault.azure.net/secrets/TestSecret/version\"}")
.getBytes(StandardCharsets.UTF_8)));
})
.buildClient();

secretClient.getSecret(secretName);

assertTrue(requestedUrl.get().contains("api-version=2026-03-01-preview"));
}

@Test
public void defaultAsyncClientUsesLatestServiceVersion() {
AtomicReference<String> requestedUrl = new AtomicReference<>();
SecretAsyncClient secretAsyncClient = new SecretClientBuilder().vaultUrl(vaultUrl)
.credential(new TestUtils.TestCredential())
.httpClient(request -> {
requestedUrl.set(request.getUrl().toString());
return Mono.just(new MockHttpResponse(request, 200,
("{\"value\":\"secret-value\","
+ "\"id\":\"https://key-vault-url.vault.azure.net/secrets/TestSecret/version\"}")
.getBytes(StandardCharsets.UTF_8)));
})
.buildAsyncClient();

secretAsyncClient.getSecret(secretName).block();

assertTrue(requestedUrl.get().contains("api-version=2026-03-01-preview"));
}

@Test
public void configuredAsyncClientUses20260301PreviewServiceVersion() {
AtomicReference<String> requestedUrl = new AtomicReference<>();
SecretAsyncClient secretAsyncClient = new SecretClientBuilder().vaultUrl(vaultUrl)
.serviceVersion(SecretServiceVersion.V2026_03_01_PREVIEW)
.credential(new TestUtils.TestCredential())
.httpClient(request -> {
requestedUrl.set(request.getUrl().toString());
return Mono.just(new MockHttpResponse(request, 200,
("{\"value\":\"secret-value\","
+ "\"id\":\"https://key-vault-url.vault.azure.net/secrets/TestSecret/version\"}")
.getBytes(StandardCharsets.UTF_8)));
})
.buildAsyncClient();

secretAsyncClient.getSecret(secretName).block();

assertTrue(requestedUrl.get().contains("api-version=2026-03-01-preview"));
}

@Test
public void emptyVaultUrlThrowsIllegalArgumentException() {
assertThrows(IllegalArgumentException.class, () -> new SecretClientBuilder().vaultUrl(""));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
directory: specification/keyvault/data-plane/Secrets
commit: 3d69f01137e1271361cc8003e399475cbfefadec
commit: ea20c467080ed3d3875c8b5aeff28ce52f6a55ca
repo: Azure/azure-rest-api-specs
additionalDirectories:
- specification/keyvault/data-plane/Secrets/common