Skip to content

Commit 938397f

Browse files
authored
Fixes token retrieval mechanism issue in Authorized version of Connected client versions in AAS/SM Service (#366)
Signed-off-by: Mohammad Ghazanfar Ali Danish <[email protected]>
1 parent 5ffa72d commit 938397f

File tree

5 files changed

+138
-95
lines changed

5 files changed

+138
-95
lines changed

basyx.aasenvironment/basyx.aasenvironment-client/src/main/java/org/eclipse/digitaltwin/basyx/aasenvironment/client/ConnectedAasManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ public ConnectedSubmodelService getSubmodelService(String identifier) {
145145
public List<ConnectedSubmodelService> getAllSubmodels(String shellIdentifier) {
146146
AssetAdministrationShell shell = getAasService(shellIdentifier).getAAS();
147147
List<Reference> submodelReferences = shell.getSubmodels();
148-
return submodelReferences.parallelStream()
148+
return submodelReferences.stream()
149149
.map(this::extractSubmodelIdentifierFromReference)
150150
.map(this::getSubmodelService)
151151
.collect(Collectors.toList());

basyx.aasservice/basyx.aasservice-client/src/main/java/org/eclipse/digitaltwin/basyx/aasservice/client/AuthorizedConnectedAasService.java

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,6 @@
2525

2626
package org.eclipse.digitaltwin.basyx.aasservice.client;
2727

28-
import java.io.IOException;
29-
import java.net.http.HttpRequest;
30-
3128
import org.eclipse.digitaltwin.basyx.aasservice.client.internal.AssetAdministrationShellServiceApi;
3229
import org.eclipse.digitaltwin.basyx.client.internal.authorization.TokenManager;
3330

@@ -46,16 +43,7 @@ public class AuthorizedConnectedAasService extends ConnectedAasService {
4643
* @param tokenManager
4744
*/
4845
public AuthorizedConnectedAasService(String repoUrl, TokenManager tokenManager) {
49-
super(new AssetAdministrationShellServiceApi(repoUrl, getRequestBuilder(tokenManager)));
50-
}
51-
52-
private static HttpRequest.Builder getRequestBuilder(TokenManager tokenManager) {
53-
try {
54-
return HttpRequest.newBuilder()
55-
.header("Authorization", "Bearer " + tokenManager.getAccessToken());
56-
} catch (IOException e) {
57-
throw new RuntimeException("Unable to request access token");
58-
}
46+
super(new AssetAdministrationShellServiceApi(repoUrl, tokenManager));
5947
}
6048

6149
}

basyx.aasservice/basyx.aasservice-client/src/main/java/org/eclipse/digitaltwin/basyx/aasservice/client/internal/AssetAdministrationShellServiceApi.java

Lines changed: 67 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@
5757
import org.eclipse.digitaltwin.basyx.client.internal.ApiException;
5858
import org.eclipse.digitaltwin.basyx.client.internal.ApiResponse;
5959
import org.eclipse.digitaltwin.basyx.client.internal.Pair;
60+
import org.eclipse.digitaltwin.basyx.client.internal.authorization.TokenManager;
61+
import org.eclipse.digitaltwin.basyx.core.exceptions.AccessTokenRetrievalException;
6062
import org.eclipse.digitaltwin.basyx.core.pagination.CursorResult;
6163
import org.eclipse.digitaltwin.basyx.http.description.ServiceDescription;
6264
import org.eclipse.digitaltwin.basyx.http.pagination.Base64UrlEncodedCursorResult;
@@ -73,36 +75,33 @@ public class AssetAdministrationShellServiceApi {
7375
private final Consumer<HttpRequest.Builder> memberVarInterceptor;
7476
private final Duration memberVarReadTimeout;
7577
private final Consumer<HttpResponse<InputStream>> memberVarResponseInterceptor;
76-
private HttpRequest.Builder httpRequestBuilder;
78+
private TokenManager tokenManager;
7779

7880
public AssetAdministrationShellServiceApi() {
7981
this(new ApiClient());
80-
this.httpRequestBuilder = HttpRequest.newBuilder();
8182
}
8283

83-
public AssetAdministrationShellServiceApi(HttpRequest.Builder httpRequestBuilder) {
84-
this();
85-
this.httpRequestBuilder = httpRequestBuilder;
86-
}
84+
public AssetAdministrationShellServiceApi(TokenManager tokenManager) {
85+
this(new ApiClient());
86+
this.tokenManager = tokenManager;
87+
}
8788

8889
public AssetAdministrationShellServiceApi(ObjectMapper mapper, String baseUri) {
8990
this(new ApiClient(HttpClient.newBuilder(), mapper, baseUri));
90-
this.httpRequestBuilder = HttpRequest.newBuilder();
9191
}
9292

93-
public AssetAdministrationShellServiceApi(ObjectMapper mapper, String baseUri, HttpRequest.Builder httpRequestBuilder) {
94-
this(mapper, baseUri);
95-
this.httpRequestBuilder = httpRequestBuilder;
96-
}
93+
public AssetAdministrationShellServiceApi(ObjectMapper mapper, String baseUri, TokenManager tokenManager) {
94+
this(new ApiClient(HttpClient.newBuilder(), mapper, baseUri));
95+
this.tokenManager = tokenManager;
96+
}
9797

9898
public AssetAdministrationShellServiceApi(String baseUri) {
9999
this(new ApiClient(HttpClient.newBuilder(), new JsonMapperFactory().create(new SimpleAbstractTypeResolverFactory().create()), baseUri));
100-
this.httpRequestBuilder = HttpRequest.newBuilder();
101100
}
102101

103-
public AssetAdministrationShellServiceApi(String baseUri, HttpRequest.Builder httpRequestBuilder) {
104-
this(baseUri);
105-
this.httpRequestBuilder = httpRequestBuilder;
102+
public AssetAdministrationShellServiceApi(String baseUri, TokenManager tokenManager) {
103+
this(new ApiClient(HttpClient.newBuilder(), new JsonMapperFactory().create(new SimpleAbstractTypeResolverFactory().create()), baseUri));
104+
this.tokenManager = tokenManager;
106105
}
107106

108107

@@ -201,13 +200,15 @@ private HttpRequest.Builder deleteSubmodelReferenceByIdRequestBuilder(String sub
201200
throw new ApiException(400, "Missing the required parameter 'submodelIdentifier' when calling deleteSubmodelReferenceById");
202201
}
203202

203+
HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder();
204+
204205
String localVarPath = "/submodel-refs/{submodelIdentifier}".replace("{submodelIdentifier}", ApiClient.urlEncode(submodelIdentifier.toString()));
205-
206-
HttpRequest.Builder localVarRequestBuilder = this.httpRequestBuilder.copy();
207206

208207
localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath));
209208

210209
localVarRequestBuilder.header("Accept", "application/json");
210+
211+
addAuthorizationHeaderIfAuthIsEnabled(localVarRequestBuilder);
211212

212213
localVarRequestBuilder.method("DELETE", HttpRequest.BodyPublishers.noBody());
213214
if (memberVarReadTimeout != null) {
@@ -284,13 +285,15 @@ public ApiResponse<Void> deleteThumbnailWithHttpInfoNoUrlEncoding() throws ApiEx
284285

285286
private HttpRequest.Builder deleteThumbnailRequestBuilder() throws ApiException {
286287

288+
HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder();
289+
287290
String localVarPath = "/asset-information/thumbnail";
288-
289-
HttpRequest.Builder localVarRequestBuilder = this.httpRequestBuilder.copy();
290291

291292
localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath));
292293

293294
localVarRequestBuilder.header("Accept", "application/json");
295+
296+
addAuthorizationHeaderIfAuthIsEnabled(localVarRequestBuilder);
294297

295298
localVarRequestBuilder.method("DELETE", HttpRequest.BodyPublishers.noBody());
296299
if (memberVarReadTimeout != null) {
@@ -348,9 +351,9 @@ private ApiResponse<Base64UrlEncodedCursorResult<List<Reference>>> getAllSubmode
348351

349352
private HttpRequest.Builder getAllSubmodelReferencesRequestBuilder(Integer limit, String cursor) throws ApiException {
350353

354+
HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder();
355+
351356
String localVarPath = "/submodel-refs";
352-
353-
HttpRequest.Builder localVarRequestBuilder = this.httpRequestBuilder.copy();
354357

355358
List<Pair> localVarQueryParams = new ArrayList<>();
356359
StringJoiner localVarQueryStringJoiner = new StringJoiner("&");
@@ -369,6 +372,8 @@ private HttpRequest.Builder getAllSubmodelReferencesRequestBuilder(Integer limit
369372
}
370373

371374
localVarRequestBuilder.header("Accept", "application/json");
375+
376+
addAuthorizationHeaderIfAuthIsEnabled(localVarRequestBuilder);
372377

373378
localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody());
374379
if (memberVarReadTimeout != null) {
@@ -440,11 +445,13 @@ public ApiResponse<AssetAdministrationShell> getAssetAdministrationShellWithHttp
440445

441446
private HttpRequest.Builder getAssetAdministrationShellRequestBuilder() throws ApiException {
442447

443-
HttpRequest.Builder localVarRequestBuilder = this.httpRequestBuilder.copy();
444-
448+
HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder();
449+
445450
localVarRequestBuilder.uri(URI.create(memberVarBaseUri));
446451

447452
localVarRequestBuilder.header("Accept", "application/json");
453+
454+
addAuthorizationHeaderIfAuthIsEnabled(localVarRequestBuilder);
448455

449456
localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody());
450457
if (memberVarReadTimeout != null) {
@@ -523,6 +530,8 @@ private HttpRequest.Builder getAssetAdministrationShellReferenceRequestBuilder()
523530
localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath));
524531

525532
localVarRequestBuilder.header("Accept", "application/json");
533+
534+
addAuthorizationHeaderIfAuthIsEnabled(localVarRequestBuilder);
526535

527536
localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody());
528537
if (memberVarReadTimeout != null) {
@@ -594,13 +603,15 @@ public ApiResponse<AssetInformation> getAssetInformationWithHttpInfoNoUrlEncodin
594603

595604
private HttpRequest.Builder getAssetInformationRequestBuilder() throws ApiException {
596605

606+
HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder();
607+
597608
String localVarPath = "/asset-information";
598-
599-
HttpRequest.Builder localVarRequestBuilder = this.httpRequestBuilder.copy();
600609

601610
localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath));
602611

603612
localVarRequestBuilder.header("Accept", "application/json");
613+
614+
addAuthorizationHeaderIfAuthIsEnabled(localVarRequestBuilder);
604615

605616
localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody());
606617
if (memberVarReadTimeout != null) {
@@ -679,6 +690,8 @@ private HttpRequest.Builder getDescriptionRequestBuilder() throws ApiException {
679690
localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath));
680691

681692
localVarRequestBuilder.header("Accept", "application/json");
693+
694+
addAuthorizationHeaderIfAuthIsEnabled(localVarRequestBuilder);
682695

683696
localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody());
684697
if (memberVarReadTimeout != null) {
@@ -748,13 +761,15 @@ public ApiResponse<File> getThumbnailWithHttpInfoNoUrlEncoding() throws ApiExcep
748761

749762
private HttpRequest.Builder getThumbnailRequestBuilder() throws ApiException {
750763

764+
HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder();
765+
751766
String localVarPath = "/asset-information/thumbnail";
752-
753-
HttpRequest.Builder localVarRequestBuilder = this.httpRequestBuilder.copy();
754767

755768
localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath));
756769

757770
localVarRequestBuilder.header("Accept", "application/octet-stream, application/json");
771+
772+
addAuthorizationHeaderIfAuthIsEnabled(localVarRequestBuilder);
758773

759774
localVarRequestBuilder.method("GET", HttpRequest.BodyPublishers.noBody());
760775
if (memberVarReadTimeout != null) {
@@ -833,14 +848,16 @@ private HttpRequest.Builder postSubmodelReferenceRequestBuilder(Reference refere
833848
throw new ApiException(400, "Missing the required parameter 'reference' when calling postSubmodelReference");
834849
}
835850

851+
HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder();
852+
836853
String localVarPath = "/submodel-refs";
837-
838-
HttpRequest.Builder localVarRequestBuilder = this.httpRequestBuilder.copy();
839854

840855
localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath));
841856

