This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch camel-3.4.x in repository https://gitbox.apache.org/repos/asf/camel.git
commit fb81686dff1a95c613f43d3e95aa1446d65bb085 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Sun Aug 9 17:33:49 2020 +0200 CAMEL-15387: camel-salesforce: Can't set Salesforce packages via application properties --- .../salesforce/SalesforceComponentConfigurer.java | 4 +-- .../camel/component/salesforce/salesforce.json | 2 +- .../src/main/docs/salesforce-component.adoc | 2 +- .../component/salesforce/SalesforceComponent.java | 32 +++++++++++++++------- .../dsl/SalesforceComponentBuilderFactory.java | 9 +++--- 5 files changed, 31 insertions(+), 18 deletions(-) diff --git a/components/camel-salesforce/camel-salesforce-component/src/generated/java/org/apache/camel/component/salesforce/SalesforceComponentConfigurer.java b/components/camel-salesforce/camel-salesforce-component/src/generated/java/org/apache/camel/component/salesforce/SalesforceComponentConfigurer.java index 15188e4..d239777 100644 --- a/components/camel-salesforce/camel-salesforce-component/src/generated/java/org/apache/camel/component/salesforce/SalesforceComponentConfigurer.java +++ b/components/camel-salesforce/camel-salesforce-component/src/generated/java/org/apache/camel/component/salesforce/SalesforceComponentConfigurer.java @@ -126,7 +126,7 @@ public class SalesforceComponentConfigurer extends PropertyConfigurerSupport imp case "notifyForOperations": getOrCreateConfiguration(target).setNotifyForOperations(property(camelContext, org.apache.camel.component.salesforce.internal.dto.NotifyForOperationsEnum.class, value)); return true; case "objectmapper": case "objectMapper": getOrCreateConfiguration(target).setObjectMapper(property(camelContext, com.fasterxml.jackson.databind.ObjectMapper.class, value)); return true; - case "packages": target.setPackages(property(camelContext, java.lang.String[].class, value)); return true; + case "packages": target.setPackages(property(camelContext, java.lang.String.class, value)); return true; case "password": target.setPassword(property(camelContext, java.lang.String.class, value)); return true; case "rawpayload": case "rawPayload": getOrCreateConfiguration(target).setRawPayload(property(camelContext, boolean.class, value)); return true; @@ -223,7 +223,7 @@ public class SalesforceComponentConfigurer extends PropertyConfigurerSupport imp answer.put("notifyForOperationUpdate", java.lang.Boolean.class); answer.put("notifyForOperations", org.apache.camel.component.salesforce.internal.dto.NotifyForOperationsEnum.class); answer.put("objectMapper", com.fasterxml.jackson.databind.ObjectMapper.class); - answer.put("packages", java.lang.String[].class); + answer.put("packages", java.lang.String.class); answer.put("password", java.lang.String.class); answer.put("rawPayload", boolean.class); answer.put("refreshToken", java.lang.String.class); diff --git a/components/camel-salesforce/camel-salesforce-component/src/generated/resources/org/apache/camel/component/salesforce/salesforce.json b/components/camel-salesforce/camel-salesforce-component/src/generated/resources/org/apache/camel/component/salesforce/salesforce.json index ea36b85..9f1aeae 100644 --- a/components/camel-salesforce/camel-salesforce-component/src/generated/resources/org/apache/camel/component/salesforce/salesforce.json +++ b/components/camel-salesforce/camel-salesforce-component/src/generated/resources/org/apache/camel/component/salesforce/salesforce.json @@ -49,7 +49,7 @@ "notifyForOperationUndelete": { "kind": "property", "displayName": "Notify For Operation Undelete", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.salesforce.SalesforceEndpointConfig", "configurationField": "config", "description": "Notify for un-delete operation, defaults to false (API version = 29.0)" }, "notifyForOperationUpdate": { "kind": "property", "displayName": "Notify For Operation Update", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.salesforce.SalesforceEndpointConfig", "configurationField": "config", "description": "Notify for update operation, defaults to false (API version = 29.0)" }, "objectMapper": { "kind": "property", "displayName": "Object Mapper", "group": "common", "label": "", "required": false, "type": "object", "javaType": "com.fasterxml.jackson.databind.ObjectMapper", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.salesforce.SalesforceEndpointConfig", "configurationField": "config", "description": "Custom Jackson ObjectMapper to use when serializing\/deserializing Salesforce objects." }, - "packages": { "kind": "property", "displayName": "Packages", "group": "common", "label": "common", "required": false, "type": "array", "javaType": "java.lang.String[]", "deprecated": false, "secret": false, "description": "In what packages are the generated DTO classes. Typically the classes would be generated using camel-salesforce-maven-plugin. Set it if using the generated DTOs to gain the benefit of using short SObject names in parameters\/header values." }, + "packages": { "kind": "property", "displayName": "Packages", "group": "common", "label": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "In what packages are the generated DTO classes. Typically the classes would be generated using camel-salesforce-maven-plugin. Set it if using the generated DTOs to gain the benefit of using short SObject names in parameters\/header values. Multiple packages can be s [...] "rawPayload": { "kind": "property", "displayName": "Raw Payload", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.salesforce.SalesforceEndpointConfig", "configurationField": "config", "description": "Use raw payload String for request and response (either JSON or XML depending on format), instead of DTOs, false by default" }, "reportId": { "kind": "property", "displayName": "Report Id", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.salesforce.SalesforceEndpointConfig", "configurationField": "config", "description": "Salesforce1 Analytics report Id" }, "reportMetadata": { "kind": "property", "displayName": "Report Metadata", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.salesforce.api.dto.analytics.reports.ReportMetadata", "deprecated": false, "secret": false, "configurationClass": "org.apache.camel.component.salesforce.SalesforceEndpointConfig", "configurationField": "config", "description": "Salesforce1 Analytics report metadata for filtering" }, diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/docs/salesforce-component.adoc b/components/camel-salesforce/camel-salesforce-component/src/main/docs/salesforce-component.adoc index f3168a2..c83d9a9 100644 --- a/components/camel-salesforce/camel-salesforce-component/src/main/docs/salesforce-component.adoc +++ b/components/camel-salesforce/camel-salesforce-component/src/main/docs/salesforce-component.adoc @@ -689,7 +689,7 @@ The Salesforce component supports 72 options, which are listed below. | *notifyForOperationUndelete* (common) | Notify for un-delete operation, defaults to false (API version = 29.0) | | Boolean | *notifyForOperationUpdate* (common) | Notify for update operation, defaults to false (API version = 29.0) | | Boolean | *objectMapper* (common) | Custom Jackson ObjectMapper to use when serializing/deserializing Salesforce objects. | | ObjectMapper -| *packages* (common) | In what packages are the generated DTO classes. Typically the classes would be generated using camel-salesforce-maven-plugin. Set it if using the generated DTOs to gain the benefit of using short SObject names in parameters/header values. | | String[] +| *packages* (common) | In what packages are the generated DTO classes. Typically the classes would be generated using camel-salesforce-maven-plugin. Set it if using the generated DTOs to gain the benefit of using short SObject names in parameters/header values. Multiple packages can be separated by comma. | | String | *rawPayload* (common) | Use raw payload String for request and response (either JSON or XML depending on format), instead of DTOs, false by default | false | boolean | *reportId* (common) | Salesforce1 Analytics report Id | | String | *reportMetadata* (common) | Salesforce1 Analytics report metadata for filtering | | ReportMetadata diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java index 3dd25b4..14a553f 100644 --- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java +++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java @@ -22,6 +22,7 @@ import java.util.HashMap; import java.util.Map; import java.util.Optional; import java.util.Set; +import java.util.StringJoiner; import java.util.function.Supplier; import java.util.regex.Pattern; @@ -207,8 +208,8 @@ public class SalesforceComponent extends DefaultComponent implements SSLContextP @Metadata(description = "In what packages are the generated DTO classes. Typically the classes would be generated" + " using camel-salesforce-maven-plugin. Set it if using the generated DTOs to gain the benefit of using short " - + " SObject names in parameters/header values.", label = "common") - private String[] packages; + + " SObject names in parameters/header values. Multiple packages can be separated by comma.", javaType = "java.lang.String", label = "common") + private String packages; // component state private SalesforceHttpClient httpClient; @@ -290,7 +291,7 @@ public class SalesforceComponent extends DefaultComponent implements SSLContextP private Map<String, Class<?>> parsePackages() { Map<String, Class<?>> result = new HashMap<>(); - Set<Class<?>> classes = getCamelContext().adapt(ExtendedCamelContext.class).getPackageScanClassResolver().findImplementations(AbstractSObjectBase.class, packages); + Set<Class<?>> classes = getCamelContext().adapt(ExtendedCamelContext.class).getPackageScanClassResolver().findImplementations(AbstractSObjectBase.class, getPackagesAsArray()); for (Class<?> aClass : classes) { // findImplementations also returns AbstractSObjectBase for some // reason!!! @@ -362,10 +363,10 @@ public class SalesforceComponent extends DefaultComponent implements SSLContextP ServiceHelper.startService(session); } - if (packages != null && packages.length > 0) { + if (packages != null) { // parse the packages to create SObject name to class map classMap = parsePackages(); - LOG.info("Found {} generated classes in packages: {}", classMap.size(), Arrays.asList(packages)); + LOG.info("Found {} generated classes in packages: {}", classMap.size(), packages); } else { // use an empty map to avoid NPEs later LOG.warn("Missing property packages, getSObject* operations will NOT work without property rawPayload=true"); @@ -658,18 +659,29 @@ public class SalesforceComponent extends DefaultComponent implements SSLContextP this.httpProxyUseDigestAuth = httpProxyUseDigestAuth; } - public String[] getPackages() { + public String getPackages() { return packages; } - public void setPackages(String[] packages) { + public void setPackages(String packages) { this.packages = packages; } - public void setPackages(String packages) { - // split using comma + /** + * @deprecated use {@link #setPackages(String)} + */ + @Deprecated + public void setPackages(String[] packages) { if (packages != null) { - setPackages(packages.split(",")); + this.packages = String.join(",", packages); + } + } + + public String[] getPackagesAsArray() { + if (packages != null) { + return packages.split(","); + } else { + return null; } } diff --git a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/SalesforceComponentBuilderFactory.java b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/SalesforceComponentBuilderFactory.java index 9641d95..00b35c3 100644 --- a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/SalesforceComponentBuilderFactory.java +++ b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/SalesforceComponentBuilderFactory.java @@ -399,13 +399,14 @@ public interface SalesforceComponentBuilderFactory { * In what packages are the generated DTO classes. Typically the classes * would be generated using camel-salesforce-maven-plugin. Set it if * using the generated DTOs to gain the benefit of using short SObject - * names in parameters/header values. + * names in parameters/header values. Multiple packages can be separated + * by comma. * - * The option is a: <code>java.lang.String[]</code> type. + * The option is a: <code>java.lang.String</code> type. * * Group: common */ - default SalesforceComponentBuilder packages(java.lang.String[] packages) { + default SalesforceComponentBuilder packages(java.lang.String packages) { doSetProperty("packages", packages); return this; } @@ -1056,7 +1057,7 @@ public interface SalesforceComponentBuilderFactory { case "notifyForOperationUndelete": getOrCreateConfiguration((SalesforceComponent) component).setNotifyForOperationUndelete((java.lang.Boolean) value); return true; case "notifyForOperationUpdate": getOrCreateConfiguration((SalesforceComponent) component).setNotifyForOperationUpdate((java.lang.Boolean) value); return true; case "objectMapper": getOrCreateConfiguration((SalesforceComponent) component).setObjectMapper((com.fasterxml.jackson.databind.ObjectMapper) value); return true; - case "packages": ((SalesforceComponent) component).setPackages((java.lang.String[]) value); return true; + case "packages": ((SalesforceComponent) component).setPackages((java.lang.String) value); return true; case "rawPayload": getOrCreateConfiguration((SalesforceComponent) component).setRawPayload((boolean) value); return true; case "reportId": getOrCreateConfiguration((SalesforceComponent) component).setReportId((java.lang.String) value); return true; case "reportMetadata": getOrCreateConfiguration((SalesforceComponent) component).setReportMetadata((org.apache.camel.component.salesforce.api.dto.analytics.reports.ReportMetadata) value); return true;