This is an automated email from the ASF dual-hosted git repository.
jamesnetherton pushed a commit to branch camel-3.18.x
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-3.18.x by this push:
new 1ac666e47e5 CAMEL-18494: camel-mllp - Allow the ability to set
MIN_BUFFER_SIZE for SocketBuffer
1ac666e47e5 is described below
commit 1ac666e47e5a959800a5a6477886ad3b6916dd58
Author: Claus Ibsen <[email protected]>
AuthorDate: Thu Sep 15 13:41:19 2022 +0200
CAMEL-18494: camel-mllp - Allow the ability to set MIN_BUFFER_SIZE for
SocketBuffer
---
.../org/apache/camel/catalog/components/mllp.json | 4 +
.../component/mllp/MllpComponentConfigurer.java | 12 ++
.../component/mllp/MllpEndpointConfigurer.java | 12 ++
.../component/mllp/MllpEndpointUriFactory.java | 4 +-
.../org/apache/camel/component/mllp/mllp.json | 4 +
.../camel/component/mllp/MllpConfiguration.java | 35 +++-
.../component/mllp/internal/MllpSocketBuffer.java | 22 +--
.../mllp/internal/MllpSocketBufferWriteTest.java | 20 ++-
.../component/dsl/MllpComponentBuilderFactory.java | 34 ++++
.../endpoint/dsl/MllpEndpointBuilderFactory.java | 200 +++++++++++++++++++++
10 files changed, 327 insertions(+), 20 deletions(-)
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/mllp.json
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/mllp.json
index 5eb25affc02..287b97dd8e3 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/mllp.json
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/mllp.json
@@ -47,6 +47,8 @@
"defaultCharset": { "kind": "property", "displayName": "Default Charset",
"group": "advanced", "label": "advanced", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": "ISO-8859-1", "description": "Set the default
character set to use for byte to\/from String conversions." },
"logPhi": { "kind": "property", "displayName": "Log Phi", "group":
"advanced", "label": "advanced", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": "true", "description": "Whether to log PHI" },
"logPhiMaxBytes": { "kind": "property", "displayName": "Log Phi Max
Bytes", "group": "advanced", "label": "advanced", "required": false, "type":
"integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": "5120", "description": "Set the maximum
number of bytes of PHI that will be logged in a log entry." },
+ "maxBufferSize": { "kind": "property", "displayName": "Max Buffer Size",
"group": "advanced", "label": "advanced", "required": false, "type": "integer",
"javaType": "int", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": 1073741824, "configurationClass":
"org.apache.camel.component.mllp.MllpConfiguration", "configurationField":
"configuration", "description": "Maximum buffer size used when receiving or
sending data over the wire." },
+ "minBufferSize": { "kind": "property", "displayName": "Min Buffer Size",
"group": "advanced", "label": "advanced", "required": false, "type": "integer",
"javaType": "int", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": 2048, "configurationClass":
"org.apache.camel.component.mllp.MllpConfiguration", "configurationField":
"configuration", "description": "Minimum buffer size used when receiving or
sending data over the wire." },
"readTimeout": { "kind": "property", "displayName": "Read Timeout",
"group": "advanced", "label": "advanced", "required": false, "type": "integer",
"javaType": "int", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": 5000, "configurationClass":
"org.apache.camel.component.mllp.MllpConfiguration", "configurationField":
"configuration", "description": "The SO_TIMEOUT value (in milliseconds) used
after the start of an MLLP frame has been received" },
"receiveBufferSize": { "kind": "property", "displayName": "Receive Buffer
Size", "group": "advanced", "label": "advanced", "required": false, "type":
"integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": "8192", "configurationClass":
"org.apache.camel.component.mllp.MllpConfiguration", "configurationField":
"configuration", "description": "Sets the SO_RCVBUF option to the specified
value (in bytes)" },
"receiveTimeout": { "kind": "property", "displayName": "Receive Timeout",
"group": "advanced", "label": "advanced", "required": false, "type": "integer",
"javaType": "int", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": 15000, "configurationClass":
"org.apache.camel.component.mllp.MllpConfiguration", "configurationField":
"configuration", "description": "The SO_TIMEOUT value (in milliseconds) used
when waiting for the start of an MLLP frame" },
@@ -97,6 +99,8 @@
"keepAlive": { "kind": "parameter", "displayName": "Keep Alive", "group":
"producer", "label": "advanced,producer", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": "true", "configurationClass":
"org.apache.camel.component.mllp.MllpConfiguration", "configurationField":
"configuration", "description": "Enable\/disable the SO_KEEPALIVE socket
option." },
"tcpNoDelay": { "kind": "parameter", "displayName": "Tcp No Delay",
"group": "producer", "label": "advanced,producer", "required": false, "type":
"boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": "true", "configurationClass":
"org.apache.camel.component.mllp.MllpConfiguration", "configurationField":
"configuration", "description": "Enable\/disable the TCP_NODELAY socket
option." },
"lazyStartProducer": { "kind": "parameter", "displayName": "Lazy Start
Producer", "group": "producer (advanced)", "label": "producer,advanced",
"required": false, "type": "boolean", "javaType": "boolean", "deprecated":
false, "autowired": false, "secret": false, "defaultValue": false,
"description": "Whether the producer should be started lazy (on the first
message). By starting lazy you can use this to allow CamelContext and routes to
startup in situations where a producer may other [...]
+ "maxBufferSize": { "kind": "parameter", "displayName": "Max Buffer Size",
"group": "advanced", "label": "advanced", "required": false, "type": "integer",
"javaType": "int", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": 1073741824, "configurationClass":
"org.apache.camel.component.mllp.MllpConfiguration", "configurationField":
"configuration", "description": "Maximum buffer size used when receiving or
sending data over the wire." },
+ "minBufferSize": { "kind": "parameter", "displayName": "Min Buffer Size",
"group": "advanced", "label": "advanced", "required": false, "type": "integer",
"javaType": "int", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": 2048, "configurationClass":
"org.apache.camel.component.mllp.MllpConfiguration", "configurationField":
"configuration", "description": "Minimum buffer size used when receiving or
sending data over the wire." },
"readTimeout": { "kind": "parameter", "displayName": "Read Timeout",
"group": "advanced", "label": "advanced", "required": false, "type": "integer",
"javaType": "int", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": 5000, "configurationClass":
"org.apache.camel.component.mllp.MllpConfiguration", "configurationField":
"configuration", "description": "The SO_TIMEOUT value (in milliseconds) used
after the start of an MLLP frame has been received" },
"receiveBufferSize": { "kind": "parameter", "displayName": "Receive Buffer
Size", "group": "advanced", "label": "advanced", "required": false, "type":
"integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": "8192", "configurationClass":
"org.apache.camel.component.mllp.MllpConfiguration", "configurationField":
"configuration", "description": "Sets the SO_RCVBUF option to the specified
value (in bytes)" },
"receiveTimeout": { "kind": "parameter", "displayName": "Receive Timeout",
"group": "advanced", "label": "advanced", "required": false, "type": "integer",
"javaType": "int", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": 15000, "configurationClass":
"org.apache.camel.component.mllp.MllpConfiguration", "configurationField":
"configuration", "description": "The SO_TIMEOUT value (in milliseconds) used
when waiting for the start of an MLLP frame" },
diff --git
a/components/camel-mllp/src/generated/java/org/apache/camel/component/mllp/MllpComponentConfigurer.java
b/components/camel-mllp/src/generated/java/org/apache/camel/component/mllp/MllpComponentConfigurer.java
index e38eac8f0b2..3ded6d98613 100644
---
a/components/camel-mllp/src/generated/java/org/apache/camel/component/mllp/MllpComponentConfigurer.java
+++
b/components/camel-mllp/src/generated/java/org/apache/camel/component/mllp/MllpComponentConfigurer.java
@@ -66,8 +66,12 @@ public class MllpComponentConfigurer extends
PropertyConfigurerSupport implement
case "logPhi": target.setLogPhi(property(camelContext,
java.lang.Boolean.class, value)); return true;
case "logphimaxbytes":
case "logPhiMaxBytes": target.setLogPhiMaxBytes(property(camelContext,
java.lang.Integer.class, value)); return true;
+ case "maxbuffersize":
+ case "maxBufferSize":
getOrCreateConfiguration(target).setMaxBufferSize(property(camelContext,
int.class, value)); return true;
case "maxconcurrentconsumers":
case "maxConcurrentConsumers":
getOrCreateConfiguration(target).setMaxConcurrentConsumers(property(camelContext,
int.class, value)); return true;
+ case "minbuffersize":
+ case "minBufferSize":
getOrCreateConfiguration(target).setMinBufferSize(property(camelContext,
int.class, value)); return true;
case "readtimeout":
case "readTimeout":
getOrCreateConfiguration(target).setReadTimeout(property(camelContext,
int.class, value)); return true;
case "receivebuffersize":
@@ -131,8 +135,12 @@ public class MllpComponentConfigurer extends
PropertyConfigurerSupport implement
case "logPhi": return java.lang.Boolean.class;
case "logphimaxbytes":
case "logPhiMaxBytes": return java.lang.Integer.class;
+ case "maxbuffersize":
+ case "maxBufferSize": return int.class;
case "maxconcurrentconsumers":
case "maxConcurrentConsumers": return int.class;
+ case "minbuffersize":
+ case "minBufferSize": return int.class;
case "readtimeout":
case "readTimeout": return int.class;
case "receivebuffersize":
@@ -197,8 +205,12 @@ public class MllpComponentConfigurer extends
PropertyConfigurerSupport implement
case "logPhi": return target.getLogPhi();
case "logphimaxbytes":
case "logPhiMaxBytes": return target.getLogPhiMaxBytes();
+ case "maxbuffersize":
+ case "maxBufferSize": return
getOrCreateConfiguration(target).getMaxBufferSize();
case "maxconcurrentconsumers":
case "maxConcurrentConsumers": return
getOrCreateConfiguration(target).getMaxConcurrentConsumers();
+ case "minbuffersize":
+ case "minBufferSize": return
getOrCreateConfiguration(target).getMinBufferSize();
case "readtimeout":
case "readTimeout": return
getOrCreateConfiguration(target).getReadTimeout();
case "receivebuffersize":
diff --git
a/components/camel-mllp/src/generated/java/org/apache/camel/component/mllp/MllpEndpointConfigurer.java
b/components/camel-mllp/src/generated/java/org/apache/camel/component/mllp/MllpEndpointConfigurer.java
index 6d754a421b0..8a9b7991432 100644
---
a/components/camel-mllp/src/generated/java/org/apache/camel/component/mllp/MllpEndpointConfigurer.java
+++
b/components/camel-mllp/src/generated/java/org/apache/camel/component/mllp/MllpEndpointConfigurer.java
@@ -52,8 +52,12 @@ public class MllpEndpointConfigurer extends
PropertyConfigurerSupport implements
case "lazyStartProducer":
target.setLazyStartProducer(property(camelContext, boolean.class, value));
return true;
case "lenientbind":
case "lenientBind":
target.getConfiguration().setLenientBind(property(camelContext, boolean.class,
value)); return true;
+ case "maxbuffersize":
+ case "maxBufferSize":
target.getConfiguration().setMaxBufferSize(property(camelContext, int.class,
value)); return true;
case "maxconcurrentconsumers":
case "maxConcurrentConsumers":
target.getConfiguration().setMaxConcurrentConsumers(property(camelContext,
int.class, value)); return true;
+ case "minbuffersize":
+ case "minBufferSize":
target.getConfiguration().setMinBufferSize(property(camelContext, int.class,
value)); return true;
case "readtimeout":
case "readTimeout":
target.getConfiguration().setReadTimeout(property(camelContext, int.class,
value)); return true;
case "receivebuffersize":
@@ -110,8 +114,12 @@ public class MllpEndpointConfigurer extends
PropertyConfigurerSupport implements
case "lazyStartProducer": return boolean.class;
case "lenientbind":
case "lenientBind": return boolean.class;
+ case "maxbuffersize":
+ case "maxBufferSize": return int.class;
case "maxconcurrentconsumers":
case "maxConcurrentConsumers": return int.class;
+ case "minbuffersize":
+ case "minBufferSize": return int.class;
case "readtimeout":
case "readTimeout": return int.class;
case "receivebuffersize":
@@ -169,8 +177,12 @@ public class MllpEndpointConfigurer extends
PropertyConfigurerSupport implements
case "lazyStartProducer": return target.isLazyStartProducer();
case "lenientbind":
case "lenientBind": return target.getConfiguration().isLenientBind();
+ case "maxbuffersize":
+ case "maxBufferSize": return
target.getConfiguration().getMaxBufferSize();
case "maxconcurrentconsumers":
case "maxConcurrentConsumers": return
target.getConfiguration().getMaxConcurrentConsumers();
+ case "minbuffersize":
+ case "minBufferSize": return
target.getConfiguration().getMinBufferSize();
case "readtimeout":
case "readTimeout": return target.getConfiguration().getReadTimeout();
case "receivebuffersize":
diff --git
a/components/camel-mllp/src/generated/java/org/apache/camel/component/mllp/MllpEndpointUriFactory.java
b/components/camel-mllp/src/generated/java/org/apache/camel/component/mllp/MllpEndpointUriFactory.java
index 40ef6f0c68c..807af8b1549 100644
---
a/components/camel-mllp/src/generated/java/org/apache/camel/component/mllp/MllpEndpointUriFactory.java
+++
b/components/camel-mllp/src/generated/java/org/apache/camel/component/mllp/MllpEndpointUriFactory.java
@@ -21,7 +21,7 @@ public class MllpEndpointUriFactory extends
org.apache.camel.support.component.E
private static final Set<String> SECRET_PROPERTY_NAMES;
private static final Set<String> MULTI_VALUE_PREFIXES;
static {
- Set<String> props = new HashSet<>(28);
+ Set<String> props = new HashSet<>(30);
props.add("acceptTimeout");
props.add("autoAck");
props.add("backlog");
@@ -39,7 +39,9 @@ public class MllpEndpointUriFactory extends
org.apache.camel.support.component.E
props.add("keepAlive");
props.add("lazyStartProducer");
props.add("lenientBind");
+ props.add("maxBufferSize");
props.add("maxConcurrentConsumers");
+ props.add("minBufferSize");
props.add("port");
props.add("readTimeout");
props.add("receiveBufferSize");
diff --git
a/components/camel-mllp/src/generated/resources/org/apache/camel/component/mllp/mllp.json
b/components/camel-mllp/src/generated/resources/org/apache/camel/component/mllp/mllp.json
index 5eb25affc02..287b97dd8e3 100644
---
a/components/camel-mllp/src/generated/resources/org/apache/camel/component/mllp/mllp.json
+++
b/components/camel-mllp/src/generated/resources/org/apache/camel/component/mllp/mllp.json
@@ -47,6 +47,8 @@
"defaultCharset": { "kind": "property", "displayName": "Default Charset",
"group": "advanced", "label": "advanced", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": "ISO-8859-1", "description": "Set the default
character set to use for byte to\/from String conversions." },
"logPhi": { "kind": "property", "displayName": "Log Phi", "group":
"advanced", "label": "advanced", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": "true", "description": "Whether to log PHI" },
"logPhiMaxBytes": { "kind": "property", "displayName": "Log Phi Max
Bytes", "group": "advanced", "label": "advanced", "required": false, "type":
"integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": "5120", "description": "Set the maximum
number of bytes of PHI that will be logged in a log entry." },
+ "maxBufferSize": { "kind": "property", "displayName": "Max Buffer Size",
"group": "advanced", "label": "advanced", "required": false, "type": "integer",
"javaType": "int", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": 1073741824, "configurationClass":
"org.apache.camel.component.mllp.MllpConfiguration", "configurationField":
"configuration", "description": "Maximum buffer size used when receiving or
sending data over the wire." },
+ "minBufferSize": { "kind": "property", "displayName": "Min Buffer Size",
"group": "advanced", "label": "advanced", "required": false, "type": "integer",
"javaType": "int", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": 2048, "configurationClass":
"org.apache.camel.component.mllp.MllpConfiguration", "configurationField":
"configuration", "description": "Minimum buffer size used when receiving or
sending data over the wire." },
"readTimeout": { "kind": "property", "displayName": "Read Timeout",
"group": "advanced", "label": "advanced", "required": false, "type": "integer",
"javaType": "int", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": 5000, "configurationClass":
"org.apache.camel.component.mllp.MllpConfiguration", "configurationField":
"configuration", "description": "The SO_TIMEOUT value (in milliseconds) used
after the start of an MLLP frame has been received" },
"receiveBufferSize": { "kind": "property", "displayName": "Receive Buffer
Size", "group": "advanced", "label": "advanced", "required": false, "type":
"integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": "8192", "configurationClass":
"org.apache.camel.component.mllp.MllpConfiguration", "configurationField":
"configuration", "description": "Sets the SO_RCVBUF option to the specified
value (in bytes)" },
"receiveTimeout": { "kind": "property", "displayName": "Receive Timeout",
"group": "advanced", "label": "advanced", "required": false, "type": "integer",
"javaType": "int", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": 15000, "configurationClass":
"org.apache.camel.component.mllp.MllpConfiguration", "configurationField":
"configuration", "description": "The SO_TIMEOUT value (in milliseconds) used
when waiting for the start of an MLLP frame" },
@@ -97,6 +99,8 @@
"keepAlive": { "kind": "parameter", "displayName": "Keep Alive", "group":
"producer", "label": "advanced,producer", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": "true", "configurationClass":
"org.apache.camel.component.mllp.MllpConfiguration", "configurationField":
"configuration", "description": "Enable\/disable the SO_KEEPALIVE socket
option." },
"tcpNoDelay": { "kind": "parameter", "displayName": "Tcp No Delay",
"group": "producer", "label": "advanced,producer", "required": false, "type":
"boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": "true", "configurationClass":
"org.apache.camel.component.mllp.MllpConfiguration", "configurationField":
"configuration", "description": "Enable\/disable the TCP_NODELAY socket
option." },
"lazyStartProducer": { "kind": "parameter", "displayName": "Lazy Start
Producer", "group": "producer (advanced)", "label": "producer,advanced",
"required": false, "type": "boolean", "javaType": "boolean", "deprecated":
false, "autowired": false, "secret": false, "defaultValue": false,
"description": "Whether the producer should be started lazy (on the first
message). By starting lazy you can use this to allow CamelContext and routes to
startup in situations where a producer may other [...]
+ "maxBufferSize": { "kind": "parameter", "displayName": "Max Buffer Size",
"group": "advanced", "label": "advanced", "required": false, "type": "integer",
"javaType": "int", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": 1073741824, "configurationClass":
"org.apache.camel.component.mllp.MllpConfiguration", "configurationField":
"configuration", "description": "Maximum buffer size used when receiving or
sending data over the wire." },
+ "minBufferSize": { "kind": "parameter", "displayName": "Min Buffer Size",
"group": "advanced", "label": "advanced", "required": false, "type": "integer",
"javaType": "int", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": 2048, "configurationClass":
"org.apache.camel.component.mllp.MllpConfiguration", "configurationField":
"configuration", "description": "Minimum buffer size used when receiving or
sending data over the wire." },
"readTimeout": { "kind": "parameter", "displayName": "Read Timeout",
"group": "advanced", "label": "advanced", "required": false, "type": "integer",
"javaType": "int", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": 5000, "configurationClass":
"org.apache.camel.component.mllp.MllpConfiguration", "configurationField":
"configuration", "description": "The SO_TIMEOUT value (in milliseconds) used
after the start of an MLLP frame has been received" },
"receiveBufferSize": { "kind": "parameter", "displayName": "Receive Buffer
Size", "group": "advanced", "label": "advanced", "required": false, "type":
"integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": "8192", "configurationClass":
"org.apache.camel.component.mllp.MllpConfiguration", "configurationField":
"configuration", "description": "Sets the SO_RCVBUF option to the specified
value (in bytes)" },
"receiveTimeout": { "kind": "parameter", "displayName": "Receive Timeout",
"group": "advanced", "label": "advanced", "required": false, "type": "integer",
"javaType": "int", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": 15000, "configurationClass":
"org.apache.camel.component.mllp.MllpConfiguration", "configurationField":
"configuration", "description": "The SO_TIMEOUT value (in milliseconds) used
when waiting for the start of an MLLP frame" },
diff --git
a/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/MllpConfiguration.java
b/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/MllpConfiguration.java
index ca4f6963ec0..87df4c4b86d 100644
---
a/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/MllpConfiguration.java
+++
b/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/MllpConfiguration.java
@@ -106,6 +106,11 @@ public class MllpConfiguration implements Cloneable {
@UriParam(label = "advanced,producer", defaultValue = "RESET")
MllpIdleTimeoutStrategy idleTimeoutStrategy =
MllpIdleTimeoutStrategy.RESET;
+ @UriParam(label = "advanced", defaultValue = "2048")
+ int minBufferSize = 2048;
+ @UriParam(label = "advanced", defaultValue = "" + 0x40000000)
+ int maxBufferSize = 0x40000000;
+
public MllpConfiguration() {
}
@@ -530,6 +535,28 @@ public class MllpConfiguration implements Cloneable {
this.idleTimeoutStrategy = idleTimeoutStrategy;
}
+ public int getMinBufferSize() {
+ return minBufferSize;
+ }
+
+ /**
+ * Minimum buffer size used when receiving or sending data over the wire.
+ */
+ public void setMinBufferSize(int minBufferSize) {
+ this.minBufferSize = minBufferSize;
+ }
+
+ /**
+ * Maximum buffer size used when receiving or sending data over the wire.
+ */
+ public int getMaxBufferSize() {
+ return maxBufferSize;
+ }
+
+ public void setMaxBufferSize(int maxBufferSize) {
+ this.maxBufferSize = maxBufferSize;
+ }
+
@Override
public int hashCode() {
return Objects.hash(bridgeErrorHandler,
@@ -554,7 +581,9 @@ public class MllpConfiguration implements Cloneable {
requireEndOfData,
stringPayload,
validatePayload,
- charsetName);
+ charsetName,
+ minBufferSize,
+ maxBufferSize);
}
@Override
@@ -583,6 +612,8 @@ public class MllpConfiguration implements Cloneable {
&& stringPayload == rhs.stringPayload
&& validatePayload == rhs.validatePayload
&& idleTimeoutStrategy == rhs.idleTimeoutStrategy
+ && minBufferSize == rhs.minBufferSize
+ && maxBufferSize == rhs.maxBufferSize
&& Objects.equals(backlog, rhs.backlog)
&& Objects.equals(maxConcurrentConsumers,
rhs.maxConcurrentConsumers)
&& Objects.equals(idleTimeout, rhs.idleTimeout)
@@ -619,6 +650,8 @@ public class MllpConfiguration implements Cloneable {
+ ", requireEndOfData=" + requireEndOfData
+ ", stringPayload=" + stringPayload
+ ", validatePayload=" + validatePayload
+ + ", minBufferSize=" + minBufferSize
+ + ", maxBufferSize=" + maxBufferSize
+ ", charsetName='" + charsetName + '\''
+ '}';
}
diff --git
a/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/internal/MllpSocketBuffer.java
b/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/internal/MllpSocketBuffer.java
index 0a30455b8dd..055fe1c0aaf 100644
---
a/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/internal/MllpSocketBuffer.java
+++
b/components/camel-mllp/src/main/java/org/apache/camel/component/mllp/internal/MllpSocketBuffer.java
@@ -36,8 +36,6 @@ import org.slf4j.LoggerFactory;
* An OutputStream modeled after the ByteArrayOutputStream specifically for
MLLP operations.
*/
public class MllpSocketBuffer {
- static final int MIN_BUFFER_SIZE = 2048;
- static final int MAX_BUFFER_SIZE = 0x40000000; // Approximately 1-GB
private static final Logger LOG =
LoggerFactory.getLogger(MllpSocketBuffer.class);
final MllpEndpoint endpoint;
@@ -49,6 +47,8 @@ public class MllpSocketBuffer {
int endOfBlockIndex = -1;
String charset;
Hl7Util hl7Util;
+ int minBufferSize;
+ int maxBufferSize;
public MllpSocketBuffer(MllpEndpoint endpoint) {
if (endpoint == null) {
@@ -58,8 +58,10 @@ public class MllpSocketBuffer {
this.charset = endpoint.getCharsetName();
MllpComponent component = endpoint.getComponent();
this.hl7Util = new Hl7Util(component.getLogPhiMaxBytes(),
component.getLogPhi());
+ this.minBufferSize = endpoint.getConfiguration().getMinBufferSize();
+ this.maxBufferSize = endpoint.getConfiguration().getMaxBufferSize();
- buffer = new byte[MIN_BUFFER_SIZE];
+ buffer = new byte[minBufferSize];
}
public boolean isEndOfDataRequired() {
@@ -179,7 +181,7 @@ public class MllpSocketBuffer {
throws MllpSocketException, SocketTimeoutException {
if (socket != null && socket.isConnected() && !socket.isClosed()) {
LOG.trace("readFrom({}, {}, {}) - entering", socket,
receiveTimeout, readTimeout);
- ensureCapacity(MIN_BUFFER_SIZE);
+ ensureCapacity(minBufferSize);
try {
InputStream socketInputStream = socket.getInputStream();
@@ -191,7 +193,7 @@ public class MllpSocketBuffer {
socket.setSoTimeout(readTimeout);
while (!hasCompleteEnvelope()) {
- ensureCapacity(Math.max(MIN_BUFFER_SIZE,
socketInputStream.available()));
+ ensureCapacity(Math.max(minBufferSize,
socketInputStream.available()));
readSocketInputStream(socketInputStream, socket);
}
}
@@ -507,20 +509,20 @@ public class MllpSocketBuffer {
if (requiredAvailableCapacity > currentAvailableCapacity) {
int requiredBufferSize = buffer.length +
(requiredAvailableCapacity - currentAvailableCapacity);
- if (buffer.length >= MAX_BUFFER_SIZE) {
+ if (buffer.length >= maxBufferSize) {
final String exceptionMessageFormat = "Cannot increase the
buffer size from <%d> to <%d>"
+ " in order to increase
the available capacity from <%d> to <%d> because the buffer is already the
maximum size <%d>";
throw new IllegalStateException(
String.format(exceptionMessageFormat, buffer.length,
requiredBufferSize, currentAvailableCapacity,
- requiredAvailableCapacity, MAX_BUFFER_SIZE));
- } else if (requiredBufferSize > MAX_BUFFER_SIZE) {
+ requiredAvailableCapacity, maxBufferSize));
+ } else if (requiredBufferSize > maxBufferSize) {
final String exceptionMessageFormat = "Cannot increase the
buffer size <%d>"
+ " in order to increase
the available capacity from <%d> to <%d> because the required buffer size <%d>
exceeds the maximum buffer size <%d>";
throw new IllegalStateException(
String.format(exceptionMessageFormat, buffer.length,
currentAvailableCapacity,
- requiredAvailableCapacity, requiredBufferSize,
MAX_BUFFER_SIZE));
+ requiredAvailableCapacity, requiredBufferSize,
maxBufferSize));
}
- int newBufferSize = Math.min(buffer.length +
Math.max(MIN_BUFFER_SIZE, requiredAvailableCapacity), MAX_BUFFER_SIZE);
+ int newBufferSize = Math.min(buffer.length +
Math.max(minBufferSize, requiredAvailableCapacity), maxBufferSize);
buffer = Arrays.copyOf(buffer, newBufferSize);
}
diff --git
a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/internal/MllpSocketBufferWriteTest.java
b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/internal/MllpSocketBufferWriteTest.java
index 19f30ada6ce..dc73acf135b 100644
---
a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/internal/MllpSocketBufferWriteTest.java
+++
b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/internal/MllpSocketBufferWriteTest.java
@@ -30,6 +30,10 @@ import static org.junit.jupiter.api.Assertions.fail;
* Tests for the overridden methods in the MllpSocketBuffer class.
*/
public class MllpSocketBufferWriteTest extends SocketBufferTestSupport {
+
+ static final int MIN_BUFFER_SIZE = 2048;
+ static final int MAX_BUFFER_SIZE = 0x40000000; // Approximately 1-GB
+
/**
* Description of test.
*
@@ -288,11 +292,11 @@ public class MllpSocketBufferWriteTest extends
SocketBufferTestSupport {
*/
@Test
public void testEnsureCapacityWithNegativeRequiredAvailability() {
- assertEquals(MllpSocketBuffer.MIN_BUFFER_SIZE, instance.capacity());
+ assertEquals(MIN_BUFFER_SIZE, instance.capacity());
instance.ensureCapacity(-1);
- assertEquals(MllpSocketBuffer.MIN_BUFFER_SIZE, instance.capacity());
+ assertEquals(MIN_BUFFER_SIZE, instance.capacity());
}
/**
@@ -301,7 +305,7 @@ public class MllpSocketBufferWriteTest extends
SocketBufferTestSupport {
*/
@Test
public void testEnsureCapacityWithOutOfRangeRequiredAvailability() {
- assertEquals(MllpSocketBuffer.MIN_BUFFER_SIZE, instance.capacity());
+ assertEquals(MIN_BUFFER_SIZE, instance.capacity());
try {
instance.ensureCapacity(Integer.MAX_VALUE);
@@ -314,7 +318,7 @@ public class MllpSocketBufferWriteTest extends
SocketBufferTestSupport {
}
try {
- instance.ensureCapacity(MllpSocketBuffer.MAX_BUFFER_SIZE + 1);
+ instance.ensureCapacity(MAX_BUFFER_SIZE + 1);
fail("Should have thrown an exception");
} catch (IllegalStateException expectedEx) {
String expectedMessage
@@ -325,7 +329,7 @@ public class MllpSocketBufferWriteTest extends
SocketBufferTestSupport {
instance.write("BLAH".getBytes());
IllegalStateException expectedEx =
assertThrows(IllegalStateException.class,
- () ->
instance.ensureCapacity(MllpSocketBuffer.MAX_BUFFER_SIZE));
+ () -> instance.ensureCapacity(MAX_BUFFER_SIZE));
String expectedMessage
= "Cannot increase the buffer size <2048> in order to increase
the available capacity from <2044> to <1073741824>"
+ " because the required buffer size <1073741828> exceeds
the maximum buffer size <1073741824>";
@@ -338,12 +342,12 @@ public class MllpSocketBufferWriteTest extends
SocketBufferTestSupport {
*/
@Test
public void testEnsureCapacityWithAlreadyAllocateMaxBufferSize() {
- assertEquals(MllpSocketBuffer.MIN_BUFFER_SIZE, instance.capacity());
+ assertEquals(MIN_BUFFER_SIZE, instance.capacity());
- instance.ensureCapacity(MllpSocketBuffer.MAX_BUFFER_SIZE);
+ instance.ensureCapacity(MAX_BUFFER_SIZE);
IllegalStateException expectedEx =
assertThrows(IllegalStateException.class,
- () -> instance.ensureCapacity(MllpSocketBuffer.MAX_BUFFER_SIZE
+ 1));
+ () -> instance.ensureCapacity(MAX_BUFFER_SIZE + 1));
String expectedMessage
= "Cannot increase the buffer size from <1073741824> to
<1073741825> in order to increase the available capacity"
+ " from <1073741824> to <1073741825> because the buffer is
already the maximum size <1073741824>";
diff --git
a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/MllpComponentBuilderFactory.java
b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/MllpComponentBuilderFactory.java
index 80323a10481..5cc482fd6c9 100644
---
a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/MllpComponentBuilderFactory.java
+++
b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/MllpComponentBuilderFactory.java
@@ -481,6 +481,38 @@ public interface MllpComponentBuilderFactory {
doSetProperty("logPhiMaxBytes", logPhiMaxBytes);
return this;
}
+ /**
+ * Maximum buffer size used when receiving or sending data over the
+ * wire.
+ *
+ * The option is a: <code>int</code> type.
+ *
+ * Default: 1073741824
+ * Group: advanced
+ *
+ * @param maxBufferSize the value to set
+ * @return the dsl builder
+ */
+ default MllpComponentBuilder maxBufferSize(int maxBufferSize) {
+ doSetProperty("maxBufferSize", maxBufferSize);
+ return this;
+ }
+ /**
+ * Minimum buffer size used when receiving or sending data over the
+ * wire.
+ *
+ * The option is a: <code>int</code> type.
+ *
+ * Default: 2048
+ * Group: advanced
+ *
+ * @param minBufferSize the value to set
+ * @return the dsl builder
+ */
+ default MllpComponentBuilder minBufferSize(int minBufferSize) {
+ doSetProperty("minBufferSize", minBufferSize);
+ return this;
+ }
/**
* The SO_TIMEOUT value (in milliseconds) used after the start of an
* MLLP frame has been received.
@@ -610,6 +642,8 @@ public interface MllpComponentBuilderFactory {
case "defaultCharset": ((MllpComponent)
component).setDefaultCharset((java.lang.String) value); return true;
case "logPhi": ((MllpComponent)
component).setLogPhi((java.lang.Boolean) value); return true;
case "logPhiMaxBytes": ((MllpComponent)
component).setLogPhiMaxBytes((java.lang.Integer) value); return true;
+ case "maxBufferSize": getOrCreateConfiguration((MllpComponent)
component).setMaxBufferSize((int) value); return true;
+ case "minBufferSize": getOrCreateConfiguration((MllpComponent)
component).setMinBufferSize((int) value); return true;
case "readTimeout": getOrCreateConfiguration((MllpComponent)
component).setReadTimeout((int) value); return true;
case "receiveBufferSize": getOrCreateConfiguration((MllpComponent)
component).setReceiveBufferSize((java.lang.Integer) value); return true;
case "receiveTimeout": getOrCreateConfiguration((MllpComponent)
component).setReceiveTimeout((int) value); return true;
diff --git
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/MllpEndpointBuilderFactory.java
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/MllpEndpointBuilderFactory.java
index a3fc248610a..b01f9c41b0d 100644
---
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/MllpEndpointBuilderFactory.java
+++
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/MllpEndpointBuilderFactory.java
@@ -620,6 +620,74 @@ public interface MllpEndpointBuilderFactory {
doSetProperty("exchangePattern", exchangePattern);
return this;
}
+ /**
+ * Maximum buffer size used when receiving or sending data over the
+ * wire.
+ *
+ * The option is a: <code>int</code> type.
+ *
+ * Default: 1073741824
+ * Group: advanced
+ *
+ * @param maxBufferSize the value to set
+ * @return the dsl builder
+ */
+ default AdvancedMllpEndpointConsumerBuilder maxBufferSize(
+ int maxBufferSize) {
+ doSetProperty("maxBufferSize", maxBufferSize);
+ return this;
+ }
+ /**
+ * Maximum buffer size used when receiving or sending data over the
+ * wire.
+ *
+ * The option will be converted to a <code>int</code> type.
+ *
+ * Default: 1073741824
+ * Group: advanced
+ *
+ * @param maxBufferSize the value to set
+ * @return the dsl builder
+ */
+ default AdvancedMllpEndpointConsumerBuilder maxBufferSize(
+ String maxBufferSize) {
+ doSetProperty("maxBufferSize", maxBufferSize);
+ return this;
+ }
+ /**
+ * Minimum buffer size used when receiving or sending data over the
+ * wire.
+ *
+ * The option is a: <code>int</code> type.
+ *
+ * Default: 2048
+ * Group: advanced
+ *
+ * @param minBufferSize the value to set
+ * @return the dsl builder
+ */
+ default AdvancedMllpEndpointConsumerBuilder minBufferSize(
+ int minBufferSize) {
+ doSetProperty("minBufferSize", minBufferSize);
+ return this;
+ }
+ /**
+ * Minimum buffer size used when receiving or sending data over the
+ * wire.
+ *
+ * The option will be converted to a <code>int</code> type.
+ *
+ * Default: 2048
+ * Group: advanced
+ *
+ * @param minBufferSize the value to set
+ * @return the dsl builder
+ */
+ default AdvancedMllpEndpointConsumerBuilder minBufferSize(
+ String minBufferSize) {
+ doSetProperty("minBufferSize", minBufferSize);
+ return this;
+ }
/**
* The SO_TIMEOUT value (in milliseconds) used after the start of an
* MLLP frame has been received.
@@ -1201,6 +1269,74 @@ public interface MllpEndpointBuilderFactory {
doSetProperty("lazyStartProducer", lazyStartProducer);
return this;
}
+ /**
+ * Maximum buffer size used when receiving or sending data over the
+ * wire.
+ *
+ * The option is a: <code>int</code> type.
+ *
+ * Default: 1073741824
+ * Group: advanced
+ *
+ * @param maxBufferSize the value to set
+ * @return the dsl builder
+ */
+ default AdvancedMllpEndpointProducerBuilder maxBufferSize(
+ int maxBufferSize) {
+ doSetProperty("maxBufferSize", maxBufferSize);
+ return this;
+ }
+ /**
+ * Maximum buffer size used when receiving or sending data over the
+ * wire.
+ *
+ * The option will be converted to a <code>int</code> type.
+ *
+ * Default: 1073741824
+ * Group: advanced
+ *
+ * @param maxBufferSize the value to set
+ * @return the dsl builder
+ */
+ default AdvancedMllpEndpointProducerBuilder maxBufferSize(
+ String maxBufferSize) {
+ doSetProperty("maxBufferSize", maxBufferSize);
+ return this;
+ }
+ /**
+ * Minimum buffer size used when receiving or sending data over the
+ * wire.
+ *
+ * The option is a: <code>int</code> type.
+ *
+ * Default: 2048
+ * Group: advanced
+ *
+ * @param minBufferSize the value to set
+ * @return the dsl builder
+ */
+ default AdvancedMllpEndpointProducerBuilder minBufferSize(
+ int minBufferSize) {
+ doSetProperty("minBufferSize", minBufferSize);
+ return this;
+ }
+ /**
+ * Minimum buffer size used when receiving or sending data over the
+ * wire.
+ *
+ * The option will be converted to a <code>int</code> type.
+ *
+ * Default: 2048
+ * Group: advanced
+ *
+ * @param minBufferSize the value to set
+ * @return the dsl builder
+ */
+ default AdvancedMllpEndpointProducerBuilder minBufferSize(
+ String minBufferSize) {
+ doSetProperty("minBufferSize", minBufferSize);
+ return this;
+ }
/**
* The SO_TIMEOUT value (in milliseconds) used after the start of an
* MLLP frame has been received.
@@ -1596,6 +1732,70 @@ public interface MllpEndpointBuilderFactory {
default MllpEndpointBuilder basic() {
return (MllpEndpointBuilder) this;
}
+ /**
+ * Maximum buffer size used when receiving or sending data over the
+ * wire.
+ *
+ * The option is a: <code>int</code> type.
+ *
+ * Default: 1073741824
+ * Group: advanced
+ *
+ * @param maxBufferSize the value to set
+ * @return the dsl builder
+ */
+ default AdvancedMllpEndpointBuilder maxBufferSize(int maxBufferSize) {
+ doSetProperty("maxBufferSize", maxBufferSize);
+ return this;
+ }
+ /**
+ * Maximum buffer size used when receiving or sending data over the
+ * wire.
+ *
+ * The option will be converted to a <code>int</code> type.
+ *
+ * Default: 1073741824
+ * Group: advanced
+ *
+ * @param maxBufferSize the value to set
+ * @return the dsl builder
+ */
+ default AdvancedMllpEndpointBuilder maxBufferSize(String
maxBufferSize) {
+ doSetProperty("maxBufferSize", maxBufferSize);
+ return this;
+ }
+ /**
+ * Minimum buffer size used when receiving or sending data over the
+ * wire.
+ *
+ * The option is a: <code>int</code> type.
+ *
+ * Default: 2048
+ * Group: advanced
+ *
+ * @param minBufferSize the value to set
+ * @return the dsl builder
+ */
+ default AdvancedMllpEndpointBuilder minBufferSize(int minBufferSize) {
+ doSetProperty("minBufferSize", minBufferSize);
+ return this;
+ }
+ /**
+ * Minimum buffer size used when receiving or sending data over the
+ * wire.
+ *
+ * The option will be converted to a <code>int</code> type.
+ *
+ * Default: 2048
+ * Group: advanced
+ *
+ * @param minBufferSize the value to set
+ * @return the dsl builder
+ */
+ default AdvancedMllpEndpointBuilder minBufferSize(String
minBufferSize) {
+ doSetProperty("minBufferSize", minBufferSize);
+ return this;
+ }
/**
* The SO_TIMEOUT value (in milliseconds) used after the start of an
* MLLP frame has been received.