842857
localVarRequestBuilder.header("Content-Type", "application/json");
843858
localVarRequestBuilder.header("Accept", "application/json");
859+
860+
addAuthorizationHeaderIfAuthIsEnabled(localVarRequestBuilder);
844861

845862
try {
846863
byte[] localVarPostBody = memberVarObjectMapper.writeValueAsBytes(reference);
@@ -935,6 +952,8 @@ private HttpRequest.Builder putAssetAdministrationShellRequestBuilder(AssetAdmin
935952

936953
localVarRequestBuilder.header("Content-Type", "application/json");
937954
localVarRequestBuilder.header("Accept", "application/json");
955+
956+
addAuthorizationHeaderIfAuthIsEnabled(localVarRequestBuilder);
938957

939958
try {
940959
byte[] localVarPostBody = memberVarObjectMapper.writeValueAsBytes(assetAdministrationShell);
@@ -1021,14 +1040,16 @@ private HttpRequest.Builder putAssetInformationRequestBuilder(AssetInformation a
10211040
throw new ApiException(400, "Missing the required parameter 'assetInformation' when calling putAssetInformation");
10221041
}
10231042

1043+
HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder();
1044+
10241045
String localVarPath = "/asset-information";
1025-
1026-
HttpRequest.Builder localVarRequestBuilder = this.httpRequestBuilder.copy();
10271046

10281047
localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath));
10291048

10301049
localVarRequestBuilder.header("Content-Type", "application/json");
10311050
localVarRequestBuilder.header("Accept", "application/json");
1051+
1052+
addAuthorizationHeaderIfAuthIsEnabled(localVarRequestBuilder);
10321053

10331054
try {
10341055
byte[] localVarPostBody = memberVarObjectMapper.writeValueAsBytes(assetInformation);
@@ -1087,11 +1108,8 @@ private ApiResponse<Void> putThumbnailWithHttpInfoNoUrlEncoding(String fileName,
10871108
}
10881109

10891110
private HttpRequest.Builder putThumbnailRequestBuilder(String fileName, ContentType contentType, InputStream inputStream) throws ApiException {
1090-
1111+
HttpRequest.Builder localVarRequestBuilder = HttpRequest.newBuilder();
10911112
String localVarPath = "/asset-information/thumbnail";
1092-
1093-
HttpRequest.Builder localVarRequestBuilder = this.httpRequestBuilder.copy();
1094-
10951113
localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath));
10961114
localVarRequestBuilder.header("Accept", "application/json");
10971115

@@ -1118,6 +1136,8 @@ private HttpRequest.Builder putThumbnailRequestBuilder(String fileName, ContentT
11181136
HttpRequest.BodyPublisher formDataPublisher = HttpRequest.BodyPublishers.ofInputStream(() -> Channels.newInputStream(pipe.source()));
11191137

11201138
localVarRequestBuilder.header("Content-Type", entity.getContentType().getValue()).method("PUT", formDataPublisher);
1139+
1140+
addAuthorizationHeaderIfAuthIsEnabled(localVarRequestBuilder);
11211141

11221142
if (memberVarReadTimeout != null) {
11231143
localVarRequestBuilder.timeout(memberVarReadTimeout);
@@ -1140,5 +1160,16 @@ private static String extractFileName(HttpHeaders headers) {
11401160
private static String buildUniqueFilename() {
11411161
return UUID.randomUUID().toString();
11421162
}
1163+
1164+
private void addAuthorizationHeaderIfAuthIsEnabled(HttpRequest.Builder localVarRequestBuilder) {
1165+
if (tokenManager != null) {
1166+
try {
1167+
localVarRequestBuilder.header("Authorization", "Bearer " + tokenManager.getAccessToken());
1168+
} catch (IOException e) {
1169+
e.printStackTrace();
1170+
throw new AccessTokenRetrievalException("Unable to request access token");
1171+
}
1172+
}
1173+
}
11431174

1144-
}
1175+
}

basyx.submodelservice/basyx.submodelservice-client/src/main/java/org/eclipse/digitaltwin/basyx/submodelservice/client/AuthorizedConnectedSubmodelService.java

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,6 @@
2525

2626
package org.eclipse.digitaltwin.basyx.submodelservice.client;
2727

28-
import java.io.IOException;
29-
import java.net.http.HttpRequest;
30-
3128
import org.eclipse.digitaltwin.basyx.client.internal.authorization.TokenManager;
3229
import org.eclipse.digitaltwin.basyx.submodelservice.client.internal.SubmodelServiceApi;
3330

@@ -46,17 +43,7 @@ public class AuthorizedConnectedSubmodelService extends ConnectedSubmodelService
4643
* @param tokenManager
4744
*/
4845
public AuthorizedConnectedSubmodelService(String repoUrl, TokenManager tokenManager) {
49-
super(new SubmodelServiceApi(repoUrl, getRequestBuilder(tokenManager)));
50-
}
51-
52-
private static HttpRequest.Builder getRequestBuilder(TokenManager tokenManager) {
53-
try {
54-
return HttpRequest.newBuilder()
55-
.header("Authorization", "Bearer " + tokenManager.getAccessToken());
56-
} catch (IOException e) {
57-
e.printStackTrace();
58-
throw new RuntimeException("Unable to request access token");
59-
}
46+
super(new SubmodelServiceApi(repoUrl, tokenManager));
6047
}
6148

6249
}

0 commit comments

Comments
 (0)