This is an automated email from the ASF dual-hosted git repository.

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 8e641b1fb10e0b5a5f10699a5964f76c464bfaa8
Author: Otavio Rodolfo Piske <[email protected]>
AuthorDate: Thu Nov 30 10:23:39 2023 -0300

    CAMEL-20163: cleanup parsing HTTP status ranges
---
 .../apache/camel/component/http/HttpProducer.java  | 26 ++++++++++++--------
 .../component/netty/http/NettyHttpProducer.java    | 15 ++++++++----
 .../org/apache/camel/support/http/HttpUtil.java    | 28 ++++++++++++++++++++++
 3 files changed, 54 insertions(+), 15 deletions(-)

diff --git 
a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java
 
b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java
index b4974b1c5e7..53c7d7d7c8c 100644
--- 
a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java
+++ 
b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java
@@ -54,6 +54,7 @@ import org.apache.camel.support.GZIPHelper;
 import org.apache.camel.support.MessageHelper;
 import org.apache.camel.support.ObjectHelper;
 import org.apache.camel.support.SynchronizationAdapter;
+import org.apache.camel.support.http.HttpUtil;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.StringHelper;
 import org.apache.camel.util.URISupport;
@@ -111,16 +112,7 @@ public class HttpProducer extends DefaultProducer {
         super.doInit();
 
         String range = getEndpoint().getOkStatusCodeRange();
-        if (!range.contains(",")) {
-            // default is 200-299 so lets optimize for this
-            if (range.contains("-")) {
-                minOkRange = Integer.parseInt(StringHelper.before(range, "-"));
-                maxOkRange = Integer.parseInt(StringHelper.after(range, "-"));
-            } else {
-                minOkRange = Integer.parseInt(range);
-                maxOkRange = minOkRange;
-            }
-        }
+        parseStatusRange(range);
 
         // optimize and build default url when there are no override headers
         String url = getEndpoint().getHttpUri().toASCIIString();
@@ -139,6 +131,20 @@ public class HttpProducer extends DefaultProducer {
         defaultHttpHost = URIUtils.extractHost(uri);
     }
 
+    private void parseStatusRange(String range) {
+        if (!range.contains(",")) {
+            if (!HttpUtil.parseStatusRange(range, this::setRanges)) {
+                minOkRange = Integer.parseInt(range);
+                maxOkRange = minOkRange;
+            }
+        }
+    }
+
+    private void setRanges(int minOkRange, int maxOkRange) {
+        this.minOkRange = minOkRange;
+        this.maxOkRange = maxOkRange;
+    }
+
     @Override
     public void process(Exchange exchange) throws Exception {
         boolean cookies = 
!getEndpoint().getComponent().isCookieManagementDisabled();
diff --git 
a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpProducer.java
 
b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpProducer.java
index 2c93e3ea2e0..1a635445a38 100644
--- 
a/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpProducer.java
+++ 
b/components/camel-netty-http/src/main/java/org/apache/camel/component/netty/http/NettyHttpProducer.java
@@ -56,18 +56,23 @@ public class NettyHttpProducer extends NettyProducer {
         super.doInit();
 
         String range = getEndpoint().getConfiguration().getOkStatusCodeRange();
+        parseStatusRange(range);
+    }
+
+    private void parseStatusRange(String range) {
         if (!range.contains(",")) {
-            // default is 200-299 so lets optimize for this
-            if (range.contains("-")) {
-                minOkRange = Integer.parseInt(StringHelper.before(range, "-"));
-                maxOkRange = Integer.parseInt(StringHelper.after(range, "-"));
-            } else {
+            if 
(!org.apache.camel.support.http.HttpUtil.parseStatusRange(range, 
this::setRanges)) {
                 minOkRange = Integer.parseInt(range);
                 maxOkRange = minOkRange;
             }
         }
     }
 
+    private void setRanges(int minOkRange, int maxOkRange) {
+        this.minOkRange = minOkRange;
+        this.maxOkRange = maxOkRange;
+    }
+
     @Override
     public NettyHttpEndpoint getEndpoint() {
         return (NettyHttpEndpoint) super.getEndpoint();
diff --git 
a/core/camel-support/src/main/java/org/apache/camel/support/http/HttpUtil.java 
b/core/camel-support/src/main/java/org/apache/camel/support/http/HttpUtil.java
index 6c0992e3448..dcb6a15fa76 100644
--- 
a/core/camel-support/src/main/java/org/apache/camel/support/http/HttpUtil.java
+++ 
b/core/camel-support/src/main/java/org/apache/camel/support/http/HttpUtil.java
@@ -19,6 +19,7 @@ package org.apache.camel.support.http;
 
 import java.util.Map;
 import java.util.Set;
+import java.util.function.BiConsumer;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
@@ -160,4 +161,31 @@ public final class HttpUtil {
         }
         return false;
     }
+
+    /**
+     * Parse a HTTP status range and passes the values to the consumer method
+     * @param range the HTTP status range in the format "XXX-YYY" (i.e.: 
200-299)
+     * @param consumer a consumer method to receive the parse ranges
+     * @return true if the range was parsed or false otherwise
+     */
+    public static boolean parseStatusRange(String range, BiConsumer<Integer, 
Integer> consumer) {
+        // default is 200-299 so lets optimize for this
+        if (range.contains("-")) {
+            final String minRangeStr = StringHelper.before(range, "-");
+            final String maxRangeStr = StringHelper.after(range, "-");
+
+            if (minRangeStr == null || maxRangeStr == null) {
+                return false;
+            }
+
+            final int minOkRange = Integer.parseInt(minRangeStr);
+            final int maxOkRange = Integer.parseInt(maxRangeStr);
+
+            consumer.accept(minOkRange, maxOkRange);
+
+            return true;
+        }
+
+        return false;
+    }
 }

Reply via email to