JAX-RS вызывает исключение URISyntaxException в Liberty

#jax-rs #websphere-liberty #open-liberty

#jax-rs #websphere-liberty #открыть-liberty

Вопрос:

У меня есть приложение JAX-RS, которое отлично работает на Liberty 19.0.0.10. Проблема, с которой я сталкиваюсь, по-видимому, связана с ошибкой в среде выполнения Liberty, когда она вызывает исключение URISyntaxException, если @PathParam имеет обратную косую черту. Проблема была обнаружена во время сканирования кода безопасности.

  1. Я попытался решить эту проблему с помощью предварительного сопоставления ContainerRequestFilter, но я вижу то же исключение, даже если оно предположительно обрабатывается перед сопоставлением любого ресурса.
  2. Я пытался использовать пользовательский обработчик исключений, но все равно вижу ту же ошибку.
  3. Очевидно, что попытка перехватить исключение внутри функции getinfo не работает, поскольку ошибка возникает перед входом в саму функцию.
  4. Очевидно, что использование аннотации @Encoded не имеет никакого значения.
 [ERROR   ] SRVE0777E: Exception thrown by application class 'java.net.URI.create:863'
java.lang.IllegalArgumentException: Illegal character in path at index 80: https://hotsauce/somepath/uuid/a=dg=bc
        at java.net.URI.create(URI.java:863)
        at com.ibm.ws.jaxrs20.endpoint.AbstractJaxRsWebEndpoint.getBaseURL(AbstractJaxRsWebEndpoint.java:245)
        at [internal classes]
Caused by: java.net.URISyntaxException: Illegal character in path at index 80: https://hotsauce/somepath/uuid/a=dg=bc
        at java.net.URI$Parser.fail(URI.java:2859)
        at java.net.URI$Parser.checkChars(URI.java:3032)
        at java.net.URI$Parser.parseHierarchical(URI.java:3116)
        at java.net.URI$Parser.parse(URI.java:3064)
        at java.net.URI.<init>(URI.java:599)
        at java.net.URI.create(URI.java:861)
        ... 2 more

[ERROR   ] SRVE0315E: An exception occurred: java.lang.Throwable: java.lang.IllegalArgumentException: Illegal character in path at index 80: https://hotsauce/somepath/uuid/a=dg=bc
        at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:5051)
        at [internal classes]
Caused by: java.lang.IllegalArgumentException: Illegal character in path at index 80: https://hotsauce/somepath/uuid/a=dg=bc
        at java.net.URI.create(URI.java:863)
        at com.ibm.ws.jaxrs20.endpoint.AbstractJaxRsWebEndpoint.getBaseURL(AbstractJaxRsWebEndpoint.java:245)
        ... 1 more
Caused by: java.net.URISyntaxException: Illegal character in path at index 80: https://hotsauce/somepath/uuid/a=dg=bc
        at java.net.URI$Parser.fail(URI.java:2859)
        at java.net.URI$Parser.checkChars(URI.java:3032)
        at java.net.URI$Parser.parseHierarchical(URI.java:3116)
        at java.net.URI$Parser.parse(URI.java:3064)
        at java.net.URI.<init>(URI.java:599)
        at java.net.URI.create(URI.java:861)
        ... 2 more

  

Это пример кода

 @Path("/somepath")
public class MyClass {
    
    @GET
    @Path("/uuid/{UUID}")
    @Produces(MediaType.APPLICATION_JSON)
    public Response getInfo(@PathParam("UUID") String uuid) {
       try {
          // request processing goes here
       } catch (Exception e){
          // URISyntaxException can't be handled here.
       }
    }
}
  

Комментарии:

1. Можете ли вы предоставить полную трассировку стека, включая любые «вызванные» строфы? В частности, я хотел бы видеть части кода Liberty или CXF в стеке.

2. @AndyMcCright Спасибо, что изучили это. Я обновил трассировку стека, чтобы включить все исключение.

Ответ №1:

Этот стек возникает в 19.0.0.10, но должен быть исправлен в более поздних версиях — исправление было сделано на таймфрейме 19.0.0.11-12, поэтому, если вы сможете обновиться до версии 20.0.0.1 или выше, это должно решить эту проблему.

Комментарии:

1. Спасибо @Andy McCright. Обновление до 20.0.0.10 действительно устранило проблему.