This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push: new d9ac457 CAMEL-15790: camel-catalog - Validate Endpoint properties now validates api syntax combo of apiName/methodName d9ac457 is described below commit d9ac45705a4ce126d5030d80fe3fd3d39132a0fa Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Tue Nov 17 21:20:40 2020 +0100 CAMEL-15790: camel-catalog - Validate Endpoint properties now validates api syntax combo of apiName/methodName --- .../org/apache/camel/catalog/CamelCatalogTest.java | 24 +++++++++++++ .../camel/catalog/impl/AbstractCamelCatalog.java | 41 ++++++++++++++++++++++ 2 files changed, 65 insertions(+) diff --git a/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java b/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java index dd7b02a..381072d 100644 --- a/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java +++ b/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java @@ -1213,6 +1213,30 @@ public class CamelCatalogTest { result = catalog.validateEndpointProperties(uri); assertFalse(result.isSuccess()); assertTrue(result.getUnknown().contains("unknown")); + + uri = "twilio:account/fetch"; + result = catalog.validateEndpointProperties(uri); + assertTrue(result.isSuccess()); + uri = "twilio:account/fetch?pathSid=123"; + result = catalog.validateEndpointProperties(uri); + assertTrue(result.isSuccess()); + + uri = "twilio:account/update"; + result = catalog.validateEndpointProperties(uri); + assertTrue(result.isSuccess()); + uri = "twilio:account/update?pathSid=123"; + result = catalog.validateEndpointProperties(uri); + assertTrue(result.isSuccess()); + uri = "twilio:account/read"; + result = catalog.validateEndpointProperties(uri); + assertFalse(result.isSuccess()); + assertEquals(2, result.getEnumChoices("methodName").size()); + assertTrue(result.getEnumChoices("methodName").contains("fetch")); + assertTrue(result.getEnumChoices("methodName").contains("update")); + + uri = "twilio:account/read?pathSid=123"; + result = catalog.validateEndpointProperties(uri); + assertFalse(result.isSuccess()); } @Test diff --git a/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/impl/AbstractCamelCatalog.java b/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/impl/AbstractCamelCatalog.java index dba54f6..007b6b5 100644 --- a/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/impl/AbstractCamelCatalog.java +++ b/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/impl/AbstractCamelCatalog.java @@ -349,6 +349,47 @@ public abstract class AbstractCamelCatalog { } } + // for api component then check that the apiName/methodName combo is valid + if (model.isApi()) { + String[] apiSyntax = StringHelper.splitWords(model.getApiSyntax()); + String key1 = properties.get(apiSyntax[0]); + String key2 = apiSyntax.length > 1 ? properties.get(apiSyntax[1]) : null; + + if (key1 != null && key2 != null) { + ApiModel api = model.getApiOptions().stream().filter(o -> o.getName().equalsIgnoreCase(key1)).findFirst().orElse(null); + if (api == null) { + result.addInvalidEnum(apiSyntax[0], key1); + List<String> choices = model.getApiOptions().stream().map(ApiModel::getName).collect(Collectors.toList()); + result.addInvalidEnumChoices(apiSyntax[0], choices.toArray(new String[choices.size()])); + } else { + // walk each method and match against its name/alias + boolean found = false; + for (ApiMethodModel m : api.getMethods()) { + String key3 = apiMethodAlias(api, m); + if (m.getName().equalsIgnoreCase(key2) || key2.equalsIgnoreCase(key3)) { + found = true; + break; + } + } + if (!found) { + result.addInvalidEnum(apiSyntax[1], key2); + List<String> choices = api.getMethods().stream() + .map(m -> { + // favour using method alias in choices + String answer = apiMethodAlias(api, m); + if (answer == null) { + answer = m.getName(); + } + return answer; + }) + .collect(Collectors.toList()); + + result.addInvalidEnumChoices(apiSyntax[1], choices.toArray(new String[choices.size()])); + } + } + } + } + // now check if all required values are there, and that a default value does not exists for (BaseOptionModel row : rows.values()) { if (row.isRequired()) {