Skip to content

Commit 4ebe57b

Browse files
authored
ConnectionString : Default scheme to SB:// in Endpoint if not specified (Azure#14600)
* Default scheme to SB:// if no scheme is provided in endpoint
1 parent 50297c7 commit 4ebe57b

File tree

6 files changed

+50
-4
lines changed

6 files changed

+50
-4
lines changed

eng/versioning/version_client.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ com.microsoft.azure:spring-cloud-azure-eventhubs-stream-binder;1.2.8-beta.1;1.2.
129129
# unreleased_<groupId>:<artifactId>;dependency-version
130130
# note: The unreleased dependencies will not be manipulated with the automatic PR creation code.
131131
unreleased_com.azure:azure-core;1.8.0-beta.1
132+
unreleased_com.azure:azure-core-amqp;1.5.0-beta.1
132133
unreleased_com.azure:azure-messaging-servicebus;7.0.0-beta.5
133134
unreleased_com.azure:azure-security-keyvault-keys;4.3.0-beta.1
134135

sdk/core/azure-core-amqp/src/main/java/com/azure/core/amqp/implementation/ConnectionStringProperties.java

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33

44
package com.azure.core.amqp.implementation;
55

6+
import com.azure.core.util.CoreUtils;
7+
import com.azure.core.util.logging.ClientLogger;
8+
69
import java.net.URI;
710
import java.net.URISyntaxException;
811
import java.util.Locale;
@@ -12,15 +15,22 @@
1215
* The set of properties that comprise a connection string from the Azure portal.
1316
*/
1417
public class ConnectionStringProperties {
18+
private final ClientLogger logger = new ClientLogger(ConnectionStringProperties.class);
19+
1520
private static final String TOKEN_VALUE_SEPARATOR = "=";
21+
private static final String ENDPOINT_SCHEME_SB_PREFIX = "sb://";
22+
private static final String ENDPOINT_SCHEME_HTTP_PREFIX = "http://";
23+
private static final String ENDPOINT_SCHEME_HTTPS_PREFIX = "https://";
1624
private static final String TOKEN_VALUE_PAIR_DELIMITER = ";";
1725
private static final String ENDPOINT = "Endpoint";
1826
private static final String SHARED_ACCESS_KEY_NAME = "SharedAccessKeyName";
1927
private static final String SHARED_ACCESS_KEY = "SharedAccessKey";
2028
private static final String ENTITY_PATH = "EntityPath";
2129
private static final String ERROR_MESSAGE_FORMAT = "Could not parse 'connectionString'. Expected format: "
2230
+ "'Endpoint={endpoint};SharedAccessKeyName={sharedAccessKeyName};"
23-
+ "SharedAccessKey={sharedAccessKey};EntityPath={eventHubName}'. Actual: %s";
31+
+ "SharedAccessKey={sharedAccessKey};EntityPath={entityPath}'. Actual: %s";
32+
private static final String ERROR_MESSAGE_ENDPOINT_FORMAT = "'Endpoint' must be provided in 'connectionString'."
33+
+ " Actual: %s";
2434

2535
private final URI endpoint;
2636
private final String entityPath;
@@ -60,8 +70,9 @@ public ConnectionStringProperties(String connectionString) {
6070
final String value = pair[1].trim();
6171

6272
if (key.equalsIgnoreCase(ENDPOINT)) {
73+
final String endpointUri = validateAndUpdateDefaultScheme(value, connectionString);
6374
try {
64-
endpoint = new URI(value);
75+
endpoint = new URI(endpointUri);
6576
} catch (URISyntaxException e) {
6677
throw new IllegalArgumentException(
6778
String.format(Locale.US, "Invalid endpoint: %s", tokenValuePair), e);
@@ -123,4 +134,25 @@ public String getSharedAccessKeyName() {
123134
public String getSharedAccessKey() {
124135
return sharedAccessKey;
125136
}
137+
138+
/*
139+
* The function checks for pre existing scheme of "sb://" , "http://" or "https://". If the scheme is not provided
140+
* in endpoint, it will set the default scheme to "sb://".
141+
*/
142+
private String validateAndUpdateDefaultScheme(final String endpoint, final String connectionString) {
143+
String updatedEndpoint = endpoint.trim();
144+
145+
if (CoreUtils.isNullOrEmpty(endpoint)) {
146+
throw logger.logExceptionAsError(new IllegalArgumentException(String.format(Locale.US,
147+
ERROR_MESSAGE_ENDPOINT_FORMAT, connectionString)));
148+
149+
}
150+
final String endpointLowerCase = endpoint.toLowerCase(Locale.getDefault());
151+
if (!endpointLowerCase.startsWith(ENDPOINT_SCHEME_SB_PREFIX)
152+
&& !endpointLowerCase.startsWith(ENDPOINT_SCHEME_HTTP_PREFIX)
153+
&& !endpointLowerCase.startsWith(ENDPOINT_SCHEME_HTTPS_PREFIX)) {
154+
updatedEndpoint = ENDPOINT_SCHEME_SB_PREFIX + endpoint;
155+
}
156+
return updatedEndpoint;
157+
}
126158
}

sdk/core/azure-core-amqp/src/test/java/com/azure/core/amqp/implementation/ConnectionStringPropertiesTest.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,18 @@ public void differentEndpointScheme() {
6969
Assertions.assertEquals(EVENT_HUB, properties.getEntityPath());
7070
}
7171

72+
@Test
73+
public void noEndpointSchemeDefault() {
74+
// Arrange
75+
final String connectionString = getConnectionString(HOST, EVENT_HUB, SAS_KEY, SAS_VALUE);
76+
77+
// Act
78+
ConnectionStringProperties properties = new ConnectionStringProperties(connectionString);
79+
80+
// Assert
81+
Assertions.assertEquals("sb", properties.getEndpoint().getScheme());
82+
}
83+
7284
/**
7385
* Verifies we can create ConnectionStringProperties even if there is an extraneous component.
7486
*/

sdk/eventhubs/azure-messaging-eventhubs/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Release History
22

33
## 5.2.0-beta.3 (Unreleased)
4+
- Default scheme to 'sb://' if no scheme is set in 'Endpoint'.
45

56
## 5.2.0-beta.2 (2020-08-14)
67
- Support for object serializer to send and receive strongly-typed objects.

sdk/eventhubs/azure-messaging-eventhubs/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
<dependency>
4343
<groupId>com.azure</groupId>
4444
<artifactId>azure-core-amqp</artifactId>
45-
<version>1.4.0</version> <!-- {x-version-update;com.azure:azure-core-amqp;dependency} -->
45+
<version>1.5.0-beta.1</version> <!-- {x-version-update;unreleased_com.azure:azure-core-amqp;dependency} -->
4646
</dependency>
4747

4848
<!-- Test dependencies -->

sdk/servicebus/azure-messaging-servicebus/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
<dependency>
4848
<groupId>com.azure</groupId>
4949
<artifactId>azure-core-amqp</artifactId>
50-
<version>1.4.0</version> <!-- {x-version-update;com.azure:azure-core-amqp;dependency} -->
50+
<version>1.5.0-beta.1</version> <!-- {x-version-update;unreleased_com.azure:azure-core-amqp;dependency} -->
5151
</dependency>
5252
<dependency>
5353
<groupId>com.azure</groupId>

0 commit comments

Comments
 (0)