Hi,


I define two template paths with the following implementation:


public class UndertowTwoPathVariablesApplication {

  private static final Logger LOGGER = LoggerFactory.getLogger(UndertowTwoPathVariablesApplication.class);

  public static void main(final String[] args) {

    Undertow.builder()
      .addHttpListener(8080, "localhost")
      .setHandler(
          Handlers.routing()
            .get("/api/v1/orders/{orderId}/items/", (exchange) -> {
                LOGGER.info("The path template defined is '/api/v1/orders/{orderId}/items/'");
                LOGGER.info("The request URI '{}'", exchange.getRequestURI());
                exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
                exchange.setStatusCode(StatusCodes.OK)
                        .getResponseSender().send("Retrieve all Items of the Order '"
                                                  + exchange.getQueryParameters().get("orderId").getLast() + "'");
              })
            .get("/api/v1/orders/{orderId}/items/{itemId}", (exchange) -> {
                LOGGER.info("The path template defined is '/api/v1/orders/{orderId}/items/{itemId}'");
                LOGGER.info("The request URI '{}'", exchange.getRequestURI());
                exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
                exchange.setStatusCode(StatusCodes.OK)
                        .getResponseSender().send(
                            "Retrieve the Item '" + exchange.getQueryParameters().get("itemId").getLast()
                            + "' of the Order '" + exchange.getQueryParameters().get("orderId").getLast() + "'");
              }))
      .build()
      .start();

  }

}

And using the version 2.0.0.Beta1 of undertow-core I can not enter to the first Handler defined.


boggard@xiuhcoatl:~$ curl -v 'http://localhost:8080/api/v1/orders/12345/items'
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET /api/v1/orders/12345/items HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.58.0
> Accept: */*
>
< HTTP/1.1 404 Not Found
< Connection: keep-alive
< Content-Length: 0
< Date: Fri, 02 Feb 2018 08:08:48 GMT
<
* Connection #0 to host localhost left intact

boggard@xiuhcoatl:~$ curl -v 'http://localhost:8080/api/v1/orders/12345/items/'
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET /api/v1/orders/12345/items/ HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.58.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Connection: keep-alive
< Content-Type: text/plain
< Content-Length: 41
< Date: Fri, 02 Feb 2018 08:09:15 GMT
<
* Connection #0 to host localhost left intact
Retrieve the Item '' of the Order '12345'

boggard@xiuhcoatl:~$ curl -v 'http://localhost:8080/api/v1/orders/12345/items/'
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET /api/v1/orders/12345/items/ HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.58.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Connection: keep-alive
< Content-Type: text/plain
< Content-Length: 41
< Date: Fri, 02 Feb 2018 08:09:15 GMT
<
* Connection #0 to host localhost left intact
Retrieve the Item '' of the Order '12345'


This not happen when the path have just one path variable. I create the repo https://github.com/b0gg4rd/undertow-path-variable with the two implementations.


Best Regards


Fernando Cruz