http://git-wip-us.apache.org/repos/asf/camel/blob/d485f2f0/components-starter/camel-netty4-starter/src/main/java/org/apache/camel/component/netty4/springboot/NettyComponentConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-netty4-starter/src/main/java/org/apache/camel/component/netty4/springboot/NettyComponentConfiguration.java b/components-starter/camel-netty4-starter/src/main/java/org/apache/camel/component/netty4/springboot/NettyComponentConfiguration.java index 6325701..bdfacc9 100644 --- a/components-starter/camel-netty4-starter/src/main/java/org/apache/camel/component/netty4/springboot/NettyComponentConfiguration.java +++ b/components-starter/camel-netty4-starter/src/main/java/org/apache/camel/component/netty4/springboot/NettyComponentConfiguration.java @@ -16,6 +16,7 @@ */ package org.apache.camel.component.netty4.springboot; +import java.io.File; import java.util.List; import java.util.Map; import io.netty.channel.ChannelHandler; @@ -25,12 +26,14 @@ import io.netty.handler.ssl.SslHandler; import io.netty.util.concurrent.EventExecutorGroup; import org.apache.camel.LoggingLevel; import org.apache.camel.component.netty4.ClientInitializerFactory; -import org.apache.camel.component.netty4.NettyConfiguration; +import org.apache.camel.component.netty4.NettyComponent; import org.apache.camel.component.netty4.NettyServerBootstrapFactory; import org.apache.camel.component.netty4.ServerInitializerFactory; import org.apache.camel.component.netty4.TextLineDelimiter; import org.apache.camel.util.jsse.SSLContextParameters; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.DeprecatedConfigurationProperty; +import org.springframework.boot.context.properties.NestedConfigurationProperty; /** * Socket level networking using TCP or UDP with the Netty 4.x library. @@ -47,362 +50,13 @@ public class NettyComponentConfiguration { private Integer maximumPoolSize; /** * To use the NettyConfiguration as configuration when creating endpoints. - * Properties of the shared configuration can also be set individually. */ - private NettyConfiguration configuration; + private NettyConfigurationNestedConfiguration configuration; /** * To use the given EventExecutorGroup */ + @NestedConfigurationProperty private EventExecutorGroup executorService; - /** - * The protocol to use which can be tcp or udp. - */ - private String protocol; - /** - * The hostname. For the consumer the hostname is localhost or 0.0.0.0 For - * the producer the hostname is the remote host to connect to - */ - private String host; - /** - * The host port number - */ - private Integer port; - /** - * Setting to choose Multicast over UDP - */ - private Boolean broadcast; - /** - * The TCP/UDP buffer sizes to be used during outbound communication. Size - * is bytes. - */ - private Integer sendBufferSize; - /** - * The TCP/UDP buffer sizes to be used during inbound communication. Size is - * bytes. - */ - private Integer receiveBufferSize; - /** - * Configures the buffer size predictor. See details at Jetty documentation - * and this mail thread. - */ - private Integer receiveBufferSizePredictor; - /** - * When netty works on nio mode it uses default workerCount parameter from - * Netty which is cpu_core_threads2. User can use this operation to override - * the default workerCount from Netty - */ - private Integer workerCount; - /** - * When netty works on nio mode it uses default bossCount parameter from - * Netty which is 1. User can use this operation to override the default - * bossCount from Netty - */ - private Integer bossCount; - /** - * Setting to ensure socket is not closed due to inactivity - */ - private Boolean keepAlive; - /** - * Setting to improve TCP protocol performance - */ - private Boolean tcpNoDelay; - /** - * Setting to facilitate socket multiplexing - */ - private Boolean reuseAddress; - /** - * Time to wait for a socket connection to be available. Value is in millis. - */ - private Integer connectTimeout; - /** - * Allows to configure a backlog for netty consumer (server). Note the - * backlog is just a best effort depending on the OS. Setting this option to - * a value such as 200 500 or 1000 tells the TCP stack how long the accept - * queue can be If this option is not configured then the backlog depends on - * OS setting. - */ - private Integer backlog; - /** - * Setting to specify whether SSL encryption is applied to this endpoint - */ - private Boolean ssl; - /** - * When enabled and in SSL mode then the Netty consumer will enrich the - * Camel Message with headers having information about the client - * certificate such as subject name issuer name serial number and the valid - * date range. - */ - private Boolean sslClientCertHeaders; - /** - * Reference to a class that could be used to return an SSL Handler - */ - private SslHandler sslHandler; - /** - * To configure security using SSLContextParameters - */ - private SSLContextParameters sslContextParameters; - /** - * Configures whether the server needs client authentication when using SSL. - */ - private Boolean needClientAuth; - /** - * Client side certificate keystore to be used for encryption. Is loaded by - * default from classpath but you can prefix with classpath: file: or http: - * to load the resource from different systems. - */ - private String keyStoreResource; - /** - * Server side certificate keystore to be used for encryption. Is loaded by - * default from classpath but you can prefix with classpath: file: or http: - * to load the resource from different systems. - */ - private String trustStoreResource; - /** - * Keystore format to be used for payload encryption. Defaults to JKS if not - * set - */ - private String keyStoreFormat; - /** - * Security provider to be used for payload encryption. Defaults to SunX509 - * if not set. - */ - private String securityProvider; - /** - * Password setting to use in order to encrypt/decrypt payloads sent using - * SSH - */ - private String passphrase; - /** - * To use a custom ServerInitializerFactory - */ - private ServerInitializerFactory serverInitializerFactory; - /** - * To use a custom NettyServerBootstrapFactory - */ - private NettyServerBootstrapFactory nettyServerBootstrapFactory; - /** - * Allows to use a timeout for the Netty producer when calling a remote - * server. By default no timeout is in use. The value is in milli seconds so - * eg 30000 is 30 seconds. The requestTimeout is using Netty's - * ReadTimeoutHandler to trigger the timeout. - */ - private long requestTimeout; - /** - * Setting to set endpoint as one-way or request-response - */ - private Boolean sync; - /** - * Allows to configure additional netty options using option. as prefix. For - * example option.child.keepAlive=false to set the netty option - * child.keepAlive=false. See the Netty documentation for possible options - * that can be used. - */ - private Map<String, Object> options; - /** - * Only used for TCP. If no codec is specified you can use this flag to - * indicate a text line based codec; if not specified or the value is false - * then Object Serialization is assumed over TCP. - */ - private Boolean textline; - /** - * Whether to use native transport instead of NIO. Native transport takes - * advantage of the host operating system and is only supported on some - * platforms. You need to add the netty JAR for the host operating system - * you are using. See more details at: - * http://netty.io/wiki/native-transports.html - */ - private Boolean nativeTransport; - /** - * The max line length to use for the textline codec. - */ - private Integer decoderMaxLineLength; - /** - * Set the BossGroup which could be used for handling the new connection of - * the server side across the NettyEndpoint - */ - private EventLoopGroup bossGroup; - /** - * The delimiter to use for the textline codec. Possible values are LINE and - * NULL. - */ - private TextLineDelimiter delimiter; - /** - * Whether or not to auto append missing end delimiter when sending using - * the textline codec. - */ - private Boolean autoAppendDelimiter; - /** - * To use a explicit EventLoopGroup as the boss thread pool. For example to - * share a thread pool with multiple consumers. By default each consumer has - * their own boss pool with 1 core thread. - */ - private EventLoopGroup workerGroup; - /** - * To use a explicit ChannelGroup. - */ - private ChannelGroup channelGroup; - /** - * The encoding (a charset name) to use for the textline codec. If not - * provided Camel will use the JVM default Charset. - */ - private String encoding; - /** - * When using UDP then this option can be used to specify a network - * interface by its name such as eth0 to join a multicast group. - */ - private String networkInterface; - /** - * A list of decoders to be used. You can use a String which have values - * separated by comma and have the values be looked up in the Registry. Just - * remember to prefix the value with so Camel knows it should lookup. - */ - private List<ChannelHandler> decoders; - /** - * Which protocols to enable when using SSL - */ - private String enabledProtocols; - /** - * A list of encoders to be used. You can use a String which have values - * separated by comma and have the values be looked up in the Registry. Just - * remember to prefix the value with so Camel knows it should lookup. - */ - private List<ChannelHandler> encoders; - /** - * Used only in clientMode in consumer the consumer will attempt to - * reconnect on disconnection if this is enabled - */ - private Boolean reconnect; - /** - * A custom ChannelHandler class that can be used to perform special - * marshalling of outbound payloads. - */ - private ChannelHandler encoder; - /** - * Used if reconnect and clientMode is enabled. The interval in milli - * seconds to attempt reconnection - */ - private Integer reconnectInterval; - /** - * A custom ChannelHandler class that can be used to perform special - * marshalling of inbound payloads. - */ - private ChannelHandler decoder; - /** - * Whether or not to disconnect(close) from Netty Channel right after use. - * Can be used for both consumer and producer. - */ - private Boolean disconnect; - /** - * Channels can be lazily created to avoid exceptions if the remote server - * is not up and running when the Camel producer is started. - */ - private Boolean lazyChannelCreation; - /** - * Only used for TCP. You can transfer the exchange over the wire instead of - * just the body. 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. - */ - private Boolean transferExchange; - /** - * If sync is enabled then this option dictates NettyConsumer if it should - * disconnect where there is no reply to send back. - */ - private Boolean disconnectOnNoReply; - /** - * If sync is enabled this option dictates NettyConsumer which logging level - * to use when logging a there is no reply to send back. - */ - private LoggingLevel noReplyLogLevel; - /** - * If the server (NettyConsumer) catches an exception then its logged using - * this logging level. - */ - private LoggingLevel serverExceptionCaughtLogLevel; - /** - * If the server (NettyConsumer) catches an - * java.nio.channels.ClosedChannelException then its logged using this - * logging level. This is used to avoid logging the closed channel - * exceptions as clients can disconnect abruptly and then cause a flood of - * closed exceptions in the Netty server. - */ - private LoggingLevel serverClosedChannelExceptionCaughtLogLevel; - /** - * The netty component installs a default codec if both encoder/deocder is - * null and textline is false. Setting allowDefaultCodec to false prevents - * the netty component from installing a default codec as the first element - * in the filter chain. - */ - private Boolean allowDefaultCodec; - /** - * To use a custom ClientInitializerFactory - */ - private ClientInitializerFactory clientInitializerFactory; - /** - * Whether to use ordered thread pool to ensure events are processed orderly - * on the same channel. - */ - private Boolean usingExecutorService; - /** - * Sets the cap on the number of objects that can be allocated by the pool - * (checked out to clients or idle awaiting checkout) at a given time. Use a - * negative value for no limit. - */ - private Integer producerPoolMaxActive; - /** - * Sets the minimum number of instances allowed in the producer pool before - * the evictor thread (if active) spawns new objects. - */ - private Integer producerPoolMinIdle; - /** - * Sets the cap on the number of idle instances in the pool. - */ - private Integer producerPoolMaxIdle; - /** - * Sets the minimum amount of time (value in millis) an object may sit idle - * in the pool before it is eligible for eviction by the idle object - * evictor. - */ - private long producerPoolMinEvictableIdle; - /** - * Whether producer pool is enabled or not. Important: Do not turn this off - * as the pooling is needed for handling concurrency and reliable - * request/reply. - */ - private Boolean producerPoolEnabled; - /** - * This option supports connection less udp sending which is a real fire and - * forget. A connected udp send receive the PortUnreachableException if no - * one is listen on the receiving port. - */ - private Boolean udpConnectionlessSending; - /** - * If the clientMode is true netty consumer will connect the address as a - * TCP client. - */ - private Boolean clientMode; - /** - * If the useByteBuf is true netty producer will turn the message body into - * ByteBuf before sending it out. - */ - private Boolean useByteBuf; - /** - * For UDP only. If enabled the using byte array codec instead of Java - * serialization protocol. - */ - private Boolean udpByteArrayCodec; - /** - * This option allows producers to reuse the same Netty Channel for the - * lifecycle of processing the Exchange. This is useable if you need to call - * a server multiple times in a Camel route and want to use the same network - * connection. When using this the channel is not returned to the connection - * pool until the Exchange is done; or disconnected if the disconnect option - * is set to true. The reused Channel is stored on the Exchange as an - * exchange property with the key link NettyConstantsNETTY_CHANNEL which - * allows you to obtain the channel during routing and use it as well. - */ - private Boolean reuseChannel; public Integer getMaximumPoolSize() { return maximumPoolSize; @@ -412,11 +66,12 @@ public class NettyComponentConfiguration { this.maximumPoolSize = maximumPoolSize; } - public NettyConfiguration getConfiguration() { + public NettyConfigurationNestedConfiguration getConfiguration() { return configuration; } - public void setConfiguration(NettyConfiguration configuration) { + public void setConfiguration( + NettyConfigurationNestedConfiguration configuration) { this.configuration = configuration; } @@ -428,538 +83,981 @@ public class NettyComponentConfiguration { this.executorService = executorService; } - public String getProtocol() { - return protocol; - } - - public void setProtocol(String protocol) { - this.protocol = protocol; - } - - public String getHost() { - return host; - } - - public void setHost(String host) { - this.host = host; - } - - public Integer getPort() { - return port; - } - - public void setPort(Integer port) { - this.port = port; - } - - public Boolean getBroadcast() { - return broadcast; - } - - public void setBroadcast(Boolean broadcast) { - this.broadcast = broadcast; - } - - public Integer getSendBufferSize() { - return sendBufferSize; - } - - public void setSendBufferSize(Integer sendBufferSize) { - this.sendBufferSize = sendBufferSize; - } - - public Integer getReceiveBufferSize() { - return receiveBufferSize; - } - - public void setReceiveBufferSize(Integer receiveBufferSize) { - this.receiveBufferSize = receiveBufferSize; - } - - public Integer getReceiveBufferSizePredictor() { - return receiveBufferSizePredictor; - } - - public void setReceiveBufferSizePredictor(Integer receiveBufferSizePredictor) { - this.receiveBufferSizePredictor = receiveBufferSizePredictor; - } - - public Integer getWorkerCount() { - return workerCount; - } - - public void setWorkerCount(Integer workerCount) { - this.workerCount = workerCount; - } - - public Integer getBossCount() { - return bossCount; - } - - public void setBossCount(Integer bossCount) { - this.bossCount = bossCount; - } - - public Boolean getKeepAlive() { - return keepAlive; - } - - public void setKeepAlive(Boolean keepAlive) { - this.keepAlive = keepAlive; - } - - public Boolean getTcpNoDelay() { - return tcpNoDelay; - } - - public void setTcpNoDelay(Boolean tcpNoDelay) { - this.tcpNoDelay = tcpNoDelay; - } - - public Boolean getReuseAddress() { - return reuseAddress; - } - - public void setReuseAddress(Boolean reuseAddress) { - this.reuseAddress = reuseAddress; - } - - public Integer getConnectTimeout() { - return connectTimeout; - } - - public void setConnectTimeout(Integer connectTimeout) { - this.connectTimeout = connectTimeout; - } - - public Integer getBacklog() { - return backlog; - } - - public void setBacklog(Integer backlog) { - this.backlog = backlog; - } - - public Boolean getSsl() { - return ssl; - } - - public void setSsl(Boolean ssl) { - this.ssl = ssl; - } - - public Boolean getSslClientCertHeaders() { - return sslClientCertHeaders; - } - - public void setSslClientCertHeaders(Boolean sslClientCertHeaders) { - this.sslClientCertHeaders = sslClientCertHeaders; - } - - public SslHandler getSslHandler() { - return sslHandler; - } - - public void setSslHandler(SslHandler sslHandler) { - this.sslHandler = sslHandler; - } - - public SSLContextParameters getSslContextParameters() { - return sslContextParameters; - } - - public void setSslContextParameters( - SSLContextParameters sslContextParameters) { - this.sslContextParameters = sslContextParameters; - } - - public Boolean getNeedClientAuth() { - return needClientAuth; - } - - public void setNeedClientAuth(Boolean needClientAuth) { - this.needClientAuth = needClientAuth; - } - - public String getKeyStoreResource() { - return keyStoreResource; - } - - public void setKeyStoreResource(String keyStoreResource) { - this.keyStoreResource = keyStoreResource; - } - - public String getTrustStoreResource() { - return trustStoreResource; - } - - public void setTrustStoreResource(String trustStoreResource) { - this.trustStoreResource = trustStoreResource; - } - - public String getKeyStoreFormat() { - return keyStoreFormat; - } - - public void setKeyStoreFormat(String keyStoreFormat) { - this.keyStoreFormat = keyStoreFormat; - } - - public String getSecurityProvider() { - return securityProvider; - } - - public void setSecurityProvider(String securityProvider) { - this.securityProvider = securityProvider; - } - - public String getPassphrase() { - return passphrase; - } - - public void setPassphrase(String passphrase) { - this.passphrase = passphrase; - } - - public ServerInitializerFactory getServerInitializerFactory() { - return serverInitializerFactory; - } - - public void setServerInitializerFactory( - ServerInitializerFactory serverInitializerFactory) { - this.serverInitializerFactory = serverInitializerFactory; - } - - public NettyServerBootstrapFactory getNettyServerBootstrapFactory() { - return nettyServerBootstrapFactory; - } - - public void setNettyServerBootstrapFactory( - NettyServerBootstrapFactory nettyServerBootstrapFactory) { - this.nettyServerBootstrapFactory = nettyServerBootstrapFactory; - } - - public long getRequestTimeout() { - return requestTimeout; - } - - public void setRequestTimeout(long requestTimeout) { - this.requestTimeout = requestTimeout; - } - - public Boolean getSync() { - return sync; - } - - public void setSync(Boolean sync) { - this.sync = sync; - } - - public Map<String, Object> getOptions() { - return options; - } - - public void setOptions(Map<String, Object> options) { - this.options = options; - } - - public Boolean getTextline() { - return textline; - } - - public void setTextline(Boolean textline) { - this.textline = textline; - } - - public Boolean getNativeTransport() { - return nativeTransport; - } - - public void setNativeTransport(Boolean nativeTransport) { - this.nativeTransport = nativeTransport; - } - - public Integer getDecoderMaxLineLength() { - return decoderMaxLineLength; - } - - public void setDecoderMaxLineLength(Integer decoderMaxLineLength) { - this.decoderMaxLineLength = decoderMaxLineLength; - } - - public EventLoopGroup getBossGroup() { - return bossGroup; - } - - public void setBossGroup(EventLoopGroup bossGroup) { - this.bossGroup = bossGroup; - } - - public TextLineDelimiter getDelimiter() { - return delimiter; - } - - public void setDelimiter(TextLineDelimiter delimiter) { - this.delimiter = delimiter; - } - - public Boolean getAutoAppendDelimiter() { - return autoAppendDelimiter; - } - - public void setAutoAppendDelimiter(Boolean autoAppendDelimiter) { - this.autoAppendDelimiter = autoAppendDelimiter; - } - - public EventLoopGroup getWorkerGroup() { - return workerGroup; - } - - public void setWorkerGroup(EventLoopGroup workerGroup) { - this.workerGroup = workerGroup; - } - - public ChannelGroup getChannelGroup() { - return channelGroup; - } - - public void setChannelGroup(ChannelGroup channelGroup) { - this.channelGroup = channelGroup; - } - - public String getEncoding() { - return encoding; - } - - public void setEncoding(String encoding) { - this.encoding = encoding; - } - - public String getNetworkInterface() { - return networkInterface; - } - - public void setNetworkInterface(String networkInterface) { - this.networkInterface = networkInterface; - } - - public List<ChannelHandler> getDecoders() { - return decoders; - } - - public void setDecoders(List<ChannelHandler> decoders) { - this.decoders = decoders; - } - - public String getEnabledProtocols() { - return enabledProtocols; - } - - public void setEnabledProtocols(String enabledProtocols) { - this.enabledProtocols = enabledProtocols; - } - - public List<ChannelHandler> getEncoders() { - return encoders; - } - - public void setEncoders(List<ChannelHandler> encoders) { - this.encoders = encoders; - } - - public Boolean getReconnect() { - return reconnect; - } - - public void setReconnect(Boolean reconnect) { - this.reconnect = reconnect; - } - - public ChannelHandler getEncoder() { - return encoder; - } - - public void setEncoder(ChannelHandler encoder) { - this.encoder = encoder; - } - - public Integer getReconnectInterval() { - return reconnectInterval; - } - - public void setReconnectInterval(Integer reconnectInterval) { - this.reconnectInterval = reconnectInterval; - } - - public ChannelHandler getDecoder() { - return decoder; - } - - public void setDecoder(ChannelHandler decoder) { - this.decoder = decoder; - } - - public Boolean getDisconnect() { - return disconnect; - } - - public void setDisconnect(Boolean disconnect) { - this.disconnect = disconnect; - } - - public Boolean getLazyChannelCreation() { - return lazyChannelCreation; - } - - public void setLazyChannelCreation(Boolean lazyChannelCreation) { - this.lazyChannelCreation = lazyChannelCreation; - } - - public Boolean getTransferExchange() { - return transferExchange; - } - - public void setTransferExchange(Boolean transferExchange) { - this.transferExchange = transferExchange; - } - - public Boolean getDisconnectOnNoReply() { - return disconnectOnNoReply; - } - - public void setDisconnectOnNoReply(Boolean disconnectOnNoReply) { - this.disconnectOnNoReply = disconnectOnNoReply; - } - - public LoggingLevel getNoReplyLogLevel() { - return noReplyLogLevel; - } - - public void setNoReplyLogLevel(LoggingLevel noReplyLogLevel) { - this.noReplyLogLevel = noReplyLogLevel; - } - - public LoggingLevel getServerExceptionCaughtLogLevel() { - return serverExceptionCaughtLogLevel; - } - - public void setServerExceptionCaughtLogLevel( - LoggingLevel serverExceptionCaughtLogLevel) { - this.serverExceptionCaughtLogLevel = serverExceptionCaughtLogLevel; - } - - public LoggingLevel getServerClosedChannelExceptionCaughtLogLevel() { - return serverClosedChannelExceptionCaughtLogLevel; - } - - public void setServerClosedChannelExceptionCaughtLogLevel( - LoggingLevel serverClosedChannelExceptionCaughtLogLevel) { - this.serverClosedChannelExceptionCaughtLogLevel = serverClosedChannelExceptionCaughtLogLevel; - } - - public Boolean getAllowDefaultCodec() { - return allowDefaultCodec; - } - - public void setAllowDefaultCodec(Boolean allowDefaultCodec) { - this.allowDefaultCodec = allowDefaultCodec; - } - - public ClientInitializerFactory getClientInitializerFactory() { - return clientInitializerFactory; - } - - public void setClientInitializerFactory( - ClientInitializerFactory clientInitializerFactory) { - this.clientInitializerFactory = clientInitializerFactory; - } - - public Boolean getUsingExecutorService() { - return usingExecutorService; - } - - public void setUsingExecutorService(Boolean usingExecutorService) { - this.usingExecutorService = usingExecutorService; - } - - public Integer getProducerPoolMaxActive() { - return producerPoolMaxActive; - } - - public void setProducerPoolMaxActive(Integer producerPoolMaxActive) { - this.producerPoolMaxActive = producerPoolMaxActive; - } - - public Integer getProducerPoolMinIdle() { - return producerPoolMinIdle; - } - - public void setProducerPoolMinIdle(Integer producerPoolMinIdle) { - this.producerPoolMinIdle = producerPoolMinIdle; - } - - public Integer getProducerPoolMaxIdle() { - return producerPoolMaxIdle; - } - - public void setProducerPoolMaxIdle(Integer producerPoolMaxIdle) { - this.producerPoolMaxIdle = producerPoolMaxIdle; - } - - public long getProducerPoolMinEvictableIdle() { - return producerPoolMinEvictableIdle; - } - - public void setProducerPoolMinEvictableIdle( - long producerPoolMinEvictableIdle) { - this.producerPoolMinEvictableIdle = producerPoolMinEvictableIdle; - } - - public Boolean getProducerPoolEnabled() { - return producerPoolEnabled; - } - - public void setProducerPoolEnabled(Boolean producerPoolEnabled) { - this.producerPoolEnabled = producerPoolEnabled; - } - - public Boolean getUdpConnectionlessSending() { - return udpConnectionlessSending; - } - - public void setUdpConnectionlessSending(Boolean udpConnectionlessSending) { - this.udpConnectionlessSending = udpConnectionlessSending; - } - - public Boolean getClientMode() { - return clientMode; - } - - public void setClientMode(Boolean clientMode) { - this.clientMode = clientMode; - } - - public Boolean getUseByteBuf() { - return useByteBuf; - } - - public void setUseByteBuf(Boolean useByteBuf) { - this.useByteBuf = useByteBuf; - } - - public Boolean getUdpByteArrayCodec() { - return udpByteArrayCodec; - } - - public void setUdpByteArrayCodec(Boolean udpByteArrayCodec) { - this.udpByteArrayCodec = udpByteArrayCodec; - } - - public Boolean getReuseChannel() { - return reuseChannel; - } + public static class NettyConfigurationNestedConfiguration { + public static final Class CAMEL_NESTED_CLASS = org.apache.camel.component.netty4.NettyConfiguration.class; + /** + * Allows to use a timeout for the Netty producer when calling a remote + * server. By default no timeout is in use. The value is in milli + * seconds, so eg 30000 is 30 seconds. The requestTimeout is using + * Netty's ReadTimeoutHandler to trigger the timeout. + */ + private Long requestTimeout; + /** + * Setting to set endpoint as one-way or request-response + */ + private Boolean sync; + /** + * Only used for TCP. If no codec is specified, you can use this flag to + * indicate a text line based codec; if not specified or the value is + * false, then Object Serialization is assumed over TCP. + */ + private Boolean textline; + /** + * The max line length to use for the textline codec. + */ + private Integer decoderMaxLineLength; + /** + * The delimiter to use for the textline codec. Possible values are LINE + * and NULL. + */ + private TextLineDelimiter delimiter = TextLineDelimiter.LINE; + /** + * Whether or not to auto append missing end delimiter when sending + * using the textline codec. + */ + private Boolean autoAppendDelimiter; + /** + * The encoding (a charset name) to use for the textline codec. If not + * provided, Camel will use the JVM default Charset. + */ + private String encoding; + /** + * A list of decoders to be used. You can use a String which have values + * separated by comma, and have the values be looked up in the Registry. + * Just remember to prefix the value with # so Camel knows it should + * lookup. + */ + private List decoders; + /** + * A list of encoders to be used. You can use a String which have values + * separated by comma, and have the values be looked up in the Registry. + * Just remember to prefix the value with # so Camel knows it should + * lookup. + */ + private List encoders; + /** + * A custom ChannelHandler class that can be used to perform special + * marshalling of outbound payloads. + */ + @NestedConfigurationProperty + @Deprecated + private ChannelHandler encoder; + /** + * A custom ChannelHandler class that can be used to perform special + * marshalling of inbound payloads. + */ + @NestedConfigurationProperty + @Deprecated + private ChannelHandler decoder; + /** + * Whether or not to disconnect(close) from Netty Channel right after + * use. Can be used for both consumer and producer. + */ + private Boolean disconnect; + /** + * Channels can be lazily created to avoid exceptions, if the remote + * server is not up and running when the Camel producer is started. + */ + private Boolean lazyChannelCreation; + /** + * Only used for TCP. You can transfer the exchange over the wire + * instead of just the body. 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. + */ + private Boolean transferExchange; + /** + * If sync is enabled then this option dictates NettyConsumer if it + * should disconnect where there is no reply to send back. + */ + private Boolean disconnectOnNoReply; + /** + * If sync is enabled this option dictates NettyConsumer which logging + * level to use when logging a there is no reply to send back. + */ + private LoggingLevel noReplyLogLevel = LoggingLevel.WARN; + /** + * If the server (NettyConsumer) catches an exception then its logged + * using this logging level. + */ + private LoggingLevel serverExceptionCaughtLogLevel = LoggingLevel.WARN; + /** + * If the server (NettyConsumer) catches an + * java.nio.channels.ClosedChannelException then its logged using this + * logging level. This is used to avoid logging the closed channel + * exceptions, as clients can disconnect abruptly and then cause a flood + * of closed exceptions in the Netty server. + */ + private LoggingLevel serverClosedChannelExceptionCaughtLogLevel = LoggingLevel.DEBUG; + /** + * The netty component installs a default codec if both, encoder/deocder + * is null and textline is false. Setting allowDefaultCodec to false + * prevents the netty component from installing a default codec as the + * first element in the filter chain. + */ + private Boolean allowDefaultCodec; + /** + * @deprecated use #setClientInitializerFactory + */ + @NestedConfigurationProperty + @Deprecated + private ClientInitializerFactory clientPipelineFactory; + /** + * To use a custom ClientInitializerFactory + */ + @NestedConfigurationProperty + private ClientInitializerFactory clientInitializerFactory; + /** + * Whether to use ordered thread pool, to ensure events are processed + * orderly on the same channel. + */ + private Boolean usingExecutorService; + /** + * Sets the cap on the number of objects that can be allocated by the + * pool (checked out to clients, or idle awaiting checkout) at a given + * time. Use a negative value for no limit. + */ + private Integer producerPoolMaxActive; + /** + * Sets the minimum number of instances allowed in the producer pool + * before the evictor thread (if active) spawns new objects. + */ + private Integer producerPoolMinIdle; + /** + * Sets the cap on the number of "idle" instances in the pool. + */ + private Integer producerPoolMaxIdle; + /** + * Sets the minimum amount of time (value in millis) an object may sit + * idle in the pool before it is eligible for eviction by the idle + * object evictor. + */ + private Long producerPoolMinEvictableIdle; + /** + * Whether producer pool is enabled or not. Important: Do not turn this + * off, as the pooling is needed for handling concurrency and reliable + * request/reply. + */ + private Boolean producerPoolEnabled; + /** + * This option supports connection less udp sending which is a real fire + * and forget. A connected udp send receive the PortUnreachableException + * if no one is listen on the receiving port. + */ + private Boolean udpConnectionlessSending; + /** + * If the clientMode is true, netty consumer will connect the address as + * a TCP client. + */ + private Boolean clientMode; + /** + * If the useByteBuf is true, netty producer will turn the message body + * into {@link ByteBuf} before sending it out. + */ + private Boolean useByteBuf; + /** + * For UDP only. If enabled the using byte array codec instead of Java + * serialization protocol. + */ + private Boolean udpByteArrayCodec; + /** + * This option allows producers to reuse the same Netty {@link Channel} + * for the lifecycle of processing the {@link Exchange} . This is + * useable if you need to call a server multiple times in a Camel route + * and want to use the same network connection. When using this the + * channel is not returned to the connection pool until the + * {@link Exchange} is done; or disconnected if the disconnect option is + * set to true. + * <p/> + * The reused {@link Channel} is stored on the {@link Exchange} as an + * exchange property with the key {@link NettyConstants#NETTY_CHANNEL} + * which allows you to obtain the channel during routing and use it as + * well. + */ + private Boolean reuseChannel; + /** + * The protocol to use which can be tcp or udp. + */ + private String protocol; + /** + * The hostname. + * <p/> + * For the consumer the hostname is localhost or 0.0.0.0 For the + * producer the hostname is the remote host to connect to + */ + private String host; + /** + * The host port number + */ + private Integer port; + /** + * Setting to choose Multicast over UDP + */ + private Boolean broadcast; + /** + * The TCP/UDP buffer sizes to be used during outbound communication. + * Size is bytes. + */ + private Integer sendBufferSize; + /** + * The TCP/UDP buffer sizes to be used during inbound communication. + * Size is bytes. + */ + private Integer receiveBufferSize; + /** + * Configures the buffer size predictor. See details at Jetty + * documentation and this mail thread. + */ + private Integer receiveBufferSizePredictor; + /** + * When netty works on nio mode, it uses default workerCount parameter + * from Netty, which is cpu_core_threads*2. User can use this operation + * to override the default workerCount from Netty + */ + private Integer workerCount; + /** + * When netty works on nio mode, it uses default bossCount parameter + * from Netty, which is 1. User can use this operation to override the + * default bossCount from Netty + */ + private Integer bossCount; + /** + * Setting to ensure socket is not closed due to inactivity + */ + private Boolean keepAlive; + /** + * Setting to improve TCP protocol performance + */ + private Boolean tcpNoDelay; + /** + * Setting to facilitate socket multiplexing + */ + private Boolean reuseAddress; + /** + * Time to wait for a socket connection to be available. Value is in + * millis. + */ + private Integer connectTimeout; + /** + * Allows to configure a backlog for netty consumer (server). Note the + * backlog is just a best effort depending on the OS. Setting this + * option to a value such as 200, 500 or 1000, tells the TCP stack how + * long the "accept" queue can be If this option is not configured, then + * the backlog depends on OS setting. + */ + private Integer backlog; + /** + * Setting to specify whether SSL encryption is applied to this endpoint + */ + private Boolean ssl; + /** + * When enabled and in SSL mode, then the Netty consumer will enrich the + * Camel Message with headers having information about the client + * certificate such as subject name, issuer name, serial number, and the + * valid date range. + */ + private Boolean sslClientCertHeaders; + /** + * Reference to a class that could be used to return an SSL Handler + */ + @NestedConfigurationProperty + private SslHandler sslHandler; + /** + * To configure security using SSLContextParameters + */ + @NestedConfigurationProperty + private SSLContextParameters sslContextParameters; + /** + * Configures whether the server needs client authentication when using + * SSL. + */ + private Boolean needClientAuth; + /** + * Client side certificate keystore to be used for encryption + */ + @Deprecated + private File keyStoreFile; + /** + * Server side certificate keystore to be used for encryption + */ + @Deprecated + private File trustStoreFile; + /** + * Client side certificate keystore to be used for encryption. Is loaded + * by default from classpath, but you can prefix with "classpath:", + * "file:", or "http:" to load the resource from different systems. + */ + private String keyStoreResource; + /** + * Server side certificate keystore to be used for encryption. Is loaded + * by default from classpath, but you can prefix with "classpath:", + * "file:", or "http:" to load the resource from different systems. + */ + private String trustStoreResource; + /** + * Keystore format to be used for payload encryption. Defaults to "JKS" + * if not set + */ + private String keyStoreFormat; + /** + * Security provider to be used for payload encryption. Defaults to + * "SunX509" if not set. + */ + private String securityProvider; + /** + * Password setting to use in order to encrypt/decrypt payloads sent + * using SSH + */ + private String passphrase; + /** + * @deprecated use #setServerInitializerFactory + */ + @NestedConfigurationProperty + @Deprecated + private ServerInitializerFactory serverPipelineFactory; + /** + * To use a custom ServerInitializerFactory + */ + @NestedConfigurationProperty + private ServerInitializerFactory serverInitializerFactory; + /** + * To use a custom NettyServerBootstrapFactory + */ + @NestedConfigurationProperty + private NettyServerBootstrapFactory nettyServerBootstrapFactory; + /** + * Allows to configure additional netty options using "option." as + * prefix. For example "option.child.keepAlive=false" to set the netty + * option "child.keepAlive=false". See the Netty documentation for + * possible options that can be used. + */ + private Map options; + /** + * Whether to use native transport instead of NIO. Native transport + * takes advantage of the host operating system and is only supported on + * some platforms. You need to add the netty JAR for the host operating + * system you are using. See more details at: + * http://netty.io/wiki/native-transports.html + */ + private Boolean nativeTransport; + /** + * Set the BossGroup which could be used for handling the new connection + * of the server side across the NettyEndpoint + */ + @NestedConfigurationProperty + private EventLoopGroup bossGroup; + /** + * To use a explicit EventLoopGroup as the boss thread pool. For example + * to share a thread pool with multiple consumers. By default each + * consumer has their own boss pool with 1 core thread. + */ + @NestedConfigurationProperty + private EventLoopGroup workerGroup; + /** + * To use a explicit ChannelGroup. + */ + @NestedConfigurationProperty + private ChannelGroup channelGroup; + /** + * When using UDP then this option can be used to specify a network + * interface by its name, such as eth0 to join a multicast group. + */ + private String networkInterface; + /** + * Which protocols to enable when using SSL + */ + private String enabledProtocols = "DEFAULT_ENABLED_PROTOCOLS"; + private Boolean reconnect; + private Integer reconnectInterval; + + public Long getRequestTimeout() { + return requestTimeout; + } + + public void setRequestTimeout(Long requestTimeout) { + this.requestTimeout = requestTimeout; + } + + public Boolean getSync() { + return sync; + } + + public void setSync(Boolean sync) { + this.sync = sync; + } + + public Boolean getTextline() { + return textline; + } + + public void setTextline(Boolean textline) { + this.textline = textline; + } + + public Integer getDecoderMaxLineLength() { + return decoderMaxLineLength; + } + + public void setDecoderMaxLineLength(Integer decoderMaxLineLength) { + this.decoderMaxLineLength = decoderMaxLineLength; + } + + public TextLineDelimiter getDelimiter() { + return delimiter; + } + + public void setDelimiter(TextLineDelimiter delimiter) { + this.delimiter = delimiter; + } + + public Boolean getAutoAppendDelimiter() { + return autoAppendDelimiter; + } + + public void setAutoAppendDelimiter(Boolean autoAppendDelimiter) { + this.autoAppendDelimiter = autoAppendDelimiter; + } + + public String getEncoding() { + return encoding; + } + + public void setEncoding(String encoding) { + this.encoding = encoding; + } + + public List getDecoders() { + return decoders; + } + + public void setDecoders(List decoders) { + this.decoders = decoders; + } + + public List getEncoders() { + return encoders; + } + + public void setEncoders(List encoders) { + this.encoders = encoders; + } + + @Deprecated + @DeprecatedConfigurationProperty + public ChannelHandler getEncoder() { + return encoder; + } + + @Deprecated + public void setEncoder(ChannelHandler encoder) { + this.encoder = encoder; + } + + @Deprecated + @DeprecatedConfigurationProperty + public ChannelHandler getDecoder() { + return decoder; + } + + @Deprecated + public void setDecoder(ChannelHandler decoder) { + this.decoder = decoder; + } + + public Boolean getDisconnect() { + return disconnect; + } + + public void setDisconnect(Boolean disconnect) { + this.disconnect = disconnect; + } + + public Boolean getLazyChannelCreation() { + return lazyChannelCreation; + } + + public void setLazyChannelCreation(Boolean lazyChannelCreation) { + this.lazyChannelCreation = lazyChannelCreation; + } + + public Boolean getTransferExchange() { + return transferExchange; + } + + public void setTransferExchange(Boolean transferExchange) { + this.transferExchange = transferExchange; + } + + public Boolean getDisconnectOnNoReply() { + return disconnectOnNoReply; + } + + public void setDisconnectOnNoReply(Boolean disconnectOnNoReply) { + this.disconnectOnNoReply = disconnectOnNoReply; + } + + public LoggingLevel getNoReplyLogLevel() { + return noReplyLogLevel; + } + + public void setNoReplyLogLevel(LoggingLevel noReplyLogLevel) { + this.noReplyLogLevel = noReplyLogLevel; + } + + public LoggingLevel getServerExceptionCaughtLogLevel() { + return serverExceptionCaughtLogLevel; + } + + public void setServerExceptionCaughtLogLevel( + LoggingLevel serverExceptionCaughtLogLevel) { + this.serverExceptionCaughtLogLevel = serverExceptionCaughtLogLevel; + } + + public LoggingLevel getServerClosedChannelExceptionCaughtLogLevel() { + return serverClosedChannelExceptionCaughtLogLevel; + } + + public void setServerClosedChannelExceptionCaughtLogLevel( + LoggingLevel serverClosedChannelExceptionCaughtLogLevel) { + this.serverClosedChannelExceptionCaughtLogLevel = serverClosedChannelExceptionCaughtLogLevel; + } + + public Boolean getAllowDefaultCodec() { + return allowDefaultCodec; + } + + public void setAllowDefaultCodec(Boolean allowDefaultCodec) { + this.allowDefaultCodec = allowDefaultCodec; + } + + @Deprecated + @DeprecatedConfigurationProperty + public ClientInitializerFactory getClientPipelineFactory() { + return clientPipelineFactory; + } + + @Deprecated + public void setClientPipelineFactory( + ClientInitializerFactory clientPipelineFactory) { + this.clientPipelineFactory = clientPipelineFactory; + } + + public ClientInitializerFactory getClientInitializerFactory() { + return clientInitializerFactory; + } + + public void setClientInitializerFactory( + ClientInitializerFactory clientInitializerFactory) { + this.clientInitializerFactory = clientInitializerFactory; + } + + public Boolean getUsingExecutorService() { + return usingExecutorService; + } + + public void setUsingExecutorService(Boolean usingExecutorService) { + this.usingExecutorService = usingExecutorService; + } + + public Integer getProducerPoolMaxActive() { + return producerPoolMaxActive; + } + + public void setProducerPoolMaxActive(Integer producerPoolMaxActive) { + this.producerPoolMaxActive = producerPoolMaxActive; + } + + public Integer getProducerPoolMinIdle() { + return producerPoolMinIdle; + } + + public void setProducerPoolMinIdle(Integer producerPoolMinIdle) { + this.producerPoolMinIdle = producerPoolMinIdle; + } + + public Integer getProducerPoolMaxIdle() { + return producerPoolMaxIdle; + } + + public void setProducerPoolMaxIdle(Integer producerPoolMaxIdle) { + this.producerPoolMaxIdle = producerPoolMaxIdle; + } + + public Long getProducerPoolMinEvictableIdle() { + return producerPoolMinEvictableIdle; + } + + public void setProducerPoolMinEvictableIdle( + Long producerPoolMinEvictableIdle) { + this.producerPoolMinEvictableIdle = producerPoolMinEvictableIdle; + } + + public Boolean getProducerPoolEnabled() { + return producerPoolEnabled; + } + + public void setProducerPoolEnabled(Boolean producerPoolEnabled) { + this.producerPoolEnabled = producerPoolEnabled; + } + + public Boolean getUdpConnectionlessSending() { + return udpConnectionlessSending; + } + + public void setUdpConnectionlessSending(Boolean udpConnectionlessSending) { + this.udpConnectionlessSending = udpConnectionlessSending; + } + + public Boolean getClientMode() { + return clientMode; + } + + public void setClientMode(Boolean clientMode) { + this.clientMode = clientMode; + } + + public Boolean getUseByteBuf() { + return useByteBuf; + } + + public void setUseByteBuf(Boolean useByteBuf) { + this.useByteBuf = useByteBuf; + } + + public Boolean getUdpByteArrayCodec() { + return udpByteArrayCodec; + } + + public void setUdpByteArrayCodec(Boolean udpByteArrayCodec) { + this.udpByteArrayCodec = udpByteArrayCodec; + } + + public Boolean getReuseChannel() { + return reuseChannel; + } + + public void setReuseChannel(Boolean reuseChannel) { + this.reuseChannel = reuseChannel; + } + + public String getProtocol() { + return protocol; + } + + public void setProtocol(String protocol) { + this.protocol = protocol; + } + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host; + } + + public Integer getPort() { + return port; + } + + public void setPort(Integer port) { + this.port = port; + } + + public Boolean getBroadcast() { + return broadcast; + } + + public void setBroadcast(Boolean broadcast) { + this.broadcast = broadcast; + } + + public Integer getSendBufferSize() { + return sendBufferSize; + } + + public void setSendBufferSize(Integer sendBufferSize) { + this.sendBufferSize = sendBufferSize; + } + + public Integer getReceiveBufferSize() { + return receiveBufferSize; + } + + public void setReceiveBufferSize(Integer receiveBufferSize) { + this.receiveBufferSize = receiveBufferSize; + } + + public Integer getReceiveBufferSizePredictor() { + return receiveBufferSizePredictor; + } - public void setReuseChannel(Boolean reuseChannel) { - this.reuseChannel = reuseChannel; + public void setReceiveBufferSizePredictor( + Integer receiveBufferSizePredictor) { + this.receiveBufferSizePredictor = receiveBufferSizePredictor; + } + + public Integer getWorkerCount() { + return workerCount; + } + + public void setWorkerCount(Integer workerCount) { + this.workerCount = workerCount; + } + + public Integer getBossCount() { + return bossCount; + } + + public void setBossCount(Integer bossCount) { + this.bossCount = bossCount; + } + + public Boolean getKeepAlive() { + return keepAlive; + } + + public void setKeepAlive(Boolean keepAlive) { + this.keepAlive = keepAlive; + } + + public Boolean getTcpNoDelay() { + return tcpNoDelay; + } + + public void setTcpNoDelay(Boolean tcpNoDelay) { + this.tcpNoDelay = tcpNoDelay; + } + + public Boolean getReuseAddress() { + return reuseAddress; + } + + public void setReuseAddress(Boolean reuseAddress) { + this.reuseAddress = reuseAddress; + } + + public Integer getConnectTimeout() { + return connectTimeout; + } + + public void setConnectTimeout(Integer connectTimeout) { + this.connectTimeout = connectTimeout; + } + + public Integer getBacklog() { + return backlog; + } + + public void setBacklog(Integer backlog) { + this.backlog = backlog; + } + + public Boolean getSsl() { + return ssl; + } + + public void setSsl(Boolean ssl) { + this.ssl = ssl; + } + + public Boolean getSslClientCertHeaders() { + return sslClientCertHeaders; + } + + public void setSslClientCertHeaders(Boolean sslClientCertHeaders) { + this.sslClientCertHeaders = sslClientCertHeaders; + } + + public SslHandler getSslHandler() { + return sslHandler; + } + + public void setSslHandler(SslHandler sslHandler) { + this.sslHandler = sslHandler; + } + + public SSLContextParameters getSslContextParameters() { + return sslContextParameters; + } + + public void setSslContextParameters( + SSLContextParameters sslContextParameters) { + this.sslContextParameters = sslContextParameters; + } + + public Boolean getNeedClientAuth() { + return needClientAuth; + } + + public void setNeedClientAuth(Boolean needClientAuth) { + this.needClientAuth = needClientAuth; + } + + @Deprecated + @DeprecatedConfigurationProperty + public File getKeyStoreFile() { + return keyStoreFile; + } + + @Deprecated + public void setKeyStoreFile(File keyStoreFile) { + this.keyStoreFile = keyStoreFile; + } + + @Deprecated + @DeprecatedConfigurationProperty + public File getTrustStoreFile() { + return trustStoreFile; + } + + @Deprecated + public void setTrustStoreFile(File trustStoreFile) { + this.trustStoreFile = trustStoreFile; + } + + public String getKeyStoreResource() { + return keyStoreResource; + } + + public void setKeyStoreResource(String keyStoreResource) { + this.keyStoreResource = keyStoreResource; + } + + public String getTrustStoreResource() { + return trustStoreResource; + } + + public void setTrustStoreResource(String trustStoreResource) { + this.trustStoreResource = trustStoreResource; + } + + public String getKeyStoreFormat() { + return keyStoreFormat; + } + + public void setKeyStoreFormat(String keyStoreFormat) { + this.keyStoreFormat = keyStoreFormat; + } + + public String getSecurityProvider() { + return securityProvider; + } + + public void setSecurityProvider(String securityProvider) { + this.securityProvider = securityProvider; + } + + public String getPassphrase() { + return passphrase; + } + + public void setPassphrase(String passphrase) { + this.passphrase = passphrase; + } + + @Deprecated + @DeprecatedConfigurationProperty + public ServerInitializerFactory getServerPipelineFactory() { + return serverPipelineFactory; + } + + @Deprecated + public void setServerPipelineFactory( + ServerInitializerFactory serverPipelineFactory) { + this.serverPipelineFactory = serverPipelineFactory; + } + + public ServerInitializerFactory getServerInitializerFactory() { + return serverInitializerFactory; + } + + public void setServerInitializerFactory( + ServerInitializerFactory serverInitializerFactory) { + this.serverInitializerFactory = serverInitializerFactory; + } + + public NettyServerBootstrapFactory getNettyServerBootstrapFactory() { + return nettyServerBootstrapFactory; + } + + public void setNettyServerBootstrapFactory( + NettyServerBootstrapFactory nettyServerBootstrapFactory) { + this.nettyServerBootstrapFactory = nettyServerBootstrapFactory; + } + + public Map getOptions() { + return options; + } + + public void setOptions(Map options) { + this.options = options; + } + + public Boolean getNativeTransport() { + return nativeTransport; + } + + public void setNativeTransport(Boolean nativeTransport) { + this.nativeTransport = nativeTransport; + } + + public EventLoopGroup getBossGroup() { + return bossGroup; + } + + public void setBossGroup(EventLoopGroup bossGroup) { + this.bossGroup = bossGroup; + } + + public EventLoopGroup getWorkerGroup() { + return workerGroup; + } + + public void setWorkerGroup(EventLoopGroup workerGroup) { + this.workerGroup = workerGroup; + } + + public ChannelGroup getChannelGroup() { + return channelGroup; + } + + public void setChannelGroup(ChannelGroup channelGroup) { + this.channelGroup = channelGroup; + } + + public String getNetworkInterface() { + return networkInterface; + } + + public void setNetworkInterface(String networkInterface) { + this.networkInterface = networkInterface; + } + + public String getEnabledProtocols() { + return enabledProtocols; + } + + public void setEnabledProtocols(String enabledProtocols) { + this.enabledProtocols = enabledProtocols; + } + + public Boolean getReconnect() { + return reconnect; + } + + public void setReconnect(Boolean reconnect) { + this.reconnect = reconnect; + } + + public Integer getReconnectInterval() { + return reconnectInterval; + } + + public void setReconnectInterval(Integer reconnectInterval) { + this.reconnectInterval = reconnectInterval; + } } } \ No newline at end of file
http://git-wip-us.apache.org/repos/asf/camel/blob/d485f2f0/components-starter/camel-olingo2-starter/src/main/java/org/apache/camel/component/olingo2/springboot/Olingo2ComponentAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-olingo2-starter/src/main/java/org/apache/camel/component/olingo2/springboot/Olingo2ComponentAutoConfiguration.java b/components-starter/camel-olingo2-starter/src/main/java/org/apache/camel/component/olingo2/springboot/Olingo2ComponentAutoConfiguration.java index 07292ee..3771b8a 100644 --- a/components-starter/camel-olingo2-starter/src/main/java/org/apache/camel/component/olingo2/springboot/Olingo2ComponentAutoConfiguration.java +++ b/components-starter/camel-olingo2-starter/src/main/java/org/apache/camel/component/olingo2/springboot/Olingo2ComponentAutoConfiguration.java @@ -45,6 +45,26 @@ public class Olingo2ComponentAutoConfiguration { 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-olingo2-starter/src/main/java/org/apache/camel/component/olingo2/springboot/Olingo2ComponentConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-olingo2-starter/src/main/java/org/apache/camel/component/olingo2/springboot/Olingo2ComponentConfiguration.java b/components-starter/camel-olingo2-starter/src/main/java/org/apache/camel/component/olingo2/springboot/Olingo2ComponentConfiguration.java index 037baa4..c41ceb4 100644 --- a/components-starter/camel-olingo2-starter/src/main/java/org/apache/camel/component/olingo2/springboot/Olingo2ComponentConfiguration.java +++ b/components-starter/camel-olingo2-starter/src/main/java/org/apache/camel/component/olingo2/springboot/Olingo2ComponentConfiguration.java @@ -16,8 +16,14 @@ */ package org.apache.camel.component.olingo2.springboot; -import org.apache.camel.component.olingo2.Olingo2Configuration; +import java.util.Map; +import org.apache.camel.component.olingo2.internal.Olingo2ApiName; +import org.apache.camel.util.jsse.SSLContextParameters; +import org.apache.http.HttpHost; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.nio.client.HttpAsyncClientBuilder; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.NestedConfigurationProperty; /** * Communicates with OData 2.0 and 3.0 services using Apache Olingo. @@ -30,13 +36,166 @@ public class Olingo2ComponentConfiguration { /** * To use the shared configuration */ - private Olingo2Configuration configuration; + private Olingo2ConfigurationNestedConfiguration configuration; - public Olingo2Configuration getConfiguration() { + public Olingo2ConfigurationNestedConfiguration getConfiguration() { return configuration; } - public void setConfiguration(Olingo2Configuration configuration) { + public void setConfiguration( + Olingo2ConfigurationNestedConfiguration configuration) { this.configuration = configuration; } + + public static class Olingo2ConfigurationNestedConfiguration { + public static final Class CAMEL_NESTED_CLASS = org.apache.camel.component.olingo2.Olingo2Configuration.class; + /** + * What kind of operation to perform + */ + private Olingo2ApiName apiName; + /** + * What sub operation to use for the selected operation + */ + private String methodName; + /** + * Target OData service base URI, e.g. + * http://services.odata.org/OData/OData.svc + */ + private String serviceUri; + /** + * Content-Type header value can be used to specify JSON or XML message + * format, defaults to application/json;charset=utf-8 + */ + private String contentType = "application/json;charset=utf-8"; + /** + * Custom HTTP headers to inject into every request, this could include + * OAuth tokens, etc. + */ + private Map httpHeaders; + /** + * HTTP connection creation timeout in milliseconds, defaults to 30,000 + * (30 seconds) + */ + private Integer connectTimeout; + /** + * HTTP request timeout in milliseconds, defaults to 30,000 (30 seconds) + */ + private Integer socketTimeout; + /** + * HTTP proxy server configuration + */ + @NestedConfigurationProperty + private HttpHost proxy; + /** + * To configure security using SSLContextParameters + */ + @NestedConfigurationProperty + private SSLContextParameters sslContextParameters; + /** + * Custom HTTP async client builder for more complex HTTP client + * configuration, overrides connectionTimeout, socketTimeout, proxy and + * sslContext. Note that a socketTimeout MUST be specified in the + * builder, otherwise OData requests could block indefinitely + */ + @NestedConfigurationProperty + private HttpAsyncClientBuilder httpAsyncClientBuilder; + /** + * Custom HTTP client builder for more complex HTTP client + * configuration, overrides connectionTimeout, socketTimeout, proxy and + * sslContext. Note that a socketTimeout MUST be specified in the + * builder, otherwise OData requests could block indefinitely + */ + @NestedConfigurationProperty + private HttpClientBuilder httpClientBuilder; + + public Olingo2ApiName getApiName() { + return apiName; + } + + public void setApiName(Olingo2ApiName apiName) { + this.apiName = apiName; + } + + public String getMethodName() { + return methodName; + } + + public void setMethodName(String methodName) { + this.methodName = methodName; + } + + public String getServiceUri() { + return serviceUri; + } + + public void setServiceUri(String serviceUri) { + this.serviceUri = serviceUri; + } + + public String getContentType() { + return contentType; + } + + public void setContentType(String contentType) { + this.contentType = contentType; + } + + public Map getHttpHeaders() { + return httpHeaders; + } + + public void setHttpHeaders(Map httpHeaders) { + this.httpHeaders = httpHeaders; + } + + public Integer getConnectTimeout() { + return connectTimeout; + } + + public void setConnectTimeout(Integer connectTimeout) { + this.connectTimeout = connectTimeout; + } + + public Integer getSocketTimeout() { + return socketTimeout; + } + + public void setSocketTimeout(Integer socketTimeout) { + this.socketTimeout = socketTimeout; + } + + public HttpHost getProxy() { + return proxy; + } + + public void setProxy(HttpHost proxy) { + this.proxy = proxy; + } + + public SSLContextParameters getSslContextParameters() { + return sslContextParameters; + } + + public void setSslContextParameters( + SSLContextParameters sslContextParameters) { + this.sslContextParameters = sslContextParameters; + } + + public HttpAsyncClientBuilder getHttpAsyncClientBuilder() { + return httpAsyncClientBuilder; + } + + public void setHttpAsyncClientBuilder( + HttpAsyncClientBuilder httpAsyncClientBuilder) { + this.httpAsyncClientBuilder = httpAsyncClientBuilder; + } + + public HttpClientBuilder getHttpClientBuilder() { + return httpClientBuilder; + } + + public void setHttpClientBuilder(HttpClientBuilder httpClientBuilder) { + this.httpClientBuilder = httpClientBuilder; + } + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/d485f2f0/components-starter/camel-openshift-starter/src/main/java/org/apache/camel/component/openshift/springboot/OpenShiftComponentAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-openshift-starter/src/main/java/org/apache/camel/component/openshift/springboot/OpenShiftComponentAutoConfiguration.java b/components-starter/camel-openshift-starter/src/main/java/org/apache/camel/component/openshift/springboot/OpenShiftComponentAutoConfiguration.java index 26a8e5c..2c0ae0d 100644 --- a/components-starter/camel-openshift-starter/src/main/java/org/apache/camel/component/openshift/springboot/OpenShiftComponentAutoConfiguration.java +++ b/components-starter/camel-openshift-starter/src/main/java/org/apache/camel/component/openshift/springboot/OpenShiftComponentAutoConfiguration.java @@ -45,6 +45,26 @@ public class OpenShiftComponentAutoConfiguration { 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-paho-starter/src/main/java/org/apache/camel/component/paho/springboot/PahoComponentAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-paho-starter/src/main/java/org/apache/camel/component/paho/springboot/PahoComponentAutoConfiguration.java b/components-starter/camel-paho-starter/src/main/java/org/apache/camel/component/paho/springboot/PahoComponentAutoConfiguration.java index eb7b8d4..59c826c 100644 --- a/components-starter/camel-paho-starter/src/main/java/org/apache/camel/component/paho/springboot/PahoComponentAutoConfiguration.java +++ b/components-starter/camel-paho-starter/src/main/java/org/apache/camel/component/paho/springboot/PahoComponentAutoConfiguration.java @@ -44,6 +44,26 @@ public class PahoComponentAutoConfiguration { 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-paho-starter/src/main/java/org/apache/camel/component/paho/springboot/PahoComponentConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-paho-starter/src/main/java/org/apache/camel/component/paho/springboot/PahoComponentConfiguration.java b/components-starter/camel-paho-starter/src/main/java/org/apache/camel/component/paho/springboot/PahoComponentConfiguration.java index 26d2cbb..9f6c827 100644 --- a/components-starter/camel-paho-starter/src/main/java/org/apache/camel/component/paho/springboot/PahoComponentConfiguration.java +++ b/components-starter/camel-paho-starter/src/main/java/org/apache/camel/component/paho/springboot/PahoComponentConfiguration.java @@ -18,6 +18,7 @@ package org.apache.camel.component.paho.springboot; import org.eclipse.paho.client.mqttv3.MqttConnectOptions; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.NestedConfigurationProperty; /** * Component for communicating with MQTT M2M message brokers using Eclipse Paho @@ -39,6 +40,7 @@ public class PahoComponentConfiguration { /** * Client connection options */ + @NestedConfigurationProperty private MqttConnectOptions connectOptions; public String getBrokerUrl() { http://git-wip-us.apache.org/repos/asf/camel/blob/d485f2f0/components-starter/camel-quartz-starter/src/main/java/org/apache/camel/component/quartz/springboot/QuartzComponentAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-quartz-starter/src/main/java/org/apache/camel/component/quartz/springboot/QuartzComponentAutoConfiguration.java b/components-starter/camel-quartz-starter/src/main/java/org/apache/camel/component/quartz/springboot/QuartzComponentAutoConfiguration.java index 6a01589..6da90b1 100644 --- a/components-starter/camel-quartz-starter/src/main/java/org/apache/camel/component/quartz/springboot/QuartzComponentAutoConfiguration.java +++ b/components-starter/camel-quartz-starter/src/main/java/org/apache/camel/component/quartz/springboot/QuartzComponentAutoConfiguration.java @@ -44,6 +44,26 @@ public class QuartzComponentAutoConfiguration { 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-quartz-starter/src/main/java/org/apache/camel/component/quartz/springboot/QuartzComponentConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-quartz-starter/src/main/java/org/apache/camel/component/quartz/springboot/QuartzComponentConfiguration.java b/components-starter/camel-quartz-starter/src/main/java/org/apache/camel/component/quartz/springboot/QuartzComponentConfiguration.java index 8a200be..36509be 100644 --- a/components-starter/camel-quartz-starter/src/main/java/org/apache/camel/component/quartz/springboot/QuartzComponentConfiguration.java +++ b/components-starter/camel-quartz-starter/src/main/java/org/apache/camel/component/quartz/springboot/QuartzComponentConfiguration.java @@ -20,6 +20,7 @@ import java.util.Properties; import org.quartz.Scheduler; import org.quartz.SchedulerFactory; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.NestedConfigurationProperty; /** * Provides a scheduled delivery of messages using the Quartz 1.x scheduler. @@ -32,11 +33,13 @@ public class QuartzComponentConfiguration { /** * To use the custom SchedulerFactory which is used to create the Scheduler. */ + @NestedConfigurationProperty private SchedulerFactory factory; /** * To use the custom configured Quartz scheduler instead of creating a new * Scheduler. */ + @NestedConfigurationProperty private Scheduler scheduler; /** * Properties to configure the Quartz scheduler. http://git-wip-us.apache.org/repos/asf/camel/blob/d485f2f0/components-starter/camel-quartz2-starter/src/main/java/org/apache/camel/component/quartz2/springboot/QuartzComponentAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-quartz2-starter/src/main/java/org/apache/camel/component/quartz2/springboot/QuartzComponentAutoConfiguration.java b/components-starter/camel-quartz2-starter/src/main/java/org/apache/camel/component/quartz2/springboot/QuartzComponentAutoConfiguration.java index eb06660..79dae37 100644 --- a/components-starter/camel-quartz2-starter/src/main/java/org/apache/camel/component/quartz2/springboot/QuartzComponentAutoConfiguration.java +++ b/components-starter/camel-quartz2-starter/src/main/java/org/apache/camel/component/quartz2/springboot/QuartzComponentAutoConfiguration.java @@ -44,6 +44,26 @@ public class QuartzComponentAutoConfiguration { 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-quartz2-starter/src/main/java/org/apache/camel/component/quartz2/springboot/QuartzComponentConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-quartz2-starter/src/main/java/org/apache/camel/component/quartz2/springboot/QuartzComponentConfiguration.java b/components-starter/camel-quartz2-starter/src/main/java/org/apache/camel/component/quartz2/springboot/QuartzComponentConfiguration.java index a3f9824..db3abee 100644 --- a/components-starter/camel-quartz2-starter/src/main/java/org/apache/camel/component/quartz2/springboot/QuartzComponentConfiguration.java +++ b/components-starter/camel-quartz2-starter/src/main/java/org/apache/camel/component/quartz2/springboot/QuartzComponentConfiguration.java @@ -20,6 +20,7 @@ import java.util.Properties; import org.quartz.Scheduler; import org.quartz.SchedulerFactory; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.NestedConfigurationProperty; /** * Provides a scheduled delivery of messages using the Quartz 2.x scheduler. @@ -67,11 +68,13 @@ public class QuartzComponentConfiguration { /** * To use the custom SchedulerFactory which is used to create the Scheduler. */ + @NestedConfigurationProperty private SchedulerFactory schedulerFactory; /** * To use the custom configured Quartz scheduler instead of creating a new * Scheduler. */ + @NestedConfigurationProperty private Scheduler scheduler; public Boolean getAutoStartScheduler() { 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/QuickfixjComponentAutoConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-quickfix-starter/src/main/java/org/apache/camel/component/quickfixj/springboot/QuickfixjComponentAutoConfiguration.java b/components-starter/camel-quickfix-starter/src/main/java/org/apache/camel/component/quickfixj/springboot/QuickfixjComponentAutoConfiguration.java index 149e961..b644970 100644 --- a/components-starter/camel-quickfix-starter/src/main/java/org/apache/camel/component/quickfixj/springboot/QuickfixjComponentAutoConfiguration.java +++ b/components-starter/camel-quickfix-starter/src/main/java/org/apache/camel/component/quickfixj/springboot/QuickfixjComponentAutoConfiguration.java @@ -45,6 +45,26 @@ public class QuickfixjComponentAutoConfiguration { 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;