http://git-wip-us.apache.org/repos/asf/camel/blob/d485f2f0/components-starter/camel-jms-starter/src/main/java/org/apache/camel/component/jms/springboot/JmsComponentConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-jms-starter/src/main/java/org/apache/camel/component/jms/springboot/JmsComponentConfiguration.java b/components-starter/camel-jms-starter/src/main/java/org/apache/camel/component/jms/springboot/JmsComponentConfiguration.java index 504de2d..5bddc33 100644 --- a/components-starter/camel-jms-starter/src/main/java/org/apache/camel/component/jms/springboot/JmsComponentConfiguration.java +++ b/components-starter/camel-jms-starter/src/main/java/org/apache/camel/component/jms/springboot/JmsComponentConfiguration.java @@ -19,15 +19,20 @@ package org.apache.camel.component.jms.springboot; import javax.jms.ConnectionFactory; import javax.jms.ExceptionListener; import org.apache.camel.LoggingLevel; +import org.apache.camel.component.jms.ConsumerType; import org.apache.camel.component.jms.DefaultTaskExecutorType; -import org.apache.camel.component.jms.JmsConfiguration; +import org.apache.camel.component.jms.JmsComponent; import org.apache.camel.component.jms.JmsKeyFormatStrategy; +import org.apache.camel.component.jms.JmsMessageType; +import org.apache.camel.component.jms.JmsProviderMetadata; import org.apache.camel.component.jms.MessageCreatedStrategy; +import org.apache.camel.component.jms.MessageListenerContainerFactory; import org.apache.camel.component.jms.QueueBrowseStrategy; import org.apache.camel.component.jms.ReplyToType; import org.apache.camel.spi.HeaderFilterStrategy; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.DeprecatedConfigurationProperty; +import org.springframework.boot.context.properties.NestedConfigurationProperty; import org.springframework.context.ApplicationContext; import org.springframework.core.task.TaskExecutor; import org.springframework.jms.core.JmsOperations; @@ -48,7 +53,7 @@ public class JmsComponentConfiguration { /** * To use a shared JMS configuration */ - private JmsConfiguration configuration; + private JmsConfigurationNestedConfiguration configuration; /** * Specifies whether the consumer accept messages while it is stopping. You * may consider enabling this option if you start and stop JMS routes at @@ -179,6 +184,7 @@ public class JmsComponentConfiguration { * errorHandlerLogStackTrace options. This makes it much easier to configure * than having to code a custom errorHandler. */ + @NestedConfigurationProperty private ErrorHandler errorHandler; /** * Allows to configure the default errorHandler logging level for logging @@ -249,6 +255,7 @@ public class JmsComponentConfiguration { * org.springframework.jms.support.converter.MessageConverter so you can be * in control how to map to/from a javax.jms.Message. */ + @NestedConfigurationProperty private MessageConverter messageConverter; /** * Specifies whether Camel should auto map the received JMS message to a @@ -292,13 +299,13 @@ public class JmsComponentConfiguration { /** * The timeout for receiving messages (in milliseconds). */ - private long receiveTimeout; + private Long receiveTimeout; /** * Specifies the interval between recovery attempts i.e. when a connection * is being refreshed in milliseconds. The default is 5000 ms that is 5 * seconds. */ - private long recoveryInterval; + private Long recoveryInterval; /** * Deprecated: Enabled by default if you specify a durableSubscriptionName * and a clientId. @@ -308,12 +315,13 @@ public class JmsComponentConfiguration { /** * Allows you to specify a custom task executor for consuming messages. */ + @NestedConfigurationProperty private TaskExecutor taskExecutor; /** * When sending messages specifies the time-to-live of the message (in * milliseconds). */ - private long timeToLive; + private Long timeToLive; /** * Specifies whether to use transacted mode */ @@ -326,6 +334,7 @@ public class JmsComponentConfiguration { /** * The Spring transaction manager to use. */ + @NestedConfigurationProperty private PlatformTransactionManager transactionManager; /** * The name of the transaction to use. @@ -376,7 +385,7 @@ public class JmsComponentConfiguration { * and thus have per message individual timeout values. See also the * requestTimeoutCheckerInterval option. */ - private long requestTimeout; + private Long requestTimeout; /** * Configures how often Camel should check for timed out Exchanges when * doing request/reply over JMS. By default Camel checks once per second. @@ -384,7 +393,7 @@ public class JmsComponentConfiguration { * this interval to check more frequently. The timeout is determined by the * option requestTimeout. */ - private long requestTimeoutCheckerInterval; + private Long requestTimeoutCheckerInterval; /** * You can transfer the exchange over the wire instead of just the body and * headers. The following fields are transferred: In body Out body Fault @@ -425,6 +434,7 @@ public class JmsComponentConfiguration { * JmsTemplate as default. Can be used for testing purpose but not used much * as stated in the spring API docs. */ + @NestedConfigurationProperty private JmsOperations jmsOperations; /** * A pluggable @@ -432,6 +442,7 @@ public class JmsComponentConfiguration { * allows you to use your own resolver (for example to lookup the real * destination in a JNDI registry). */ + @NestedConfigurationProperty private DestinationResolver destinationResolver; /** * Allows for explicitly specifying which kind of strategy to use for @@ -510,25 +521,30 @@ public class JmsComponentConfiguration { * implementation of the org.apache.camel.component.jms.JmsKeyFormatStrategy * and refer to it using the notation. */ + @NestedConfigurationProperty private JmsKeyFormatStrategy jmsKeyFormatStrategy; /** * Sets the Spring ApplicationContext to use */ + @NestedConfigurationProperty private ApplicationContext applicationContext; /** * To use a custom QueueBrowseStrategy when browsing queues */ + @NestedConfigurationProperty private QueueBrowseStrategy queueBrowseStrategy; /** * To use a custom HeaderFilterStrategy to filter header to and from Camel * message. */ + @NestedConfigurationProperty private HeaderFilterStrategy headerFilterStrategy; /** * 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; /** * Number of times to wait for provisional correlation id to be updated to @@ -540,13 +556,14 @@ public class JmsComponentConfiguration { * Interval in millis to sleep each time while waiting for provisional * correlation id to be updated. */ - private long waitForProvisionCorrelationToBeUpdatedThreadSleepingTime; + private Long waitForProvisionCorrelationToBeUpdatedThreadSleepingTime; - public JmsConfiguration getConfiguration() { + public JmsConfigurationNestedConfiguration getConfiguration() { return configuration; } - public void setConfiguration(JmsConfiguration configuration) { + public void setConfiguration( + JmsConfigurationNestedConfiguration configuration) { this.configuration = configuration; } @@ -859,19 +876,19 @@ public class JmsComponentConfiguration { this.pubSubNoLocal = pubSubNoLocal; } - public long getReceiveTimeout() { + public Long getReceiveTimeout() { return receiveTimeout; } - public void setReceiveTimeout(long receiveTimeout) { + public void setReceiveTimeout(Long receiveTimeout) { this.receiveTimeout = receiveTimeout; } - public long getRecoveryInterval() { + public Long getRecoveryInterval() { return recoveryInterval; } - public void setRecoveryInterval(long recoveryInterval) { + public void setRecoveryInterval(Long recoveryInterval) { this.recoveryInterval = recoveryInterval; } @@ -894,11 +911,11 @@ public class JmsComponentConfiguration { this.taskExecutor = taskExecutor; } - public long getTimeToLive() { + public Long getTimeToLive() { return timeToLive; } - public void setTimeToLive(long timeToLive) { + public void setTimeToLive(Long timeToLive) { this.timeToLive = timeToLive; } @@ -976,20 +993,20 @@ public class JmsComponentConfiguration { this.forceSendOriginalMessage = forceSendOriginalMessage; } - public long getRequestTimeout() { + public Long getRequestTimeout() { return requestTimeout; } - public void setRequestTimeout(long requestTimeout) { + public void setRequestTimeout(Long requestTimeout) { this.requestTimeout = requestTimeout; } - public long getRequestTimeoutCheckerInterval() { + public Long getRequestTimeoutCheckerInterval() { return requestTimeoutCheckerInterval; } public void setRequestTimeoutCheckerInterval( - long requestTimeoutCheckerInterval) { + Long requestTimeoutCheckerInterval) { this.requestTimeoutCheckerInterval = requestTimeoutCheckerInterval; } @@ -1142,12 +1159,1330 @@ public class JmsComponentConfiguration { this.waitForProvisionCorrelationToBeUpdatedCounter = waitForProvisionCorrelationToBeUpdatedCounter; } - public long getWaitForProvisionCorrelationToBeUpdatedThreadSleepingTime() { + public Long getWaitForProvisionCorrelationToBeUpdatedThreadSleepingTime() { return waitForProvisionCorrelationToBeUpdatedThreadSleepingTime; } public void setWaitForProvisionCorrelationToBeUpdatedThreadSleepingTime( - long waitForProvisionCorrelationToBeUpdatedThreadSleepingTime) { + Long waitForProvisionCorrelationToBeUpdatedThreadSleepingTime) { this.waitForProvisionCorrelationToBeUpdatedThreadSleepingTime = waitForProvisionCorrelationToBeUpdatedThreadSleepingTime; } + + public static class JmsConfigurationNestedConfiguration { + public static final Class CAMEL_NESTED_CLASS = org.apache.camel.component.jms.JmsConfiguration.class; + /** + * The consumer type to use, which can be one of: Simple, Default, or + * Custom. The consumer type determines which Spring JMS listener to + * use. Default will use + * org.springframework.jms.listener.DefaultMessageListenerContainer, + * Simple will use + * org.springframework.jms.listener.SimpleMessageListenerContainer. When + * Custom is specified, the MessageListenerContainerFactory defined by + * the messageListenerContainerFactory option will determine what + * org.springframework.jms.listener.AbstractMessageListenerContainer to + * use. + */ + private ConsumerType consumerType = ConsumerType.Default; + /** + * Sets the default connection factory to be used if a connection + * factory is not specified for either + * {@link #setTemplateConnectionFactory(ConnectionFactory)} or + * {@link #setListenerConnectionFactory(ConnectionFactory)} + */ + private ConnectionFactory connectionFactory; + /** + * Username to use with the ConnectionFactory. You can also configure + * username/password directly on the ConnectionFactory. + */ + private String username; + /** + * Password to use with the ConnectionFactory. You can also configure + * username/password directly on the ConnectionFactory. + */ + private String password; + /** + * Sets the connection factory to be used for consuming messages + */ + private ConnectionFactory listenerConnectionFactory; + /** + * Sets the connection factory to be used for sending messages via the + * {@link JmsTemplate} via + * {@link #createInOnlyTemplate(JmsEndpoint,boolean,String)} + */ + private ConnectionFactory templateConnectionFactory; + /** + * Specifies whether the consumer container should auto-startup. + */ + private Boolean autoStartup; + /** + * Specifies whether the consumer accept messages while it is stopping. + * You may consider enabling this option, if you start and stop JMS + * routes at runtime, while there are still messages enqued on the + * queue. If this option is false, and you stop the JMS route, then + * messages may be rejected, and the JMS broker would have to attempt + * redeliveries, which yet again may be rejected, and eventually the + * message may be moved at a dead letter queue on the JMS broker. To + * avoid this its recommended to enable this option. + */ + private Boolean acceptMessagesWhileStopping; + private Boolean allowReplyManagerQuickStop; + /** + * Sets the JMS client ID to use. Note that this value, if specified, + * must be unique and can only be used by a single JMS connection + * instance. It is typically only required for durable topic + * subscriptions. + * <p> + * If using Apache ActiveMQ you may prefer to use Virtual Topics + * instead. + */ + private String clientId; + /** + * The durable subscriber name for specifying durable topic + * subscriptions. The clientId option must be configured as well. + */ + private String durableSubscriptionName; + /** + * Specifies the JMS Exception Listener that is to be notified of any + * underlying JMS exceptions. + */ + private ExceptionListener exceptionListener; + /** + * Specifies a org.springframework.util.ErrorHandler to be invoked in + * case of any uncaught exceptions thrown while processing a Message. By + * default these exceptions will be logged at the WARN level, if no + * errorHandler has been configured. You can configure logging level and + * whether stack traces should be logged using errorHandlerLoggingLevel + * and errorHandlerLogStackTrace options. This makes it much easier to + * configure, than having to code a custom errorHandler. + */ + @NestedConfigurationProperty + private ErrorHandler errorHandler; + /** + * Allows to configure the default errorHandler logging level for + * logging uncaught exceptions. + */ + private LoggingLevel errorHandlerLoggingLevel = LoggingLevel.WARN; + /** + * Allows to control whether stacktraces should be logged or not, by the + * default errorHandler. + */ + private Boolean errorHandlerLogStackTrace; + @Deprecated + private Boolean subscriptionDurable; + /** + * The JMS acknowledgement name, which is one of: SESSION_TRANSACTED, + * CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE + */ + private String acknowledgementModeName = "AUTO_ACKNOWLEDGE"; + /** + * Specifies whether the listener session should be exposed when + * consuming messages. + */ + private Boolean exposeListenerSession; + /** + * Allows you to specify a custom task executor for consuming messages. + */ + @NestedConfigurationProperty + private TaskExecutor taskExecutor; + /** + * Specifies whether to inhibit the delivery of messages published by + * its own connection. + */ + private Boolean pubSubNoLocal; + /** + * Specifies the default number of concurrent consumers when consuming + * from JMS (not for request/reply over JMS). See also the + * maxMessagesPerTask option to control dynamic scaling up/down of + * threads. + * <p> + * When doing request/reply over JMS then the option + * replyToConcurrentConsumers is used to control number of concurrent + * consumers on the reply message listener. + */ + private Integer concurrentConsumers; + /** + * Specifies the default number of concurrent consumers when doing + * request/reply over JMS. See also the maxMessagesPerTask option to + * control dynamic scaling up/down of threads. + */ + private Integer replyToConcurrentConsumers; + /** + * The number of messages per task. -1 is unlimited. If you use a range + * for concurrent consumers (eg min < max), then this option can be used + * to set a value to eg 100 to control how fast the consumers will + * shrink when less work is required. + */ + private Integer maxMessagesPerTask; + /** + * Sets the cache level by ID for the underlying JMS resources. See + * cacheLevelName option for more details. + */ + private Integer cacheLevel; + /** + * Sets the cache level by name for the underlying JMS resources. + * Possible values are: CACHE_AUTO, CACHE_CONNECTION, CACHE_CONSUMER, + * CACHE_NONE, and CACHE_SESSION. The default setting is CACHE_AUTO. See + * the Spring documentation and Transactions Cache Levels for more + * information. + */ + private String cacheLevelName = "CACHE_AUTO"; + /** + * Specifies the interval between recovery attempts, i.e. when a + * connection is being refreshed, in milliseconds. The default is 5000 + * ms, that is, 5 seconds. + */ + private Long recoveryInterval; + /** + * The timeout for receiving messages (in milliseconds). + */ + private Long receiveTimeout; + /** + * The Spring transaction manager to use. + */ + @NestedConfigurationProperty + private PlatformTransactionManager transactionManager; + /** + * The name of the transaction to use. + */ + private String transactionName; + /** + * The timeout value of the transaction (in seconds), if using + * transacted mode. + */ + private Integer transactionTimeout; + /** + * Specifies the limit for idle executions of a receive task, not having + * received any message within its execution. If this limit is reached, + * the task will shut down and leave receiving to other executing tasks + * (in the case of dynamic scheduling; see the maxConcurrentConsumers + * setting). There is additional doc available from Spring. + */ + private Integer idleTaskExecutionLimit; + /** + * Specify the limit for the number of consumers that are allowed to be + * idle at any given time. + */ + private Integer idleConsumerLimit; + /** + * Number of times to wait for provisional correlation id to be updated + * to the actual correlation id when doing request/reply over JMS and + * when the option useMessageIDAsCorrelationID is enabled. + */ + private Integer waitForProvisionCorrelationToBeUpdatedCounter; + /** + * Interval in millis to sleep each time while waiting for provisional + * correlation id to be updated. + */ + private Long waitForProvisionCorrelationToBeUpdatedThreadSleepingTime; + /** + * Specifies the maximum number of concurrent consumers when consuming + * from JMS (not for request/reply over JMS). See also the + * maxMessagesPerTask option to control dynamic scaling up/down of + * threads. + * <p> + * When doing request/reply over JMS then the option + * replyToMaxConcurrentConsumers is used to control number of concurrent + * consumers on the reply message listener. + */ + private Integer maxConcurrentConsumers; + /** + * Specifies the maximum number of concurrent consumers when using + * request/reply over JMS. See also the maxMessagesPerTask option to + * control dynamic scaling up/down of threads. + */ + private Integer replyToMaxConcurrentConsumers; + /** + * Specifies the maximum number of concurrent consumers for continue + * routing when timeout occurred when using request/reply over JMS. + */ + private Integer replyToOnTimeoutMaxConcurrentConsumers; + /** + * Specifies whether persistent delivery is used by default. + */ + private Boolean deliveryPersistent; + /** + * Specifies the delivery mode to be used. Possibles values are those + * defined by javax.jms.DeliveryMode. NON_PERSISTENT = 1 and PERSISTENT + * = 2. + */ + private Integer deliveryMode; + /** + * Specifies whether to use persistent delivery by default for replies. + */ + private Boolean replyToDeliveryPersistent; + /** + * When sending messages, specifies the time-to-live of the message (in + * milliseconds). + */ + private Long timeToLive; + /** + * To use a custom Spring + * org.springframework.jms.support.converter.MessageConverter so you can + * be in control how to map to/from a javax.jms.Message. + */ + @NestedConfigurationProperty + private MessageConverter messageConverter; + /** + * Specifies whether Camel should auto map the received JMS message to a + * suited payload type, such as javax.jms.TextMessage to a String etc. + */ + private Boolean mapJmsMessage; + /** + * When sending, specifies whether message IDs should be added. This is + * just an hint to the JMS Broker. If the JMS provider accepts this + * hint, these messages must have the message ID set to null; if the + * provider ignores the hint, the message ID must be set to its normal + * unique value + */ + private Boolean messageIdEnabled; + /** + * Specifies whether timestamps should be enabled by default on sending + * messages. This is just an hint to the JMS Broker. If the JMS provider + * accepts this hint, these messages must have the timestamp set to + * zero; if the provider ignores the hint, the timestamp must be set to + * its normal value + */ + private Boolean messageTimestampEnabled; + /** + * Values greater than 1 specify the message priority when sending + * (where 0 is the lowest priority and 9 is the highest). The + * explicitQosEnabled option must also be enabled in order for this + * option to have any effect. + */ + private Integer priority; + /** + * The JMS acknowledgement mode defined as an Integer. Allows you to set + * vendor-specific extensions to the acknowledgment mode. For the + * regular modes, it is preferable to use the acknowledgementModeName + * instead. + */ + private Integer acknowledgementMode; + /** + * Specifies whether to use transacted mode + */ + private Boolean transacted; + @Deprecated + private Boolean transactedInOut; + /** + * If true, Camel will create a JmsTransactionManager, if there is no + * transactionManager injected when option transacted=true. + */ + private Boolean lazyCreateTransactionManager; + /** + * Enables eager loading of JMS properties as soon as a message is + * loaded which generally is inefficient as the JMS properties may not + * be required but sometimes can catch early any issues with the + * underlying JMS provider and the use of JMS properties + */ + private Boolean eagerLoadingOfProperties; + /** + * If true, a producer will behave like a InOnly exchange with the + * exception that JMSReplyTo header is sent out and not be suppressed + * like in the case of InOnly. Like InOnly the producer will not wait + * for a reply. A consumer with this flag will behave like InOnly. This + * feature can be used to bridge InOut requests to another queue so that + * a route on the other queue will send it´s response directly back to + * the original JMSReplyTo. + */ + private Boolean disableReplyTo; + /** + * Set to true, if you want to send message using the QoS settings + * specified on the message, instead of the QoS settings on the JMS + * endpoint. The following three headers are considered JMSPriority, + * JMSDeliveryMode, and JMSExpiration. You can provide all or only some + * of them. If not provided, Camel will fall back to use the values from + * the endpoint instead. So, when using this option, the headers + * override the values from the endpoint. The explicitQosEnabled option, + * by contrast, will only use options set on the endpoint, and not + * values from the message header. + */ + private Boolean preserveMessageQos; + /** + * Allows you to use your own implementation of the + * org.springframework.jms.core.JmsOperations interface. Camel uses + * JmsTemplate as default. Can be used for testing purpose, but not used + * much as stated in the spring API docs. + */ + @NestedConfigurationProperty + private JmsOperations jmsOperations; + /** + * A pluggable + * org.springframework.jms.support.destination.DestinationResolver that + * allows you to use your own resolver (for example, to lookup the real + * destination in a JNDI registry). + */ + @NestedConfigurationProperty + private DestinationResolver destinationResolver; + /** + * Allows the provider metadata to be explicitly configured. Typically + * this is not required and Camel will auto-detect the provider metadata + * from the underlying provider. + */ + @NestedConfigurationProperty + private JmsProviderMetadata providerMetadata; + /** + * Sets the {@link JmsOperations} used to deduce the + * {@link JmsProviderMetadata} details which if none is customized one + * is lazily created on demand + */ + @NestedConfigurationProperty + private JmsOperations metadataJmsOperations; + /** + * If true, Camel will always make a JMS message copy of the message + * when it is passed to the producer for sending. Copying the message is + * needed in some situations, such as when a + * replyToDestinationSelectorName is set (incidentally, Camel will set + * the alwaysCopyMessage option to true, if a + * replyToDestinationSelectorName is set) + */ + private Boolean alwaysCopyMessage; + /** + * Specifies whether JMSMessageID should always be used as + * JMSCorrelationID for InOut messages. + */ + private Boolean useMessageIDAsCorrelationID; + /** + * The timeout for waiting for a reply when using the InOut Exchange + * Pattern (in milliseconds). The default is 20 seconds. You can include + * the header "CamelJmsRequestTimeout" to override this endpoint + * configured timeout value, and thus have per message individual + * timeout values. See also the requestTimeoutCheckerInterval option. + */ + private Long requestTimeout; + /** + * Configures how often Camel should check for timed out Exchanges when + * doing request/reply over JMS. By default Camel checks once per + * second. But if you must react faster when a timeout occurs, then you + * can lower this interval, to check more frequently. The timeout is + * determined by the option requestTimeout. + */ + private Long requestTimeoutCheckerInterval; + /** + * Provides an explicit ReplyTo destination, which overrides any + * incoming value of Message.getJMSReplyTo(). + */ + private String replyTo; + /** + * Sets the JMS Selector using the fixed name to be used so you can + * filter out your own replies from the others when using a shared queue + * (that is, if you are not using a temporary reply queue). + */ + private String replyToDestinationSelectorName; + /** + * Provides an explicit ReplyTo destination in the JMS message, which + * overrides the setting of replyTo. It is useful if you want to forward + * the message to a remote Queue and receive the reply message from the + * ReplyTo destination. + */ + private String replyToOverride; + /** + * Whether a JMS consumer is allowed to send a reply message to the same + * destination that the consumer is using to consume from. This prevents + * an endless loop by consuming and sending back the same message to + * itself. + */ + private Boolean replyToSameDestinationAllowed; + /** + * Allows you to force the use of a specific javax.jms.Message + * implementation for sending JMS messages. Possible values are: Bytes, + * Map, Object, Stream, Text. By default, Camel would determine which + * JMS message type to use from the In body type. This option allows you + * to specify it. + */ + private JmsMessageType jmsMessageType; + /** + * Pluggable strategy for encoding and decoding JMS keys so they can be + * compliant with the JMS specification. Camel provides two + * implementations out of the box: default and passthrough. The default + * strategy will safely marshal dots and hyphens (. and -). The + * passthrough strategy leaves the key as is. Can be used for JMS + * brokers which do not care whether JMS header keys contain illegal + * characters. You can provide your own implementation of the + * org.apache.camel.component.jms.JmsKeyFormatStrategy and refer to it + * using the # notation. + */ + @NestedConfigurationProperty + private JmsKeyFormatStrategy jmsKeyFormatStrategy; + /** + * You can transfer the exchange over the wire instead of just the body + * and headers. The following fields are transferred: In body, Out body, + * Fault body, In headers, Out headers, Fault headers, exchange + * properties, exchange exception. This requires that the objects are + * serializable. Camel will exclude any non-serializable objects and log + * it at WARN level. You must enable this option on both the producer + * and consumer side, so Camel knows the payloads is an Exchange and not + * a regular payload. + */ + private Boolean transferExchange; + /** + * If enabled and you are using Request Reply messaging (InOut) and an + * Exchange failed on the consumer side, then the caused Exception will + * be send back in response as a javax.jms.ObjectMessage. If the client + * is Camel, the returned Exception is rethrown. This allows you to use + * Camel JMS as a bridge in your routing - for example, using persistent + * queues to enable robust routing. Notice that if you also have + * transferExchange enabled, this option takes precedence. The caught + * exception is required to be serializable. The original Exception on + * the consumer side can be wrapped in an outer exception such as + * org.apache.camel.RuntimeCamelException when returned to the producer. + */ + private Boolean transferException; + /** + * If enabled and you are using Request Reply messaging (InOut) and an + * Exchange failed with a SOAP fault (not exception) on the consumer + * side, then the fault flag on + * {@link org.apache.camel.Message#isFault()} will be send back in the + * response as a JMS header with the key + * {@link JmsConstants#JMS_TRANSFER_FAULT} . If the client is Camel, the + * returned fault flag will be set on the + * {@link org.apache.camel.Message#setFault(boolean)} . + * <p> + * You may want to enable this when using Camel components that support + * faults such as SOAP based such as cxf or spring-ws. + */ + private Boolean transferFault; + /** + * Whether to startup the JmsConsumer message listener asynchronously, + * when starting a route. For example if a JmsConsumer cannot get a + * connection to a remote JMS broker, then it may block while retrying + * and/or failover. This will cause Camel to block while starting + * routes. By setting this option to true, you will let routes startup, + * while the JmsConsumer connects to the JMS broker using a dedicated + * thread in asynchronous mode. If this option is used, then beware that + * if the connection could not be established, then an exception is + * logged at WARN level, and the consumer will not be able to receive + * messages; You can then restart the route to retry. + */ + private Boolean asyncStartListener; + /** + * Whether to stop the JmsConsumer message listener asynchronously, when + * stopping a route. + */ + private Boolean asyncStopListener; + /** + * Specifies whether to test the connection on startup. This ensures + * that when Camel starts that all the JMS consumers have a valid + * connection to the JMS broker. If a connection cannot be granted then + * Camel throws an exception on startup. This ensures that Camel is not + * started with failed connections. The JMS producers is tested as well. + */ + private Boolean testConnectionOnStartup; + /** + * When using mapJmsMessage=false Camel will create a new JMS message to + * send to a new JMS destination if you touch the headers (get or set) + * during the route. Set this option to true to force Camel to send the + * original JMS message that was received. + */ + private Boolean forceSendOriginalMessage; + /** + * Use this option to force disabling time to live. For example when you + * do request/reply over JMS, then Camel will by default use the + * requestTimeout value as time to live on the message being sent. The + * problem is that the sender and receiver systems have to have their + * clocks synchronized, so they are in sync. This is not always so easy + * to archive. So you can use disableTimeToLive=true to not set a time + * to live value on the sent message. Then the message will not expire + * on the receiver system. See below in section About time to live for + * more details. + */ + private Boolean disableTimeToLive; + /** + * Allows for explicitly specifying which kind of strategy to use for + * replyTo queues when doing request/reply over JMS. Possible values + * are: Temporary, Shared, or Exclusive. By default Camel will use + * temporary queues. However if replyTo has been configured, then Shared + * is used by default. This option allows you to use exclusive queues + * instead of shared ones. See Camel JMS documentation for more details, + * and especially the notes about the implications if running in a + * clustered environment, and the fact that Shared reply queues has + * lower performance than its alternatives Temporary and Exclusive. + */ + private ReplyToType replyToType; + /** + * Whether the JmsConsumer processes the Exchange asynchronously. If + * enabled then the JmsConsumer may pickup the next message from the JMS + * queue, while the previous message is being processed asynchronously + * (by the Asynchronous Routing Engine). This means that messages may be + * processed not 100% strictly in order. If disabled (as default) then + * the Exchange is fully processed before the JmsConsumer will pickup + * the next message from the JMS queue. Note if transacted has been + * enabled, then asyncConsumer=true does not run asynchronously, as + * transaction must be executed synchronously (Camel 3.0 may support + * async transactions). + */ + private Boolean asyncConsumer; + /** + * Sets the cache level by name for the reply consumer when doing + * request/reply over JMS. This option only applies when using fixed + * reply queues (not temporary). Camel will by default use: + * CACHE_CONSUMER for exclusive or shared w/ replyToSelectorName. And + * CACHE_SESSION for shared without replyToSelectorName. Some JMS + * brokers such as IBM WebSphere may require to set the + * replyToCacheLevelName=CACHE_NONE to work. Note: If using temporary + * queues then CACHE_NONE is not allowed, and you must use a higher + * value such as CACHE_CONSUMER or CACHE_SESSION. + */ + private String replyToCacheLevelName; + /** + * Whether to allow sending messages with no body. If this option is + * false and the message body is null, then an JMSException is thrown. + */ + private Boolean allowNullBody; + /** + * Registry ID of the MessageListenerContainerFactory used to determine + * what + * org.springframework.jms.listener.AbstractMessageListenerContainer to + * use to consume messages. Setting this will automatically set + * consumerType to Custom. + */ + @NestedConfigurationProperty + private MessageListenerContainerFactory messageListenerContainerFactory; + /** + * Only applicable when sending to JMS destination using InOnly (eg fire + * and forget). Enabling this option will enrich the Camel Exchange with + * the actual JMSMessageID that was used by the JMS client when the + * message was sent to the JMS destination. + */ + private Boolean includeSentJMSMessageID; + /** + * Specifies what default TaskExecutor type to use in the + * DefaultMessageListenerContainer, for both consumer endpoints and the + * ReplyTo consumer of producer endpoints. Possible values: SimpleAsync + * (uses Spring's SimpleAsyncTaskExecutor) or ThreadPool (uses Spring's + * ThreadPoolTaskExecutor with optimal values - cached threadpool-like). + * If not set, it defaults to the previous behaviour, which uses a + * cached thread pool for consumer endpoints and SimpleAsync for reply + * consumers. The use of ThreadPool is recommended to reduce + * "thread trash" in elastic configurations with dynamically increasing + * and decreasing concurrent consumers. + */ + private DefaultTaskExecutorType defaultTaskExecutorType; + /** + * Whether to include all JMSXxxx properties when mapping from JMS to + * Camel Message. Setting this to true will include properties such as + * JMSXAppID, and JMSXUserID etc. Note: If you are using a custom + * headerFilterStrategy then this option does not apply. + */ + private Boolean includeAllJMSXProperties; + /** + * To use the given MessageCreatedStrategy which are invoked when Camel + * creates new instances of <tt>javax.jms.Message</tt> objects when + * Camel is sending a JMS message. + */ + @NestedConfigurationProperty + private MessageCreatedStrategy messageCreatedStrategy; + /** + * Sets the JMS selector to use + */ + private String selector; + + public ConsumerType getConsumerType() { + return consumerType; + } + + public void setConsumerType(ConsumerType consumerType) { + this.consumerType = consumerType; + } + + public ConnectionFactory getConnectionFactory() { + return connectionFactory; + } + + public void setConnectionFactory(ConnectionFactory connectionFactory) { + this.connectionFactory = connectionFactory; + } + + 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 ConnectionFactory getListenerConnectionFactory() { + return listenerConnectionFactory; + } + + public void setListenerConnectionFactory( + ConnectionFactory listenerConnectionFactory) { + this.listenerConnectionFactory = listenerConnectionFactory; + } + + public ConnectionFactory getTemplateConnectionFactory() { + return templateConnectionFactory; + } + + public void setTemplateConnectionFactory( + ConnectionFactory templateConnectionFactory) { + this.templateConnectionFactory = templateConnectionFactory; + } + + public Boolean getAutoStartup() { + return autoStartup; + } + + public void setAutoStartup(Boolean autoStartup) { + this.autoStartup = autoStartup; + } + + public Boolean getAcceptMessagesWhileStopping() { + return acceptMessagesWhileStopping; + } + + public void setAcceptMessagesWhileStopping( + Boolean acceptMessagesWhileStopping) { + this.acceptMessagesWhileStopping = acceptMessagesWhileStopping; + } + + public Boolean getAllowReplyManagerQuickStop() { + return allowReplyManagerQuickStop; + } + + public void setAllowReplyManagerQuickStop( + Boolean allowReplyManagerQuickStop) { + this.allowReplyManagerQuickStop = allowReplyManagerQuickStop; + } + + public String getClientId() { + return clientId; + } + + public void setClientId(String clientId) { + this.clientId = clientId; + } + + public String getDurableSubscriptionName() { + return durableSubscriptionName; + } + + public void setDurableSubscriptionName(String durableSubscriptionName) { + this.durableSubscriptionName = durableSubscriptionName; + } + + public ExceptionListener getExceptionListener() { + return exceptionListener; + } + + public void setExceptionListener(ExceptionListener exceptionListener) { + this.exceptionListener = exceptionListener; + } + + public ErrorHandler getErrorHandler() { + return errorHandler; + } + + public void setErrorHandler(ErrorHandler errorHandler) { + this.errorHandler = errorHandler; + } + + public LoggingLevel getErrorHandlerLoggingLevel() { + return errorHandlerLoggingLevel; + } + + public void setErrorHandlerLoggingLevel( + LoggingLevel errorHandlerLoggingLevel) { + this.errorHandlerLoggingLevel = errorHandlerLoggingLevel; + } + + public Boolean getErrorHandlerLogStackTrace() { + return errorHandlerLogStackTrace; + } + + public void setErrorHandlerLogStackTrace( + Boolean errorHandlerLogStackTrace) { + this.errorHandlerLogStackTrace = errorHandlerLogStackTrace; + } + + @Deprecated + @DeprecatedConfigurationProperty + public Boolean getSubscriptionDurable() { + return subscriptionDurable; + } + + @Deprecated + public void setSubscriptionDurable(Boolean subscriptionDurable) { + this.subscriptionDurable = subscriptionDurable; + } + + public String getAcknowledgementModeName() { + return acknowledgementModeName; + } + + public void setAcknowledgementModeName(String acknowledgementModeName) { + this.acknowledgementModeName = acknowledgementModeName; + } + + public Boolean getExposeListenerSession() { + return exposeListenerSession; + } + + public void setExposeListenerSession(Boolean exposeListenerSession) { + this.exposeListenerSession = exposeListenerSession; + } + + public TaskExecutor getTaskExecutor() { + return taskExecutor; + } + + public void setTaskExecutor(TaskExecutor taskExecutor) { + this.taskExecutor = taskExecutor; + } + + public Boolean getPubSubNoLocal() { + return pubSubNoLocal; + } + + public void setPubSubNoLocal(Boolean pubSubNoLocal) { + this.pubSubNoLocal = pubSubNoLocal; + } + + public Integer getConcurrentConsumers() { + return concurrentConsumers; + } + + public void setConcurrentConsumers(Integer concurrentConsumers) { + this.concurrentConsumers = concurrentConsumers; + } + + public Integer getReplyToConcurrentConsumers() { + return replyToConcurrentConsumers; + } + + public void setReplyToConcurrentConsumers( + Integer replyToConcurrentConsumers) { + this.replyToConcurrentConsumers = replyToConcurrentConsumers; + } + + public Integer getMaxMessagesPerTask() { + return maxMessagesPerTask; + } + + public void setMaxMessagesPerTask(Integer maxMessagesPerTask) { + this.maxMessagesPerTask = maxMessagesPerTask; + } + + public Integer getCacheLevel() { + return cacheLevel; + } + + public void setCacheLevel(Integer cacheLevel) { + this.cacheLevel = cacheLevel; + } + + public String getCacheLevelName() { + return cacheLevelName; + } + + public void setCacheLevelName(String cacheLevelName) { + this.cacheLevelName = cacheLevelName; + } + + public Long getRecoveryInterval() { + return recoveryInterval; + } + + public void setRecoveryInterval(Long recoveryInterval) { + this.recoveryInterval = recoveryInterval; + } + + public Long getReceiveTimeout() { + return receiveTimeout; + } + + public void setReceiveTimeout(Long receiveTimeout) { + this.receiveTimeout = receiveTimeout; + } + + public PlatformTransactionManager getTransactionManager() { + return transactionManager; + } + + public void setTransactionManager( + PlatformTransactionManager transactionManager) { + this.transactionManager = transactionManager; + } + + public String getTransactionName() { + return transactionName; + } + + public void setTransactionName(String transactionName) { + this.transactionName = transactionName; + } + + public Integer getTransactionTimeout() { + return transactionTimeout; + } + + public void setTransactionTimeout(Integer transactionTimeout) { + this.transactionTimeout = transactionTimeout; + } + + public Integer getIdleTaskExecutionLimit() { + return idleTaskExecutionLimit; + } + + public void setIdleTaskExecutionLimit(Integer idleTaskExecutionLimit) { + this.idleTaskExecutionLimit = idleTaskExecutionLimit; + } + + public Integer getIdleConsumerLimit() { + return idleConsumerLimit; + } + + public void setIdleConsumerLimit(Integer idleConsumerLimit) { + this.idleConsumerLimit = idleConsumerLimit; + } + + public Integer getWaitForProvisionCorrelationToBeUpdatedCounter() { + return waitForProvisionCorrelationToBeUpdatedCounter; + } + + public void setWaitForProvisionCorrelationToBeUpdatedCounter( + Integer waitForProvisionCorrelationToBeUpdatedCounter) { + this.waitForProvisionCorrelationToBeUpdatedCounter = waitForProvisionCorrelationToBeUpdatedCounter; + } + + public Long getWaitForProvisionCorrelationToBeUpdatedThreadSleepingTime() { + return waitForProvisionCorrelationToBeUpdatedThreadSleepingTime; + } + + public void setWaitForProvisionCorrelationToBeUpdatedThreadSleepingTime( + Long waitForProvisionCorrelationToBeUpdatedThreadSleepingTime) { + this.waitForProvisionCorrelationToBeUpdatedThreadSleepingTime = waitForProvisionCorrelationToBeUpdatedThreadSleepingTime; + } + + public Integer getMaxConcurrentConsumers() { + return maxConcurrentConsumers; + } + + public void setMaxConcurrentConsumers(Integer maxConcurrentConsumers) { + this.maxConcurrentConsumers = maxConcurrentConsumers; + } + + public Integer getReplyToMaxConcurrentConsumers() { + return replyToMaxConcurrentConsumers; + } + + public void setReplyToMaxConcurrentConsumers( + Integer replyToMaxConcurrentConsumers) { + this.replyToMaxConcurrentConsumers = replyToMaxConcurrentConsumers; + } + + public Integer getReplyToOnTimeoutMaxConcurrentConsumers() { + return replyToOnTimeoutMaxConcurrentConsumers; + } + + public void setReplyToOnTimeoutMaxConcurrentConsumers( + Integer replyToOnTimeoutMaxConcurrentConsumers) { + this.replyToOnTimeoutMaxConcurrentConsumers = replyToOnTimeoutMaxConcurrentConsumers; + } + + public Boolean getDeliveryPersistent() { + return deliveryPersistent; + } + + public void setDeliveryPersistent(Boolean deliveryPersistent) { + this.deliveryPersistent = deliveryPersistent; + } + + public Integer getDeliveryMode() { + return deliveryMode; + } + + public void setDeliveryMode(Integer deliveryMode) { + this.deliveryMode = deliveryMode; + } + + public Boolean getReplyToDeliveryPersistent() { + return replyToDeliveryPersistent; + } + + public void setReplyToDeliveryPersistent( + Boolean replyToDeliveryPersistent) { + this.replyToDeliveryPersistent = replyToDeliveryPersistent; + } + + public Long getTimeToLive() { + return timeToLive; + } + + public void setTimeToLive(Long timeToLive) { + this.timeToLive = timeToLive; + } + + public MessageConverter getMessageConverter() { + return messageConverter; + } + + public void setMessageConverter(MessageConverter messageConverter) { + this.messageConverter = messageConverter; + } + + public Boolean getMapJmsMessage() { + return mapJmsMessage; + } + + public void setMapJmsMessage(Boolean mapJmsMessage) { + this.mapJmsMessage = mapJmsMessage; + } + + public Boolean getMessageIdEnabled() { + return messageIdEnabled; + } + + public void setMessageIdEnabled(Boolean messageIdEnabled) { + this.messageIdEnabled = messageIdEnabled; + } + + public Boolean getMessageTimestampEnabled() { + return messageTimestampEnabled; + } + + public void setMessageTimestampEnabled(Boolean messageTimestampEnabled) { + this.messageTimestampEnabled = messageTimestampEnabled; + } + + public Integer getPriority() { + return priority; + } + + public void setPriority(Integer priority) { + this.priority = priority; + } + + public Integer getAcknowledgementMode() { + return acknowledgementMode; + } + + public void setAcknowledgementMode(Integer acknowledgementMode) { + this.acknowledgementMode = acknowledgementMode; + } + + public Boolean getTransacted() { + return transacted; + } + + public void setTransacted(Boolean transacted) { + this.transacted = transacted; + } + + @Deprecated + @DeprecatedConfigurationProperty + public Boolean getTransactedInOut() { + return transactedInOut; + } + + @Deprecated + public void setTransactedInOut(Boolean transactedInOut) { + this.transactedInOut = transactedInOut; + } + + public Boolean getLazyCreateTransactionManager() { + return lazyCreateTransactionManager; + } + + public void setLazyCreateTransactionManager( + Boolean lazyCreateTransactionManager) { + this.lazyCreateTransactionManager = lazyCreateTransactionManager; + } + + public Boolean getEagerLoadingOfProperties() { + return eagerLoadingOfProperties; + } + + public void setEagerLoadingOfProperties(Boolean eagerLoadingOfProperties) { + this.eagerLoadingOfProperties = eagerLoadingOfProperties; + } + + public Boolean getDisableReplyTo() { + return disableReplyTo; + } + + public void setDisableReplyTo(Boolean disableReplyTo) { + this.disableReplyTo = disableReplyTo; + } + + public Boolean getPreserveMessageQos() { + return preserveMessageQos; + } + + public void setPreserveMessageQos(Boolean preserveMessageQos) { + this.preserveMessageQos = preserveMessageQos; + } + + public JmsOperations getJmsOperations() { + return jmsOperations; + } + + public void setJmsOperations(JmsOperations jmsOperations) { + this.jmsOperations = jmsOperations; + } + + public DestinationResolver getDestinationResolver() { + return destinationResolver; + } + + public void setDestinationResolver( + DestinationResolver destinationResolver) { + this.destinationResolver = destinationResolver; + } + + public JmsProviderMetadata getProviderMetadata() { + return providerMetadata; + } + + public void setProviderMetadata(JmsProviderMetadata providerMetadata) { + this.providerMetadata = providerMetadata; + } + + public JmsOperations getMetadataJmsOperations() { + return metadataJmsOperations; + } + + public void setMetadataJmsOperations(JmsOperations metadataJmsOperations) { + this.metadataJmsOperations = metadataJmsOperations; + } + + public Boolean getAlwaysCopyMessage() { + return alwaysCopyMessage; + } + + public void setAlwaysCopyMessage(Boolean alwaysCopyMessage) { + this.alwaysCopyMessage = alwaysCopyMessage; + } + + public Boolean getUseMessageIDAsCorrelationID() { + return useMessageIDAsCorrelationID; + } + + public void setUseMessageIDAsCorrelationID( + Boolean useMessageIDAsCorrelationID) { + this.useMessageIDAsCorrelationID = useMessageIDAsCorrelationID; + } + + public Long getRequestTimeout() { + return requestTimeout; + } + + public void setRequestTimeout(Long requestTimeout) { + this.requestTimeout = requestTimeout; + } + + public Long getRequestTimeoutCheckerInterval() { + return requestTimeoutCheckerInterval; + } + + public void setRequestTimeoutCheckerInterval( + Long requestTimeoutCheckerInterval) { + this.requestTimeoutCheckerInterval = requestTimeoutCheckerInterval; + } + + public String getReplyTo() { + return replyTo; + } + + public void setReplyTo(String replyTo) { + this.replyTo = replyTo; + } + + public String getReplyToDestinationSelectorName() { + return replyToDestinationSelectorName; + } + + public void setReplyToDestinationSelectorName( + String replyToDestinationSelectorName) { + this.replyToDestinationSelectorName = replyToDestinationSelectorName; + } + + public String getReplyToOverride() { + return replyToOverride; + } + + public void setReplyToOverride(String replyToOverride) { + this.replyToOverride = replyToOverride; + } + + public Boolean getReplyToSameDestinationAllowed() { + return replyToSameDestinationAllowed; + } + + public void setReplyToSameDestinationAllowed( + Boolean replyToSameDestinationAllowed) { + this.replyToSameDestinationAllowed = replyToSameDestinationAllowed; + } + + public JmsMessageType getJmsMessageType() { + return jmsMessageType; + } + + public void setJmsMessageType(JmsMessageType jmsMessageType) { + this.jmsMessageType = jmsMessageType; + } + + public JmsKeyFormatStrategy getJmsKeyFormatStrategy() { + return jmsKeyFormatStrategy; + } + + public void setJmsKeyFormatStrategy( + JmsKeyFormatStrategy jmsKeyFormatStrategy) { + this.jmsKeyFormatStrategy = jmsKeyFormatStrategy; + } + + public Boolean getTransferExchange() { + return transferExchange; + } + + public void setTransferExchange(Boolean transferExchange) { + this.transferExchange = transferExchange; + } + + public Boolean getTransferException() { + return transferException; + } + + public void setTransferException(Boolean transferException) { + this.transferException = transferException; + } + + public Boolean getTransferFault() { + return transferFault; + } + + public void setTransferFault(Boolean transferFault) { + this.transferFault = transferFault; + } + + public Boolean getAsyncStartListener() { + return asyncStartListener; + } + + public void setAsyncStartListener(Boolean asyncStartListener) { + this.asyncStartListener = asyncStartListener; + } + + public Boolean getAsyncStopListener() { + return asyncStopListener; + } + + public void setAsyncStopListener(Boolean asyncStopListener) { + this.asyncStopListener = asyncStopListener; + } + + public Boolean getTestConnectionOnStartup() { + return testConnectionOnStartup; + } + + public void setTestConnectionOnStartup(Boolean testConnectionOnStartup) { + this.testConnectionOnStartup = testConnectionOnStartup; + } + + public Boolean getForceSendOriginalMessage() { + return forceSendOriginalMessage; + } + + public void setForceSendOriginalMessage(Boolean forceSendOriginalMessage) { + this.forceSendOriginalMessage = forceSendOriginalMessage; + } + + public Boolean getDisableTimeToLive() { + return disableTimeToLive; + } + + public void setDisableTimeToLive(Boolean disableTimeToLive) { + this.disableTimeToLive = disableTimeToLive; + } + + public ReplyToType getReplyToType() { + return replyToType; + } + + public void setReplyToType(ReplyToType replyToType) { + this.replyToType = replyToType; + } + + public Boolean getAsyncConsumer() { + return asyncConsumer; + } + + public void setAsyncConsumer(Boolean asyncConsumer) { + this.asyncConsumer = asyncConsumer; + } + + public String getReplyToCacheLevelName() { + return replyToCacheLevelName; + } + + public void setReplyToCacheLevelName(String replyToCacheLevelName) { + this.replyToCacheLevelName = replyToCacheLevelName; + } + + public Boolean getAllowNullBody() { + return allowNullBody; + } + + public void setAllowNullBody(Boolean allowNullBody) { + this.allowNullBody = allowNullBody; + } + + public MessageListenerContainerFactory getMessageListenerContainerFactory() { + return messageListenerContainerFactory; + } + + public void setMessageListenerContainerFactory( + MessageListenerContainerFactory messageListenerContainerFactory) { + this.messageListenerContainerFactory = messageListenerContainerFactory; + } + + public Boolean getIncludeSentJMSMessageID() { + return includeSentJMSMessageID; + } + + public void setIncludeSentJMSMessageID(Boolean includeSentJMSMessageID) { + this.includeSentJMSMessageID = includeSentJMSMessageID; + } + + public DefaultTaskExecutorType getDefaultTaskExecutorType() { + return defaultTaskExecutorType; + } + + public void setDefaultTaskExecutorType( + DefaultTaskExecutorType defaultTaskExecutorType) { + this.defaultTaskExecutorType = defaultTaskExecutorType; + } + + public Boolean getIncludeAllJMSXProperties() { + return includeAllJMSXProperties; + } + + public void setIncludeAllJMSXProperties(Boolean includeAllJMSXProperties) { + this.includeAllJMSXProperties = includeAllJMSXProperties; + } + + public MessageCreatedStrategy getMessageCreatedStrategy() { + return messageCreatedStrategy; + } + + public void setMessageCreatedStrategy( + MessageCreatedStrategy messageCreatedStrategy) { + this.messageCreatedStrategy = messageCreatedStrategy; + } + + public String getSelector() { + return selector; + } + + public void setSelector(String selector) { + this.selector = selector; + } + } } \ No newline at end of file
http://git-wip-us.apache.org/repos/asf/camel/blob/d485f2f0/components-starter/camel-jolt-starter/src/main/java/org/apache/camel/component/jolt/springboot/JoltComponentAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-jolt-starter/src/main/java/org/apache/camel/component/jolt/springboot/JoltComponentAutoConfiguration.java b/components-starter/camel-jolt-starter/src/main/java/org/apache/camel/component/jolt/springboot/JoltComponentAutoConfiguration.java index 1531848..ca21556 100644 --- a/components-starter/camel-jolt-starter/src/main/java/org/apache/camel/component/jolt/springboot/JoltComponentAutoConfiguration.java +++ b/components-starter/camel-jolt-starter/src/main/java/org/apache/camel/component/jolt/springboot/JoltComponentAutoConfiguration.java @@ -44,6 +44,26 @@ public class JoltComponentAutoConfiguration { 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-jolt-starter/src/main/java/org/apache/camel/component/jolt/springboot/JoltComponentConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-jolt-starter/src/main/java/org/apache/camel/component/jolt/springboot/JoltComponentConfiguration.java b/components-starter/camel-jolt-starter/src/main/java/org/apache/camel/component/jolt/springboot/JoltComponentConfiguration.java index 688679f..0322b23 100644 --- a/components-starter/camel-jolt-starter/src/main/java/org/apache/camel/component/jolt/springboot/JoltComponentConfiguration.java +++ b/components-starter/camel-jolt-starter/src/main/java/org/apache/camel/component/jolt/springboot/JoltComponentConfiguration.java @@ -18,6 +18,7 @@ package org.apache.camel.component.jolt.springboot; import com.bazaarvoice.jolt.Transform; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.NestedConfigurationProperty; /** * The jolt component allows you to process a JSON messages using an JOLT @@ -32,6 +33,7 @@ public class JoltComponentConfiguration { * Explicitly sets the Transform to use. If not set a Transform specified by * the transformDsl will be created */ + @NestedConfigurationProperty private Transform transform; public Transform getTransform() { http://git-wip-us.apache.org/repos/asf/camel/blob/d485f2f0/components-starter/camel-jpa-starter/src/main/java/org/apache/camel/component/jpa/springboot/JpaComponentAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-jpa-starter/src/main/java/org/apache/camel/component/jpa/springboot/JpaComponentAutoConfiguration.java b/components-starter/camel-jpa-starter/src/main/java/org/apache/camel/component/jpa/springboot/JpaComponentAutoConfiguration.java index 2723d49..0101611 100644 --- a/components-starter/camel-jpa-starter/src/main/java/org/apache/camel/component/jpa/springboot/JpaComponentAutoConfiguration.java +++ b/components-starter/camel-jpa-starter/src/main/java/org/apache/camel/component/jpa/springboot/JpaComponentAutoConfiguration.java @@ -44,6 +44,26 @@ public class JpaComponentAutoConfiguration { 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-jpa-starter/src/main/java/org/apache/camel/component/jpa/springboot/JpaComponentConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-jpa-starter/src/main/java/org/apache/camel/component/jpa/springboot/JpaComponentConfiguration.java b/components-starter/camel-jpa-starter/src/main/java/org/apache/camel/component/jpa/springboot/JpaComponentConfiguration.java index 75359ca..4e26964 100644 --- a/components-starter/camel-jpa-starter/src/main/java/org/apache/camel/component/jpa/springboot/JpaComponentConfiguration.java +++ b/components-starter/camel-jpa-starter/src/main/java/org/apache/camel/component/jpa/springboot/JpaComponentConfiguration.java @@ -18,6 +18,7 @@ package org.apache.camel.component.jpa.springboot; import javax.persistence.EntityManagerFactory; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.NestedConfigurationProperty; import org.springframework.transaction.PlatformTransactionManager; /** @@ -37,6 +38,7 @@ public class JpaComponentConfiguration { /** * To use the PlatformTransactionManager for managing transactions. */ + @NestedConfigurationProperty private PlatformTransactionManager transactionManager; /** * The camel-jpa component will join transaction by default. You can use http://git-wip-us.apache.org/repos/asf/camel/blob/d485f2f0/components-starter/camel-jsch-starter/src/main/java/org/apache/camel/component/scp/springboot/ScpComponentAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-jsch-starter/src/main/java/org/apache/camel/component/scp/springboot/ScpComponentAutoConfiguration.java b/components-starter/camel-jsch-starter/src/main/java/org/apache/camel/component/scp/springboot/ScpComponentAutoConfiguration.java index e5c0037..9509915 100644 --- a/components-starter/camel-jsch-starter/src/main/java/org/apache/camel/component/scp/springboot/ScpComponentAutoConfiguration.java +++ b/components-starter/camel-jsch-starter/src/main/java/org/apache/camel/component/scp/springboot/ScpComponentAutoConfiguration.java @@ -44,6 +44,26 @@ public class ScpComponentAutoConfiguration { 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-jt400-starter/src/main/java/org/apache/camel/component/jt400/springboot/Jt400ComponentAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-jt400-starter/src/main/java/org/apache/camel/component/jt400/springboot/Jt400ComponentAutoConfiguration.java b/components-starter/camel-jt400-starter/src/main/java/org/apache/camel/component/jt400/springboot/Jt400ComponentAutoConfiguration.java index cccfab7..1c1e4a8 100644 --- a/components-starter/camel-jt400-starter/src/main/java/org/apache/camel/component/jt400/springboot/Jt400ComponentAutoConfiguration.java +++ b/components-starter/camel-jt400-starter/src/main/java/org/apache/camel/component/jt400/springboot/Jt400ComponentAutoConfiguration.java @@ -44,6 +44,26 @@ public class Jt400ComponentAutoConfiguration { 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-jt400-starter/src/main/java/org/apache/camel/component/jt400/springboot/Jt400ComponentConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-jt400-starter/src/main/java/org/apache/camel/component/jt400/springboot/Jt400ComponentConfiguration.java b/components-starter/camel-jt400-starter/src/main/java/org/apache/camel/component/jt400/springboot/Jt400ComponentConfiguration.java index ac0cdc1..c72a44c 100644 --- a/components-starter/camel-jt400-starter/src/main/java/org/apache/camel/component/jt400/springboot/Jt400ComponentConfiguration.java +++ b/components-starter/camel-jt400-starter/src/main/java/org/apache/camel/component/jt400/springboot/Jt400ComponentConfiguration.java @@ -18,6 +18,7 @@ package org.apache.camel.component.jt400.springboot; import com.ibm.as400.access.AS400ConnectionPool; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.NestedConfigurationProperty; /** * The jt400 component allows you to exchanges messages with an AS/400 system @@ -31,6 +32,7 @@ public class Jt400ComponentConfiguration { /** * Returns the default connection pool used by this component. */ + @NestedConfigurationProperty private AS400ConnectionPool connectionPool; public AS400ConnectionPool getConnectionPool() { http://git-wip-us.apache.org/repos/asf/camel/blob/d485f2f0/components-starter/camel-kafka-starter/src/main/java/org/apache/camel/component/kafka/springboot/KafkaComponentAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-kafka-starter/src/main/java/org/apache/camel/component/kafka/springboot/KafkaComponentAutoConfiguration.java b/components-starter/camel-kafka-starter/src/main/java/org/apache/camel/component/kafka/springboot/KafkaComponentAutoConfiguration.java index b2f4075..0780a0b 100644 --- a/components-starter/camel-kafka-starter/src/main/java/org/apache/camel/component/kafka/springboot/KafkaComponentAutoConfiguration.java +++ b/components-starter/camel-kafka-starter/src/main/java/org/apache/camel/component/kafka/springboot/KafkaComponentAutoConfiguration.java @@ -44,6 +44,26 @@ public class KafkaComponentAutoConfiguration { 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-kestrel-starter/src/main/java/org/apache/camel/component/kestrel/springboot/KestrelComponentAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-kestrel-starter/src/main/java/org/apache/camel/component/kestrel/springboot/KestrelComponentAutoConfiguration.java b/components-starter/camel-kestrel-starter/src/main/java/org/apache/camel/component/kestrel/springboot/KestrelComponentAutoConfiguration.java index 83adabb..1bd0d5b 100644 --- a/components-starter/camel-kestrel-starter/src/main/java/org/apache/camel/component/kestrel/springboot/KestrelComponentAutoConfiguration.java +++ b/components-starter/camel-kestrel-starter/src/main/java/org/apache/camel/component/kestrel/springboot/KestrelComponentAutoConfiguration.java @@ -45,6 +45,26 @@ public class KestrelComponentAutoConfiguration { 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-kestrel-starter/src/main/java/org/apache/camel/component/kestrel/springboot/KestrelComponentConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-kestrel-starter/src/main/java/org/apache/camel/component/kestrel/springboot/KestrelComponentConfiguration.java b/components-starter/camel-kestrel-starter/src/main/java/org/apache/camel/component/kestrel/springboot/KestrelComponentConfiguration.java index 8c0e311..ae17c4d 100644 --- a/components-starter/camel-kestrel-starter/src/main/java/org/apache/camel/component/kestrel/springboot/KestrelComponentConfiguration.java +++ b/components-starter/camel-kestrel-starter/src/main/java/org/apache/camel/component/kestrel/springboot/KestrelComponentConfiguration.java @@ -16,7 +16,6 @@ */ package org.apache.camel.component.kestrel.springboot; -import org.apache.camel.component.kestrel.KestrelConfiguration; import org.springframework.boot.context.properties.ConfigurationProperties; /** @@ -32,13 +31,54 @@ public class KestrelComponentConfiguration { * To use a shared configured configuration as base for creating new * endpoints. */ - private KestrelConfiguration configuration; + private KestrelConfigurationNestedConfiguration configuration; - public KestrelConfiguration getConfiguration() { + public KestrelConfigurationNestedConfiguration getConfiguration() { return configuration; } - public void setConfiguration(KestrelConfiguration configuration) { + public void setConfiguration( + KestrelConfigurationNestedConfiguration configuration) { this.configuration = configuration; } + + public static class KestrelConfigurationNestedConfiguration { + public static final Class CAMEL_NESTED_CLASS = org.apache.camel.component.kestrel.KestrelConfiguration.class; + /** + * The addresses + */ + private String[] addresses; + /** + * The wait time in milliseconds + */ + private Integer waitTimeMs; + /** + * The number of concurrent consumers + */ + private Integer concurrentConsumers; + + public String[] getAddresses() { + return addresses; + } + + public void setAddresses(String[] addresses) { + this.addresses = addresses; + } + + public Integer getWaitTimeMs() { + return waitTimeMs; + } + + public void setWaitTimeMs(Integer waitTimeMs) { + this.waitTimeMs = waitTimeMs; + } + + public Integer getConcurrentConsumers() { + return concurrentConsumers; + } + + public void setConcurrentConsumers(Integer concurrentConsumers) { + this.concurrentConsumers = concurrentConsumers; + } + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/d485f2f0/components-starter/camel-linkedin-starter/src/main/java/org/apache/camel/component/linkedin/springboot/LinkedInComponentAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-linkedin-starter/src/main/java/org/apache/camel/component/linkedin/springboot/LinkedInComponentAutoConfiguration.java b/components-starter/camel-linkedin-starter/src/main/java/org/apache/camel/component/linkedin/springboot/LinkedInComponentAutoConfiguration.java index 95a6077..2be385e 100644 --- a/components-starter/camel-linkedin-starter/src/main/java/org/apache/camel/component/linkedin/springboot/LinkedInComponentAutoConfiguration.java +++ b/components-starter/camel-linkedin-starter/src/main/java/org/apache/camel/component/linkedin/springboot/LinkedInComponentAutoConfiguration.java @@ -45,6 +45,26 @@ public class LinkedInComponentAutoConfiguration { 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;