You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2023/06/19 07:12:20 UTC

[camel] branch main updated: Escape OPTIONS from ambiguous path exception (#10428)

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

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


The following commit(s) were added to refs/heads/main by this push:
     new bff054e00a5 Escape OPTIONS from ambiguous path exception (#10428)
bff054e00a5 is described below

commit bff054e00a5b13657752ea67a0a994b4a26cffb6
Author: EvanMi <43...@users.noreply.github.com>
AuthorDate: Mon Jun 19 15:12:14 2023 +0800

    Escape OPTIONS from ambiguous path exception (#10428)
    
    * 1. throw exception when duplicate servlet path occur in create stage.
    2. throw exception when ambiguous path occur in rest requesting stage.
    
    * and license
    
    * and license
    
    * rollback wrong commit file
    
    * format the code with camel code formatter
    
    * fix bug in PR https://github.com/apache/camel/pull/10400
    
    * follow the style
    
    * escape OPTIONS from ambiguous path exception
    
    * rename method
    
    ---------
    
    Co-authored-by: mipengcheng3 <mi...@jd.com>
---
 .../apache/camel/support/RestConsumerContextPathMatcher.java | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/core/camel-support/src/main/java/org/apache/camel/support/RestConsumerContextPathMatcher.java b/core/camel-support/src/main/java/org/apache/camel/support/RestConsumerContextPathMatcher.java
index e096355a5d8..76b74b4fd33 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/RestConsumerContextPathMatcher.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/RestConsumerContextPathMatcher.java
@@ -196,7 +196,7 @@ public final class RestConsumerContextPathMatcher {
             OptionalInt min = pathMap.keySet().stream().mapToInt(Integer::intValue).min();
             if (min.isPresent()) {
                 List<ConsumerPath> bestConsumerPaths = pathMap.get(min.getAsInt());
-                if (bestConsumerPaths.size() > 1) {
+                if (bestConsumerPaths.size() > 1 && !canBeAmbiguous(requestMethod, requestMethod)) {
                     String exceptionMsg = "Ambiguous paths " + bestConsumerPaths.stream().map(ConsumerPath::getConsumerPath)
                             .collect(Collectors.joining(",")) + " for request path " + requestPath;
                     throw new IllegalStateException(exceptionMsg);
@@ -218,6 +218,16 @@ public final class RestConsumerContextPathMatcher {
         return answer;
     }
 
+    /**
+     *
+     * @param  requestMethod The request method
+     * @param  requestPath   The request path
+     * @return               if the request method and path can escape from the ambiguous exception
+     */
+    private static boolean canBeAmbiguous(String requestMethod, String requestPath) {
+        return requestMethod.equalsIgnoreCase("options");
+    }
+
     /**
      * Matches the given request HTTP method with the configured HTTP method of the consumer.
      *