From 757c1a066c08125d6ad170f35a6ad66943492e88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20J=C3=A4ckle?= Date: Fri, 5 Apr 2024 16:40:31 +0200 Subject: [PATCH] fix recursive lookup of tm:refs in WoT model extension resolving --- .../generator/DefaultWotThingModelExtensionResolver.java | 8 ++++++++ .../java/org/eclipse/ditto/wot/model/SecurityScheme.java | 3 ++- .../org/eclipse/ditto/wot/model/SingleDataSchema.java | 3 ++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/wot/integration/src/main/java/org/eclipse/ditto/wot/integration/generator/DefaultWotThingModelExtensionResolver.java b/wot/integration/src/main/java/org/eclipse/ditto/wot/integration/generator/DefaultWotThingModelExtensionResolver.java index 8ae61474a2..631d2673d8 100644 --- a/wot/integration/src/main/java/org/eclipse/ditto/wot/integration/generator/DefaultWotThingModelExtensionResolver.java +++ b/wot/integration/src/main/java/org/eclipse/ditto/wot/integration/generator/DefaultWotThingModelExtensionResolver.java @@ -147,6 +147,14 @@ private CompletionStage resolveRefs(final JsonObject objectWithTmRef, .orElseGet(() -> CompletableFuture.completedFuture(null)) , executor ) + .thenCompose(refObject -> { + if (refObject.contains(TM_REF)) { + return resolveRefs(refObject, dittoHeaders) // recurse! + .thenApply(JsonValue::asObject); + } else { + return potentiallyResolveRefs(refObject, dittoHeaders); // recurse! + } + }) .thenApply(refObject -> JsonFactory.mergeJsonValues(objectWithTmRef.remove(TM_REF), refObject).asObject() ); diff --git a/wot/model/src/main/java/org/eclipse/ditto/wot/model/SecurityScheme.java b/wot/model/src/main/java/org/eclipse/ditto/wot/model/SecurityScheme.java index d53c58d034..3354ff827b 100644 --- a/wot/model/src/main/java/org/eclipse/ditto/wot/model/SecurityScheme.java +++ b/wot/model/src/main/java/org/eclipse/ditto/wot/model/SecurityScheme.java @@ -82,7 +82,8 @@ static SecurityScheme fromJson(final CharSequence securitySchemeName, final Json return AdditionalSecurityScheme.fromJson(schemeName, jsonObject); } }) - .orElseThrow(() -> new IllegalArgumentException("Could not create SingleDataSchema")); + .orElseThrow(() -> new IllegalArgumentException("Could not create SecurityScheme - " + + "json field <" + SecuritySchemeJsonFields.SCHEME.getPointer() + "> was missing or unknown")); } static NoSecurityScheme.Builder newNoSecurityBuilder(final CharSequence securitySchemeName) { diff --git a/wot/model/src/main/java/org/eclipse/ditto/wot/model/SingleDataSchema.java b/wot/model/src/main/java/org/eclipse/ditto/wot/model/SingleDataSchema.java index 19d0e1b839..036a69c8ae 100644 --- a/wot/model/src/main/java/org/eclipse/ditto/wot/model/SingleDataSchema.java +++ b/wot/model/src/main/java/org/eclipse/ditto/wot/model/SingleDataSchema.java @@ -68,7 +68,8 @@ static SingleDataSchema fromJson(final JsonObject jsonObject) { throw new IllegalArgumentException("Unsupported dataSchema-type: " + type); } }) - .orElseThrow(() -> new IllegalArgumentException("Could not create SingleDataSchema")); + .orElseThrow(() -> new IllegalArgumentException("Could not create SingleDataSchema - " + + "json field <" + DataSchemaJsonFields.TYPE.getPointer() + "> was missing or unknown")); } static BooleanSchema.Builder newBooleanSchemaBuilder() {