Skip to content

Commit 21efb53

Browse files
authored
Merge pull request #52 from bosch-io/bugfix/append-ws-path
Append ws path only if needed
2 parents 33269b0 + 892c593 commit 21efb53

File tree

1 file changed

+37
-10
lines changed

1 file changed

+37
-10
lines changed

java/src/main/java/org/eclipse/ditto/client/configuration/WebSocketMessagingConfiguration.java

Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,19 @@
1212
*/
1313
package org.eclipse.ditto.client.configuration;
1414

15-
import static org.eclipse.ditto.model.base.common.ConditionChecker.checkArgument;
16-
import static org.eclipse.ditto.model.base.common.ConditionChecker.checkNotNull;
15+
import org.eclipse.ditto.model.base.json.JsonSchemaVersion;
1716

17+
import javax.annotation.Nullable;
1818
import java.net.URI;
1919
import java.text.MessageFormat;
2020
import java.util.Arrays;
2121
import java.util.List;
2222
import java.util.Optional;
23+
import java.util.regex.Matcher;
24+
import java.util.regex.Pattern;
2325

24-
import javax.annotation.Nullable;
25-
26-
import org.eclipse.ditto.model.base.json.JsonSchemaVersion;
26+
import static org.eclipse.ditto.model.base.common.ConditionChecker.checkArgument;
27+
import static org.eclipse.ditto.model.base.common.ConditionChecker.checkNotNull;
2728

2829
/**
2930
* Provides Ditto WebSocket messaging specific configuration.
@@ -81,6 +82,7 @@ private static final class WebSocketMessagingConfigurationBuilder implements Mes
8182

8283
private static final List<String> ALLOWED_URI_SCHEME = Arrays.asList("wss", "ws");
8384
private static final String WS_PATH = "/ws/";
85+
private static final String WS_PATH_REGEX = "/ws/(1|2)/?";
8486

8587
private JsonSchemaVersion jsonSchemaVersion = JsonSchemaVersion.LATEST;
8688
private URI endpointUri;
@@ -128,15 +130,40 @@ public MessagingConfiguration.Builder trustStoreConfiguration(
128130

129131
@Override
130132
public MessagingConfiguration build() {
131-
final URI wsEndpointUri = appendWsPath(this.endpointUri, jsonSchemaVersion);
133+
final URI wsEndpointUri= appendWsPathIfNecessary(this.endpointUri, jsonSchemaVersion);
132134
return new WebSocketMessagingConfiguration(jsonSchemaVersion, wsEndpointUri, reconnectEnabled,
133135
proxyConfiguration, trustStoreConfiguration);
134136
}
135137

136-
private static URI appendWsPath(final URI baseUri, final JsonSchemaVersion schemaVersion) {
137-
final String pathWithoutTrailingSlashes = baseUri.getPath().replaceFirst("/+$", "");
138-
final String newPath = pathWithoutTrailingSlashes + WS_PATH + schemaVersion.toString();
139-
return baseUri.resolve(newPath);
138+
private static URI appendWsPathIfNecessary(final URI baseUri, final JsonSchemaVersion schemaVersion) {
139+
if (needToAppendWsPath(baseUri)) {
140+
final String pathWithoutTrailingSlashes = removeTrailingSlashFromPath(baseUri.getPath());
141+
final String newPath = pathWithoutTrailingSlashes + WS_PATH + schemaVersion.toString();
142+
return baseUri.resolve(newPath);
143+
} else {
144+
checkIfBaseUriAndSchemaVersionMatch(baseUri, schemaVersion);
145+
return baseUri;
146+
}
147+
}
148+
149+
private static boolean needToAppendWsPath(final URI baseUri) {
150+
final Pattern pattern = Pattern.compile(WS_PATH_REGEX);
151+
final Matcher matcher = pattern.matcher(baseUri.toString());
152+
return !matcher.find();
153+
}
154+
155+
private static void checkIfBaseUriAndSchemaVersionMatch(final URI baseUri, final JsonSchemaVersion schemaVersion) {
156+
final String path = removeTrailingSlashFromPath(baseUri.getPath());
157+
final String apiVersion = path.substring(path.length() - 1, path.length());
158+
if (!schemaVersion.toString().equals(apiVersion)) {
159+
throw new IllegalArgumentException("The jsonSchemaVersion and apiVersion of the endpoint do not match. " +
160+
"Either remove the ws path from the endpoint or " +
161+
"use the same jsonSchemaVersion as in the ws path of the endpoint.");
162+
}
163+
}
164+
165+
private static String removeTrailingSlashFromPath(final String path) {
166+
return path.replaceFirst("/+$", "");
140167
}
141168

142169
}

0 commit comments

Comments
 (0)