http://git-wip-us.apache.org/repos/asf/camel/blob/d485f2f0/components-starter/camel-quickfix-starter/src/main/java/org/apache/camel/component/quickfixj/springboot/QuickfixjComponentConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-quickfix-starter/src/main/java/org/apache/camel/component/quickfixj/springboot/QuickfixjComponentConfiguration.java b/components-starter/camel-quickfix-starter/src/main/java/org/apache/camel/component/quickfixj/springboot/QuickfixjComponentConfiguration.java index c4b186d..702b11b 100644 --- a/components-starter/camel-quickfix-starter/src/main/java/org/apache/camel/component/quickfixj/springboot/QuickfixjComponentConfiguration.java +++ b/components-starter/camel-quickfix-starter/src/main/java/org/apache/camel/component/quickfixj/springboot/QuickfixjComponentConfiguration.java @@ -19,6 +19,7 @@ package org.apache.camel.component.quickfixj.springboot; import java.util.Map; import org.apache.camel.component.quickfixj.QuickfixjConfiguration; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.NestedConfigurationProperty; import quickfix.LogFactory; import quickfix.MessageFactory; import quickfix.MessageStoreFactory; @@ -35,14 +36,17 @@ public class QuickfixjComponentConfiguration { /** * To use the given MessageFactory */ + @NestedConfigurationProperty private MessageFactory messageFactory; /** * To use the given LogFactory */ + @NestedConfigurationProperty private LogFactory logFactory; /** * To use the given MessageStoreFactory */ + @NestedConfigurationProperty private MessageStoreFactory messageStoreFactory; /** * To use the given map of pre configured QuickFix configurations mapped to
http://git-wip-us.apache.org/repos/asf/camel/blob/d485f2f0/components-starter/camel-restlet-starter/src/main/java/org/apache/camel/component/restlet/springboot/RestletComponentAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-restlet-starter/src/main/java/org/apache/camel/component/restlet/springboot/RestletComponentAutoConfiguration.java b/components-starter/camel-restlet-starter/src/main/java/org/apache/camel/component/restlet/springboot/RestletComponentAutoConfiguration.java index ca57cd3..e35c860 100644 --- a/components-starter/camel-restlet-starter/src/main/java/org/apache/camel/component/restlet/springboot/RestletComponentAutoConfiguration.java +++ b/components-starter/camel-restlet-starter/src/main/java/org/apache/camel/component/restlet/springboot/RestletComponentAutoConfiguration.java @@ -45,6 +45,26 @@ public class RestletComponentAutoConfiguration { Map<String, Object> parameters = new HashMap<>(); IntrospectionSupport.getProperties(configuration, parameters, null, false); + for (Map.Entry<String, Object> entry : parameters.entrySet()) { + Object value = entry.getValue(); + Class<?> paramClass = value.getClass(); + if (paramClass.getName().endsWith("NestedConfiguration")) { + Class nestedClass = null; + try { + nestedClass = (Class) paramClass.getDeclaredField( + "CAMEL_NESTED_CLASS").get(null); + HashMap<String, Object> nestedParameters = new HashMap<>(); + IntrospectionSupport.getProperties(value, nestedParameters, + null, false); + Object nestedProperty = nestedClass.newInstance(); + IntrospectionSupport.setProperties(camelContext, + camelContext.getTypeConverter(), nestedProperty, + nestedParameters); + entry.setValue(nestedProperty); + } catch (NoSuchFieldException e) { + } + } + } IntrospectionSupport.setProperties(camelContext, camelContext.getTypeConverter(), component, parameters); return component; http://git-wip-us.apache.org/repos/asf/camel/blob/d485f2f0/components-starter/camel-restlet-starter/src/main/java/org/apache/camel/component/restlet/springboot/RestletComponentConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-restlet-starter/src/main/java/org/apache/camel/component/restlet/springboot/RestletComponentConfiguration.java b/components-starter/camel-restlet-starter/src/main/java/org/apache/camel/component/restlet/springboot/RestletComponentConfiguration.java index 612d6af..83f53e3 100644 --- a/components-starter/camel-restlet-starter/src/main/java/org/apache/camel/component/restlet/springboot/RestletComponentConfiguration.java +++ b/components-starter/camel-restlet-starter/src/main/java/org/apache/camel/component/restlet/springboot/RestletComponentConfiguration.java @@ -19,6 +19,7 @@ package org.apache.camel.component.restlet.springboot; import java.util.List; import org.apache.camel.spi.HeaderFilterStrategy; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.NestedConfigurationProperty; /** * Component for consuming and producing Restful resources using Restlet. @@ -131,6 +132,7 @@ public class RestletComponentConfiguration { * To use a custom HeaderFilterStrategy to filter header to and from Camel * message. */ + @NestedConfigurationProperty private HeaderFilterStrategy headerFilterStrategy; public Boolean getControllerDaemon() { http://git-wip-us.apache.org/repos/asf/camel/blob/d485f2f0/components-starter/camel-salesforce-starter/src/main/java/org/apache/camel/component/salesforce/springboot/SalesforceComponentAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-salesforce-starter/src/main/java/org/apache/camel/component/salesforce/springboot/SalesforceComponentAutoConfiguration.java b/components-starter/camel-salesforce-starter/src/main/java/org/apache/camel/component/salesforce/springboot/SalesforceComponentAutoConfiguration.java index e73550c..04184fe 100644 --- a/components-starter/camel-salesforce-starter/src/main/java/org/apache/camel/component/salesforce/springboot/SalesforceComponentAutoConfiguration.java +++ b/components-starter/camel-salesforce-starter/src/main/java/org/apache/camel/component/salesforce/springboot/SalesforceComponentAutoConfiguration.java @@ -45,6 +45,26 @@ public class SalesforceComponentAutoConfiguration { Map<String, Object> parameters = new HashMap<>(); IntrospectionSupport.getProperties(configuration, parameters, null, false); + for (Map.Entry<String, Object> entry : parameters.entrySet()) { + Object value = entry.getValue(); + Class<?> paramClass = value.getClass(); + if (paramClass.getName().endsWith("NestedConfiguration")) { + Class nestedClass = null; + try { + nestedClass = (Class) paramClass.getDeclaredField( + "CAMEL_NESTED_CLASS").get(null); + HashMap<String, Object> nestedParameters = new HashMap<>(); + IntrospectionSupport.getProperties(value, nestedParameters, + null, false); + Object nestedProperty = nestedClass.newInstance(); + IntrospectionSupport.setProperties(camelContext, + camelContext.getTypeConverter(), nestedProperty, + nestedParameters); + entry.setValue(nestedProperty); + } catch (NoSuchFieldException e) { + } + } + } IntrospectionSupport.setProperties(camelContext, camelContext.getTypeConverter(), component, parameters); return component; http://git-wip-us.apache.org/repos/asf/camel/blob/d485f2f0/components-starter/camel-salesforce-starter/src/main/java/org/apache/camel/component/salesforce/springboot/SalesforceComponentConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-salesforce-starter/src/main/java/org/apache/camel/component/salesforce/springboot/SalesforceComponentConfiguration.java b/components-starter/camel-salesforce-starter/src/main/java/org/apache/camel/component/salesforce/springboot/SalesforceComponentConfiguration.java index d27021a..30b68c5 100644 --- a/components-starter/camel-salesforce-starter/src/main/java/org/apache/camel/component/salesforce/springboot/SalesforceComponentConfiguration.java +++ b/components-starter/camel-salesforce-starter/src/main/java/org/apache/camel/component/salesforce/springboot/SalesforceComponentConfiguration.java @@ -19,9 +19,7 @@ package org.apache.camel.component.salesforce.springboot; import java.util.Map; import java.util.Set; import com.fasterxml.jackson.databind.ObjectMapper; -import org.apache.camel.component.salesforce.SalesforceEndpointConfig; import org.apache.camel.component.salesforce.SalesforceHttpClient; -import org.apache.camel.component.salesforce.SalesforceLoginConfig; import org.apache.camel.component.salesforce.api.dto.analytics.reports.ReportMetadata; import org.apache.camel.component.salesforce.api.dto.bulk.ContentType; import org.apache.camel.component.salesforce.internal.PayloadFormat; @@ -29,6 +27,7 @@ import org.apache.camel.component.salesforce.internal.dto.NotifyForFieldsEnum; import org.apache.camel.component.salesforce.internal.dto.NotifyForOperationsEnum; import org.apache.camel.util.jsse.SSLContextParameters; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.NestedConfigurationProperty; /** * The salesforce component is used for integrating Camel with the massive @@ -40,15 +39,13 @@ import org.springframework.boot.context.properties.ConfigurationProperties; public class SalesforceComponentConfiguration { /** - * To use the shared SalesforceLoginConfig as login configuration. - * Properties of the shared configuration can also be set individually. + * To use the shared SalesforceLoginConfig as login configuration */ - private SalesforceLoginConfig loginConfig; + private SalesforceLoginConfigNestedConfiguration loginConfig; /** - * To use the shared SalesforceEndpointConfig as configuration. Properties - * of the shared configuration can also be set individually. + * To use the shared SalesforceLoginConfig as configuration */ - private SalesforceEndpointConfig config; + private SalesforceEndpointConfigNestedConfiguration config; /** * Used for configuring HTTP client properties as key/value pairs */ @@ -56,6 +53,7 @@ public class SalesforceComponentConfiguration { /** * To configure security using SSLContextParameters */ + @NestedConfigurationProperty private SSLContextParameters sslContextParameters; /** * To configure HTTP proxy host @@ -106,193 +104,21 @@ public class SalesforceComponentConfiguration { * by comma). */ private String[] packages; - /** - * Salesforce login URL defaults to https://login.salesforce.com - */ - private String loginUrl; - /** - * Salesforce connected application Consumer Key - */ - private String clientId; - /** - * Salesforce connected application Consumer Secret - */ - private String clientSecret; - /** - * Salesforce account user name - */ - private String userName; - /** - * Salesforce account password - */ - private String password; - /** - * Flag to enable/disable lazy OAuth default is false. When enabled OAuth - * token retrieval or generation is not done until the first API call - */ - private Boolean lazyLogin; - /** - * Payload format to use for Salesforce API calls either JSON or XML - * defaults to JSON - */ - private PayloadFormat format; - /** - * Salesforce API version defaults to - * SalesforceEndpointConfig.DEFAULT_VERSION - */ - private String apiVersion; - /** - * SObject name if required or supported by API - */ - private String sObjectName; - /** - * SObject ID if required by API - */ - private String sObjectId; - /** - * SObject fields to retrieve - */ - private String sObjectFields; - /** - * SObject external ID field name - */ - private String sObjectIdName; - /** - * SObject external ID field value - */ - private String sObjectIdValue; - /** - * SObject blob field name - */ - private String sObjectBlobFieldName; - /** - * Fully qualified SObject class name usually generated using - * camel-salesforce-maven-plugin - */ - private String sObjectClass; - /** - * Salesforce SOQL query string - */ - private String sObjectQuery; - /** - * Salesforce SOSL search string - */ - private String sObjectSearch; - /** - * APEX method name - */ - private String apexMethod; - /** - * APEX method URL - */ - private String apexUrl; - /** - * Query params for APEX method - */ - private Map<String, Object> apexQueryParams; - /** - * Bulk API content type one of XML CSV ZIP_XML ZIP_CSV - */ - private ContentType contentType; - /** - * Bulk API Job ID - */ - private String jobId; - /** - * Bulk API Batch ID - */ - private String batchId; - /** - * Bulk API Result ID - */ - private String resultId; - /** - * Whether to update an existing Push Topic when using the Streaming API - * defaults to false - */ - private Boolean updateTopic; - /** - * Notify for fields options are ALL REFERENCED SELECT WHERE - */ - private NotifyForFieldsEnum notifyForFields; - /** - * Notify for operations options are ALL CREATE EXTENDED UPDATE (API version - * 29.0) - */ - private NotifyForOperationsEnum notifyForOperations; - /** - * Notify for create operation defaults to false (API version = 29.0) - */ - private Boolean notifyForOperationCreate; - /** - * Notify for update operation defaults to false (API version = 29.0) - */ - private Boolean notifyForOperationUpdate; - /** - * Notify for delete operation defaults to false (API version = 29.0) - */ - private Boolean notifyForOperationDelete; - /** - * Notify for un-delete operation defaults to false (API version = 29.0) - */ - private Boolean notifyForOperationUndelete; - /** - * Salesforce1 Analytics report Id - */ - private String reportId; - /** - * Include details in Salesforce1 Analytics report defaults to false. - */ - private Boolean includeDetails; - /** - * Salesforce1 Analytics report metadata for filtering - */ - private ReportMetadata reportMetadata; - /** - * Salesforce1 Analytics report execution instance ID - */ - private String instanceId; - /** - * Custom Jetty Http Client to use to connect to Salesforce. - */ - private SalesforceHttpClient httpClient; - /** - * Custom Jackson ObjectMapper to use when serializing/deserializing - * Salesforce objects. - */ - private ObjectMapper objectMapper; - /** - * Default replayId setting if no value is found in link initialReplayIdMap - */ - private Integer defaultReplayId; - /** - * Replay IDs to start from per channel name. - */ - private Map<String, Integer> initialReplayIdMap; - /** - * Backoff interval increment for Streaming connection restart attempts for - * failures beyond CometD auto-reconnect. - */ - private long backoffIncrement; - /** - * Maximum backoff interval for Streaming connection restart attempts for - * failures beyond CometD auto-reconnect. - */ - private long maxBackoff; - public SalesforceLoginConfig getLoginConfig() { + public SalesforceLoginConfigNestedConfiguration getLoginConfig() { return loginConfig; } - public void setLoginConfig(SalesforceLoginConfig loginConfig) { + public void setLoginConfig( + SalesforceLoginConfigNestedConfiguration loginConfig) { this.loginConfig = loginConfig; } - public SalesforceEndpointConfig getConfig() { + public SalesforceEndpointConfigNestedConfiguration getConfig() { return config; } - public void setConfig(SalesforceEndpointConfig config) { + public void setConfig(SalesforceEndpointConfigNestedConfiguration config) { this.config = config; } @@ -411,332 +237,522 @@ public class SalesforceComponentConfiguration { this.packages = packages; } - public String getLoginUrl() { - return loginUrl; - } - - public void setLoginUrl(String loginUrl) { - this.loginUrl = loginUrl; - } - - public String getClientId() { - return clientId; - } - - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getClientSecret() { - return clientSecret; - } - - public void setClientSecret(String clientSecret) { - this.clientSecret = clientSecret; - } - - public String getUserName() { - return userName; - } - - public void setUserName(String userName) { - this.userName = userName; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - public Boolean getLazyLogin() { - return lazyLogin; - } - - public void setLazyLogin(Boolean lazyLogin) { - this.lazyLogin = lazyLogin; - } - - public PayloadFormat getFormat() { - return format; - } - - public void setFormat(PayloadFormat format) { - this.format = format; - } - - public String getApiVersion() { - return apiVersion; - } - - public void setApiVersion(String apiVersion) { - this.apiVersion = apiVersion; - } - - public String getSObjectName() { - return sObjectName; - } + public static class SalesforceEndpointConfigNestedConfiguration { + public static final Class CAMEL_NESTED_CLASS = org.apache.camel.component.salesforce.SalesforceEndpointConfig.class; + /** + * Payload format to use for Salesforce API calls, either JSON or XML, + * defaults to JSON + */ + private PayloadFormat format; + /** + * Salesforce API version, defaults to + * SalesforceEndpointConfig.DEFAULT_VERSION + */ + private String apiVersion; + /** + * SObject name if required or supported by API + */ + private String sObjectName; + /** + * SObject ID if required by API + */ + private String sObjectId; + /** + * SObject fields to retrieve + */ + private String sObjectFields; + /** + * SObject external ID field name + */ + private String sObjectIdName; + /** + * SObject external ID field value + */ + private String sObjectIdValue; + /** + * SObject blob field name + */ + private String sObjectBlobFieldName; + /** + * Fully qualified SObject class name, usually generated using + * camel-salesforce-maven-plugin + */ + private String sObjectClass; + /** + * Salesforce SOQL query string + */ + private String sObjectQuery; + /** + * Salesforce SOSL search string + */ + private String sObjectSearch; + /** + * APEX method name + */ + private String apexMethod; + /** + * APEX method URL + */ + private String apexUrl; + /** + * Query params for APEX method + */ + private Map apexQueryParams; + /** + * Bulk API content type, one of XML, CSV, ZIP_XML, ZIP_CSV + */ + private ContentType contentType; + /** + * Bulk API Job ID + */ + private String jobId; + /** + * Bulk API Batch ID + */ + private String batchId; + /** + * Bulk API Result ID + */ + private String resultId; + /** + * Whether to update an existing Push Topic when using the Streaming + * API, defaults to false + */ + private Boolean updateTopic; + /** + * Notify for fields, options are ALL, REFERENCED, SELECT, WHERE + */ + private NotifyForFieldsEnum notifyForFields; + /** + * Notify for operations, options are ALL, CREATE, EXTENDED, UPDATE (API + * version < 29.0) + */ + private NotifyForOperationsEnum notifyForOperations; + /** + * Notify for create operation, defaults to false (API version >= 29.0) + */ + private Boolean notifyForOperationCreate; + /** + * Notify for update operation, defaults to false (API version >= 29.0) + */ + private Boolean notifyForOperationUpdate; + /** + * Notify for delete operation, defaults to false (API version >= 29.0) + */ + private Boolean notifyForOperationDelete; + /** + * Notify for un-delete operation, defaults to false (API version >= + * 29.0) + */ + private Boolean notifyForOperationUndelete; + /** + * Salesforce1 Analytics report Id + */ + private String reportId; + /** + * Include details in Salesforce1 Analytics report, defaults to false. + */ + private Boolean includeDetails; + /** + * Salesforce1 Analytics report metadata for filtering + */ + @NestedConfigurationProperty + private ReportMetadata reportMetadata; + /** + * Salesforce1 Analytics report execution instance ID + */ + private String instanceId; + /** + * Custom Jetty Http Client to use to connect to Salesforce. + */ + @NestedConfigurationProperty + private SalesforceHttpClient httpClient; + /** + * Custom Jackson ObjectMapper to use when serializing/deserializing + * Salesforce objects. + */ + @NestedConfigurationProperty + private ObjectMapper objectMapper; + /** + * Backoff interval increment for Streaming connection restart attempts + * for failures beyond CometD auto-reconnect. + */ + private Long backoffIncrement; + /** + * Maximum backoff interval for Streaming connection restart attempts + * for failures beyond CometD auto-reconnect. + */ + private Long maxBackoff; + /** + * Default replayId setting if no value is found in + * {@link #initialReplayIdMap} + * + * @param defaultReplayId + */ + private Integer defaultReplayId; + /** + * Replay IDs to start from per channel name. + */ + private Map initialReplayIdMap; + + public PayloadFormat getFormat() { + return format; + } + + public void setFormat(PayloadFormat format) { + this.format = format; + } + + public String getApiVersion() { + return apiVersion; + } + + public void setApiVersion(String apiVersion) { + this.apiVersion = apiVersion; + } + + public String getSObjectName() { + return sObjectName; + } + + public void setSObjectName(String sObjectName) { + this.sObjectName = sObjectName; + } + + public String getSObjectId() { + return sObjectId; + } + + public void setSObjectId(String sObjectId) { + this.sObjectId = sObjectId; + } + + public String getSObjectFields() { + return sObjectFields; + } + + public void setSObjectFields(String sObjectFields) { + this.sObjectFields = sObjectFields; + } + + public String getSObjectIdName() { + return sObjectIdName; + } + + public void setSObjectIdName(String sObjectIdName) { + this.sObjectIdName = sObjectIdName; + } + + public String getSObjectIdValue() { + return sObjectIdValue; + } + + public void setSObjectIdValue(String sObjectIdValue) { + this.sObjectIdValue = sObjectIdValue; + } + + public String getSObjectBlobFieldName() { + return sObjectBlobFieldName; + } + + public void setSObjectBlobFieldName(String sObjectBlobFieldName) { + this.sObjectBlobFieldName = sObjectBlobFieldName; + } + + public String getSObjectClass() { + return sObjectClass; + } + + public void setSObjectClass(String sObjectClass) { + this.sObjectClass = sObjectClass; + } + + public String getSObjectQuery() { + return sObjectQuery; + } + + public void setSObjectQuery(String sObjectQuery) { + this.sObjectQuery = sObjectQuery; + } + + public String getSObjectSearch() { + return sObjectSearch; + } + + public void setSObjectSearch(String sObjectSearch) { + this.sObjectSearch = sObjectSearch; + } + + public String getApexMethod() { + return apexMethod; + } + + public void setApexMethod(String apexMethod) { + this.apexMethod = apexMethod; + } + + public String getApexUrl() { + return apexUrl; + } - public void setSObjectName(String sObjectName) { - this.sObjectName = sObjectName; - } + public void setApexUrl(String apexUrl) { + this.apexUrl = apexUrl; + } - public String getSObjectId() { - return sObjectId; - } + public Map getApexQueryParams() { + return apexQueryParams; + } - public void setSObjectId(String sObjectId) { - this.sObjectId = sObjectId; - } + public void setApexQueryParams(Map apexQueryParams) { + this.apexQueryParams = apexQueryParams; + } - public String getSObjectFields() { - return sObjectFields; - } + public ContentType getContentType() { + return contentType; + } - public void setSObjectFields(String sObjectFields) { - this.sObjectFields = sObjectFields; - } + public void setContentType(ContentType contentType) { + this.contentType = contentType; + } - public String getSObjectIdName() { - return sObjectIdName; - } + public String getJobId() { + return jobId; + } - public void setSObjectIdName(String sObjectIdName) { - this.sObjectIdName = sObjectIdName; - } + public void setJobId(String jobId) { + this.jobId = jobId; + } - public String getSObjectIdValue() { - return sObjectIdValue; - } + public String getBatchId() { + return batchId; + } - public void setSObjectIdValue(String sObjectIdValue) { - this.sObjectIdValue = sObjectIdValue; - } + public void setBatchId(String batchId) { + this.batchId = batchId; + } - public String getSObjectBlobFieldName() { - return sObjectBlobFieldName; - } + public String getResultId() { + return resultId; + } - public void setSObjectBlobFieldName(String sObjectBlobFieldName) { - this.sObjectBlobFieldName = sObjectBlobFieldName; - } + public void setResultId(String resultId) { + this.resultId = resultId; + } - public String getSObjectClass() { - return sObjectClass; - } + public Boolean getUpdateTopic() { + return updateTopic; + } - public void setSObjectClass(String sObjectClass) { - this.sObjectClass = sObjectClass; - } + public void setUpdateTopic(Boolean updateTopic) { + this.updateTopic = updateTopic; + } - public String getSObjectQuery() { - return sObjectQuery; - } - - public void setSObjectQuery(String sObjectQuery) { - this.sObjectQuery = sObjectQuery; - } - - public String getSObjectSearch() { - return sObjectSearch; - } - - public void setSObjectSearch(String sObjectSearch) { - this.sObjectSearch = sObjectSearch; - } + public NotifyForFieldsEnum getNotifyForFields() { + return notifyForFields; + } - public String getApexMethod() { - return apexMethod; - } - - public void setApexMethod(String apexMethod) { - this.apexMethod = apexMethod; - } + public void setNotifyForFields(NotifyForFieldsEnum notifyForFields) { + this.notifyForFields = notifyForFields; + } - public String getApexUrl() { - return apexUrl; - } + public NotifyForOperationsEnum getNotifyForOperations() { + return notifyForOperations; + } - public void setApexUrl(String apexUrl) { - this.apexUrl = apexUrl; - } - - public Map<String, Object> getApexQueryParams() { - return apexQueryParams; - } - - public void setApexQueryParams(Map<String, Object> apexQueryParams) { - this.apexQueryParams = apexQueryParams; - } - - public ContentType getContentType() { - return contentType; - } - - public void setContentType(ContentType contentType) { - this.contentType = contentType; - } - - public String getJobId() { - return jobId; - } - - public void setJobId(String jobId) { - this.jobId = jobId; - } - - public String getBatchId() { - return batchId; - } - - public void setBatchId(String batchId) { - this.batchId = batchId; - } - - public String getResultId() { - return resultId; - } - - public void setResultId(String resultId) { - this.resultId = resultId; - } - - public Boolean getUpdateTopic() { - return updateTopic; - } - - public void setUpdateTopic(Boolean updateTopic) { - this.updateTopic = updateTopic; - } - - public NotifyForFieldsEnum getNotifyForFields() { - return notifyForFields; - } - - public void setNotifyForFields(NotifyForFieldsEnum notifyForFields) { - this.notifyForFields = notifyForFields; - } - - public NotifyForOperationsEnum getNotifyForOperations() { - return notifyForOperations; - } - - public void setNotifyForOperations( - NotifyForOperationsEnum notifyForOperations) { - this.notifyForOperations = notifyForOperations; - } - - public Boolean getNotifyForOperationCreate() { - return notifyForOperationCreate; - } - - public void setNotifyForOperationCreate(Boolean notifyForOperationCreate) { - this.notifyForOperationCreate = notifyForOperationCreate; - } - - public Boolean getNotifyForOperationUpdate() { - return notifyForOperationUpdate; - } - - public void setNotifyForOperationUpdate(Boolean notifyForOperationUpdate) { - this.notifyForOperationUpdate = notifyForOperationUpdate; - } - - public Boolean getNotifyForOperationDelete() { - return notifyForOperationDelete; - } - - public void setNotifyForOperationDelete(Boolean notifyForOperationDelete) { - this.notifyForOperationDelete = notifyForOperationDelete; - } - - public Boolean getNotifyForOperationUndelete() { - return notifyForOperationUndelete; - } - - public void setNotifyForOperationUndelete(Boolean notifyForOperationUndelete) { - this.notifyForOperationUndelete = notifyForOperationUndelete; - } - - public String getReportId() { - return reportId; - } - - public void setReportId(String reportId) { - this.reportId = reportId; - } - - public Boolean getIncludeDetails() { - return includeDetails; - } - - public void setIncludeDetails(Boolean includeDetails) { - this.includeDetails = includeDetails; - } - - public ReportMetadata getReportMetadata() { - return reportMetadata; - } - - public void setReportMetadata(ReportMetadata reportMetadata) { - this.reportMetadata = reportMetadata; - } - - public String getInstanceId() { - return instanceId; - } - - public void setInstanceId(String instanceId) { - this.instanceId = instanceId; - } - - public SalesforceHttpClient getHttpClient() { - return httpClient; - } - - public void setHttpClient(SalesforceHttpClient httpClient) { - this.httpClient = httpClient; - } - - public ObjectMapper getObjectMapper() { - return objectMapper; - } - - public void setObjectMapper(ObjectMapper objectMapper) { - this.objectMapper = objectMapper; - } - - public Integer getDefaultReplayId() { - return defaultReplayId; - } - - public void setDefaultReplayId(Integer defaultReplayId) { - this.defaultReplayId = defaultReplayId; - } - - public Map<String, Integer> getInitialReplayIdMap() { - return initialReplayIdMap; - } - - public void setInitialReplayIdMap(Map<String, Integer> initialReplayIdMap) { - this.initialReplayIdMap = initialReplayIdMap; - } - - public long getBackoffIncrement() { - return backoffIncrement; - } - - public void setBackoffIncrement(long backoffIncrement) { - this.backoffIncrement = backoffIncrement; - } - - public long getMaxBackoff() { - return maxBackoff; - } + public void setNotifyForOperations( + NotifyForOperationsEnum notifyForOperations) { + this.notifyForOperations = notifyForOperations; + } + + public Boolean getNotifyForOperationCreate() { + return notifyForOperationCreate; + } + + public void setNotifyForOperationCreate(Boolean notifyForOperationCreate) { + this.notifyForOperationCreate = notifyForOperationCreate; + } + + public Boolean getNotifyForOperationUpdate() { + return notifyForOperationUpdate; + } + + public void setNotifyForOperationUpdate(Boolean notifyForOperationUpdate) { + this.notifyForOperationUpdate = notifyForOperationUpdate; + } - public void setMaxBackoff(long maxBackoff) { - this.maxBackoff = maxBackoff; + public Boolean getNotifyForOperationDelete() { + return notifyForOperationDelete; + } + + public void setNotifyForOperationDelete(Boolean notifyForOperationDelete) { + this.notifyForOperationDelete = notifyForOperationDelete; + } + + public Boolean getNotifyForOperationUndelete() { + return notifyForOperationUndelete; + } + + public void setNotifyForOperationUndelete( + Boolean notifyForOperationUndelete) { + this.notifyForOperationUndelete = notifyForOperationUndelete; + } + + public String getReportId() { + return reportId; + } + + public void setReportId(String reportId) { + this.reportId = reportId; + } + + public Boolean getIncludeDetails() { + return includeDetails; + } + + public void setIncludeDetails(Boolean includeDetails) { + this.includeDetails = includeDetails; + } + + public ReportMetadata getReportMetadata() { + return reportMetadata; + } + + public void setReportMetadata(ReportMetadata reportMetadata) { + this.reportMetadata = reportMetadata; + } + + public String getInstanceId() { + return instanceId; + } + + public void setInstanceId(String instanceId) { + this.instanceId = instanceId; + } + + public SalesforceHttpClient getHttpClient() { + return httpClient; + } + + public void setHttpClient(SalesforceHttpClient httpClient) { + this.httpClient = httpClient; + } + + public ObjectMapper getObjectMapper() { + return objectMapper; + } + + public void setObjectMapper(ObjectMapper objectMapper) { + this.objectMapper = objectMapper; + } + + public Long getBackoffIncrement() { + return backoffIncrement; + } + + public void setBackoffIncrement(Long backoffIncrement) { + this.backoffIncrement = backoffIncrement; + } + + public Long getMaxBackoff() { + return maxBackoff; + } + + public void setMaxBackoff(Long maxBackoff) { + this.maxBackoff = maxBackoff; + } + + public Integer getDefaultReplayId() { + return defaultReplayId; + } + + public void setDefaultReplayId(Integer defaultReplayId) { + this.defaultReplayId = defaultReplayId; + } + + public Map getInitialReplayIdMap() { + return initialReplayIdMap; + } + + public void setInitialReplayIdMap(Map initialReplayIdMap) { + this.initialReplayIdMap = initialReplayIdMap; + } + } + + public static class SalesforceLoginConfigNestedConfiguration { + public static final Class CAMEL_NESTED_CLASS = org.apache.camel.component.salesforce.SalesforceLoginConfig.class; + /** + * Salesforce login URL, defaults to https://login.salesforce.com + */ + private String loginUrl; + /** + * Salesforce connected application Consumer Key + */ + private String clientId; + /** + * Salesforce connected application Consumer Secret + */ + private String clientSecret; + /** + * Salesforce account user name + */ + private String userName; + /** + * Salesforce account password + */ + private String password; + /** + * Flag to enable/disable lazy OAuth, default is false. When enabled, + * OAuth token retrieval or generation is not done until the first API + * call + */ + private Boolean lazyLogin; + + public String getLoginUrl() { + return loginUrl; + } + + public void setLoginUrl(String loginUrl) { + this.loginUrl = loginUrl; + } + + public String getClientId() { + return clientId; + } + + public void setClientId(String clientId) { + this.clientId = clientId; + } + + public String getClientSecret() { + return clientSecret; + } + + public void setClientSecret(String clientSecret) { + this.clientSecret = clientSecret; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public Boolean getLazyLogin() { + return lazyLogin; + } + + public void setLazyLogin(Boolean lazyLogin) { + this.lazyLogin = lazyLogin; + } } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/d485f2f0/components-starter/camel-saxon-starter/src/main/java/org/apache/camel/component/xquery/springboot/XQueryComponentAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-saxon-starter/src/main/java/org/apache/camel/component/xquery/springboot/XQueryComponentAutoConfiguration.java b/components-starter/camel-saxon-starter/src/main/java/org/apache/camel/component/xquery/springboot/XQueryComponentAutoConfiguration.java index c52467f..7dc5adc 100644 --- a/components-starter/camel-saxon-starter/src/main/java/org/apache/camel/component/xquery/springboot/XQueryComponentAutoConfiguration.java +++ b/components-starter/camel-saxon-starter/src/main/java/org/apache/camel/component/xquery/springboot/XQueryComponentAutoConfiguration.java @@ -44,6 +44,26 @@ public class XQueryComponentAutoConfiguration { Map<String, Object> parameters = new HashMap<>(); IntrospectionSupport.getProperties(configuration, parameters, null, false); + for (Map.Entry<String, Object> entry : parameters.entrySet()) { + Object value = entry.getValue(); + Class<?> paramClass = value.getClass(); + if (paramClass.getName().endsWith("NestedConfiguration")) { + Class nestedClass = null; + try { + nestedClass = (Class) paramClass.getDeclaredField( + "CAMEL_NESTED_CLASS").get(null); + HashMap<String, Object> nestedParameters = new HashMap<>(); + IntrospectionSupport.getProperties(value, nestedParameters, + null, false); + Object nestedProperty = nestedClass.newInstance(); + IntrospectionSupport.setProperties(camelContext, + camelContext.getTypeConverter(), nestedProperty, + nestedParameters); + entry.setValue(nestedProperty); + } catch (NoSuchFieldException e) { + } + } + } IntrospectionSupport.setProperties(camelContext, camelContext.getTypeConverter(), component, parameters); return component; http://git-wip-us.apache.org/repos/asf/camel/blob/d485f2f0/components-starter/camel-saxon-starter/src/main/java/org/apache/camel/component/xquery/springboot/XQueryComponentConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-saxon-starter/src/main/java/org/apache/camel/component/xquery/springboot/XQueryComponentConfiguration.java b/components-starter/camel-saxon-starter/src/main/java/org/apache/camel/component/xquery/springboot/XQueryComponentConfiguration.java index 8731955..2c99e0b 100644 --- a/components-starter/camel-saxon-starter/src/main/java/org/apache/camel/component/xquery/springboot/XQueryComponentConfiguration.java +++ b/components-starter/camel-saxon-starter/src/main/java/org/apache/camel/component/xquery/springboot/XQueryComponentConfiguration.java @@ -18,6 +18,7 @@ package org.apache.camel.component.xquery.springboot; import net.sf.saxon.lib.ModuleURIResolver; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.NestedConfigurationProperty; /** * Transforms the message using a XQuery template using Saxon. @@ -30,6 +31,7 @@ public class XQueryComponentConfiguration { /** * To use the custom ModuleURIResolver */ + @NestedConfigurationProperty private ModuleURIResolver moduleURIResolver; public ModuleURIResolver getModuleURIResolver() { http://git-wip-us.apache.org/repos/asf/camel/blob/d485f2f0/components-starter/camel-servlet-starter/src/main/java/org/apache/camel/component/servlet/springboot/ServletComponentAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-servlet-starter/src/main/java/org/apache/camel/component/servlet/springboot/ServletComponentAutoConfiguration.java b/components-starter/camel-servlet-starter/src/main/java/org/apache/camel/component/servlet/springboot/ServletComponentAutoConfiguration.java index 606e188..4744f3d 100644 --- a/components-starter/camel-servlet-starter/src/main/java/org/apache/camel/component/servlet/springboot/ServletComponentAutoConfiguration.java +++ b/components-starter/camel-servlet-starter/src/main/java/org/apache/camel/component/servlet/springboot/ServletComponentAutoConfiguration.java @@ -45,6 +45,26 @@ public class ServletComponentAutoConfiguration { Map<String, Object> parameters = new HashMap<>(); IntrospectionSupport.getProperties(configuration, parameters, null, false); + for (Map.Entry<String, Object> entry : parameters.entrySet()) { + Object value = entry.getValue(); + Class<?> paramClass = value.getClass(); + if (paramClass.getName().endsWith("NestedConfiguration")) { + Class nestedClass = null; + try { + nestedClass = (Class) paramClass.getDeclaredField( + "CAMEL_NESTED_CLASS").get(null); + HashMap<String, Object> nestedParameters = new HashMap<>(); + IntrospectionSupport.getProperties(value, nestedParameters, + null, false); + Object nestedProperty = nestedClass.newInstance(); + IntrospectionSupport.setProperties(camelContext, + camelContext.getTypeConverter(), nestedProperty, + nestedParameters); + entry.setValue(nestedProperty); + } catch (NoSuchFieldException e) { + } + } + } IntrospectionSupport.setProperties(camelContext, camelContext.getTypeConverter(), component, parameters); return component; http://git-wip-us.apache.org/repos/asf/camel/blob/d485f2f0/components-starter/camel-servlet-starter/src/main/java/org/apache/camel/component/servlet/springboot/ServletComponentConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-servlet-starter/src/main/java/org/apache/camel/component/servlet/springboot/ServletComponentConfiguration.java b/components-starter/camel-servlet-starter/src/main/java/org/apache/camel/component/servlet/springboot/ServletComponentConfiguration.java index 24fcebe..add4a67 100644 --- a/components-starter/camel-servlet-starter/src/main/java/org/apache/camel/component/servlet/springboot/ServletComponentConfiguration.java +++ b/components-starter/camel-servlet-starter/src/main/java/org/apache/camel/component/servlet/springboot/ServletComponentConfiguration.java @@ -21,6 +21,7 @@ import org.apache.camel.http.common.HttpBinding; import org.apache.camel.http.common.HttpConfiguration; import org.apache.camel.spi.HeaderFilterStrategy; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.NestedConfigurationProperty; /** * To use a HTTP Servlet as entry for Camel routes when running in a servlet @@ -38,6 +39,7 @@ public class ServletComponentConfiguration { /** * To use a custom org.apache.camel.component.servlet.HttpRegistry. */ + @NestedConfigurationProperty private HttpRegistry httpRegistry; /** * Whether to automatic bind multipart/form-data as attachments on the Camel @@ -49,10 +51,12 @@ public class ServletComponentConfiguration { * To use a custom HttpBinding to control the mapping between Camel message * and HttpClient. */ + @NestedConfigurationProperty private HttpBinding httpBinding; /** * To use the shared HttpConfiguration as base configuration. */ + @NestedConfigurationProperty private HttpConfiguration httpConfiguration; /** * Whether to allow java serialization when a request uses @@ -66,6 +70,7 @@ public class ServletComponentConfiguration { * To use a custom HeaderFilterStrategy to filter header to and from Camel * message. */ + @NestedConfigurationProperty private HeaderFilterStrategy headerFilterStrategy; public String getServletName() { http://git-wip-us.apache.org/repos/asf/camel/blob/d485f2f0/components-starter/camel-sjms-starter/src/main/java/org/apache/camel/component/sjms/batch/springboot/SjmsBatchComponentAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-sjms-starter/src/main/java/org/apache/camel/component/sjms/batch/springboot/SjmsBatchComponentAutoConfiguration.java b/components-starter/camel-sjms-starter/src/main/java/org/apache/camel/component/sjms/batch/springboot/SjmsBatchComponentAutoConfiguration.java index e236e8e..42fb9cb 100644 --- a/components-starter/camel-sjms-starter/src/main/java/org/apache/camel/component/sjms/batch/springboot/SjmsBatchComponentAutoConfiguration.java +++ b/components-starter/camel-sjms-starter/src/main/java/org/apache/camel/component/sjms/batch/springboot/SjmsBatchComponentAutoConfiguration.java @@ -45,6 +45,26 @@ public class SjmsBatchComponentAutoConfiguration { Map<String, Object> parameters = new HashMap<>(); IntrospectionSupport.getProperties(configuration, parameters, null, false); + for (Map.Entry<String, Object> entry : parameters.entrySet()) { + Object value = entry.getValue(); + Class<?> paramClass = value.getClass(); + if (paramClass.getName().endsWith("NestedConfiguration")) { + Class nestedClass = null; + try { + nestedClass = (Class) paramClass.getDeclaredField( + "CAMEL_NESTED_CLASS").get(null); + HashMap<String, Object> nestedParameters = new HashMap<>(); + IntrospectionSupport.getProperties(value, nestedParameters, + null, false); + Object nestedProperty = nestedClass.newInstance(); + IntrospectionSupport.setProperties(camelContext, + camelContext.getTypeConverter(), nestedProperty, + nestedParameters); + entry.setValue(nestedProperty); + } catch (NoSuchFieldException e) { + } + } + } IntrospectionSupport.setProperties(camelContext, camelContext.getTypeConverter(), component, parameters); return component; http://git-wip-us.apache.org/repos/asf/camel/blob/d485f2f0/components-starter/camel-sjms-starter/src/main/java/org/apache/camel/component/sjms/springboot/SjmsComponentAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-sjms-starter/src/main/java/org/apache/camel/component/sjms/springboot/SjmsComponentAutoConfiguration.java b/components-starter/camel-sjms-starter/src/main/java/org/apache/camel/component/sjms/springboot/SjmsComponentAutoConfiguration.java index 5683591..5b8903e 100644 --- a/components-starter/camel-sjms-starter/src/main/java/org/apache/camel/component/sjms/springboot/SjmsComponentAutoConfiguration.java +++ b/components-starter/camel-sjms-starter/src/main/java/org/apache/camel/component/sjms/springboot/SjmsComponentAutoConfiguration.java @@ -44,6 +44,26 @@ public class SjmsComponentAutoConfiguration { Map<String, Object> parameters = new HashMap<>(); IntrospectionSupport.getProperties(configuration, parameters, null, false); + for (Map.Entry<String, Object> entry : parameters.entrySet()) { + Object value = entry.getValue(); + Class<?> paramClass = value.getClass(); + if (paramClass.getName().endsWith("NestedConfiguration")) { + Class nestedClass = null; + try { + nestedClass = (Class) paramClass.getDeclaredField( + "CAMEL_NESTED_CLASS").get(null); + HashMap<String, Object> nestedParameters = new HashMap<>(); + IntrospectionSupport.getProperties(value, nestedParameters, + null, false); + Object nestedProperty = nestedClass.newInstance(); + IntrospectionSupport.setProperties(camelContext, + camelContext.getTypeConverter(), nestedProperty, + nestedParameters); + entry.setValue(nestedProperty); + } catch (NoSuchFieldException e) { + } + } + } IntrospectionSupport.setProperties(camelContext, camelContext.getTypeConverter(), component, parameters); return component; http://git-wip-us.apache.org/repos/asf/camel/blob/d485f2f0/components-starter/camel-sjms-starter/src/main/java/org/apache/camel/component/sjms/springboot/SjmsComponentConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-sjms-starter/src/main/java/org/apache/camel/component/sjms/springboot/SjmsComponentConfiguration.java b/components-starter/camel-sjms-starter/src/main/java/org/apache/camel/component/sjms/springboot/SjmsComponentConfiguration.java index b45174d..cc9f895 100644 --- a/components-starter/camel-sjms-starter/src/main/java/org/apache/camel/component/sjms/springboot/SjmsComponentConfiguration.java +++ b/components-starter/camel-sjms-starter/src/main/java/org/apache/camel/component/sjms/springboot/SjmsComponentConfiguration.java @@ -22,9 +22,9 @@ import org.apache.camel.component.sjms.jms.ConnectionResource; import org.apache.camel.component.sjms.jms.DestinationCreationStrategy; import org.apache.camel.component.sjms.jms.JmsKeyFormatStrategy; import org.apache.camel.component.sjms.jms.MessageCreatedStrategy; -import org.apache.camel.component.sjms.taskmanager.TimedTaskManager; import org.apache.camel.spi.HeaderFilterStrategy; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.NestedConfigurationProperty; /** * The sjms component (simple jms) allows messages to be sent to (or consumed @@ -44,12 +44,14 @@ public class SjmsComponentConfiguration { * To use a custom HeaderFilterStrategy to filter header to and from Camel * message. */ + @NestedConfigurationProperty private HeaderFilterStrategy headerFilterStrategy; /** * A ConnectionResource is an interface that allows for customization and * container control of the ConnectionFactory. See Plugable Connection * Resource Management for further details. */ + @NestedConfigurationProperty private ConnectionResource connectionResource; /** * The maximum number of connections available to endpoints started under @@ -66,25 +68,29 @@ public class SjmsComponentConfiguration { * org.apache.camel.component.jms.JmsKeyFormatStrategy and refer to it using * the notation. */ + @NestedConfigurationProperty private JmsKeyFormatStrategy jmsKeyFormatStrategy; /** * To configure which kind of commit strategy to use. Camel provides two * implementations out of the box default and batch. */ + @NestedConfigurationProperty private TransactionCommitStrategy transactionCommitStrategy; /** * To use a custom DestinationCreationStrategy. */ + @NestedConfigurationProperty private DestinationCreationStrategy destinationCreationStrategy; /** * To use a custom TimedTaskManager */ - private TimedTaskManager timedTaskManager; + private TimedTaskManagerNestedConfiguration timedTaskManager; /** * To use the given MessageCreatedStrategy which are invoked when Camel * creates new instances of javax.jms.Message objects when Camel is sending * a JMS message. */ + @NestedConfigurationProperty private MessageCreatedStrategy messageCreatedStrategy; public ConnectionFactory getConnectionFactory() { @@ -147,11 +153,12 @@ public class SjmsComponentConfiguration { this.destinationCreationStrategy = destinationCreationStrategy; } - public TimedTaskManager getTimedTaskManager() { + public TimedTaskManagerNestedConfiguration getTimedTaskManager() { return timedTaskManager; } - public void setTimedTaskManager(TimedTaskManager timedTaskManager) { + public void setTimedTaskManager( + TimedTaskManagerNestedConfiguration timedTaskManager) { this.timedTaskManager = timedTaskManager; } @@ -163,4 +170,8 @@ public class SjmsComponentConfiguration { MessageCreatedStrategy messageCreatedStrategy) { this.messageCreatedStrategy = messageCreatedStrategy; } + + public static class TimedTaskManagerNestedConfiguration { + public static final Class CAMEL_NESTED_CLASS = org.apache.camel.component.sjms.taskmanager.TimedTaskManager.class; + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/d485f2f0/components-starter/camel-slack-starter/src/main/java/org/apache/camel/component/slack/springboot/SlackComponentAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-slack-starter/src/main/java/org/apache/camel/component/slack/springboot/SlackComponentAutoConfiguration.java b/components-starter/camel-slack-starter/src/main/java/org/apache/camel/component/slack/springboot/SlackComponentAutoConfiguration.java index 7b891ba..e9c14e9 100644 --- a/components-starter/camel-slack-starter/src/main/java/org/apache/camel/component/slack/springboot/SlackComponentAutoConfiguration.java +++ b/components-starter/camel-slack-starter/src/main/java/org/apache/camel/component/slack/springboot/SlackComponentAutoConfiguration.java @@ -44,6 +44,26 @@ public class SlackComponentAutoConfiguration { Map<String, Object> parameters = new HashMap<>(); IntrospectionSupport.getProperties(configuration, parameters, null, false); + for (Map.Entry<String, Object> entry : parameters.entrySet()) { + Object value = entry.getValue(); + Class<?> paramClass = value.getClass(); + if (paramClass.getName().endsWith("NestedConfiguration")) { + Class nestedClass = null; + try { + nestedClass = (Class) paramClass.getDeclaredField( + "CAMEL_NESTED_CLASS").get(null); + HashMap<String, Object> nestedParameters = new HashMap<>(); + IntrospectionSupport.getProperties(value, nestedParameters, + null, false); + Object nestedProperty = nestedClass.newInstance(); + IntrospectionSupport.setProperties(camelContext, + camelContext.getTypeConverter(), nestedProperty, + nestedParameters); + entry.setValue(nestedProperty); + } catch (NoSuchFieldException e) { + } + } + } IntrospectionSupport.setProperties(camelContext, camelContext.getTypeConverter(), component, parameters); return component; http://git-wip-us.apache.org/repos/asf/camel/blob/d485f2f0/components-starter/camel-smpp-starter/src/main/java/org/apache/camel/component/smpp/springboot/SmppComponentAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-smpp-starter/src/main/java/org/apache/camel/component/smpp/springboot/SmppComponentAutoConfiguration.java b/components-starter/camel-smpp-starter/src/main/java/org/apache/camel/component/smpp/springboot/SmppComponentAutoConfiguration.java index d4b4816..0a92c0d 100644 --- a/components-starter/camel-smpp-starter/src/main/java/org/apache/camel/component/smpp/springboot/SmppComponentAutoConfiguration.java +++ b/components-starter/camel-smpp-starter/src/main/java/org/apache/camel/component/smpp/springboot/SmppComponentAutoConfiguration.java @@ -44,6 +44,26 @@ public class SmppComponentAutoConfiguration { Map<String, Object> parameters = new HashMap<>(); IntrospectionSupport.getProperties(configuration, parameters, null, false); + for (Map.Entry<String, Object> entry : parameters.entrySet()) { + Object value = entry.getValue(); + Class<?> paramClass = value.getClass(); + if (paramClass.getName().endsWith("NestedConfiguration")) { + Class nestedClass = null; + try { + nestedClass = (Class) paramClass.getDeclaredField( + "CAMEL_NESTED_CLASS").get(null); + HashMap<String, Object> nestedParameters = new HashMap<>(); + IntrospectionSupport.getProperties(value, nestedParameters, + null, false); + Object nestedProperty = nestedClass.newInstance(); + IntrospectionSupport.setProperties(camelContext, + camelContext.getTypeConverter(), nestedProperty, + nestedParameters); + entry.setValue(nestedProperty); + } catch (NoSuchFieldException e) { + } + } + } IntrospectionSupport.setProperties(camelContext, camelContext.getTypeConverter(), component, parameters); return component;