Uploaded image for project: 'RESTEasy'
  1. RESTEasy
  2. RESTEASY-3357

Endpoints return a status code of 500 if Accept header has badly formatted value

XMLWordPrintable

    • Icon: Enhancement Enhancement
    • Resolution: Obsolete
    • Icon: Minor Minor
    • None
    • None
    • Core
    • None

      When processing the `Accept` header the library checks that the value is in the correct format. In particular it checks if there is a `/` character and if not it appears that the code will only allow an `*`.

      The issue is that if the value does not meet that criteria an `IllegalArgumentException` is thrown and is not caught anywhere meaning that the endpoint returns a 500 error. I would assume that a 4xx code, specifically a 406 would be more appropriate. An example of the stack trace received is show below.

      I'd be happy to have a look at this but wanted to check that this behaviour wasn't on purpose and required for some reason.

       

      java.lang.IllegalArgumentException: Failed to parse media type hdfgh
      at org.jboss.resteasy.reactive.common.headers.MediaTypeHeaderDelegate.internalParse(MediaTypeHeaderDelegate.java:77)
      at org.jboss.resteasy.reactive.common.headers.MediaTypeHeaderDelegate.parse(MediaTypeHeaderDelegate.java:53)
      at org.jboss.resteasy.reactive.common.headers.MediaTypeHeaderDelegate.fromString(MediaTypeHeaderDelegate.java:125)
      at org.jboss.resteasy.reactive.common.headers.MediaTypeHeaderDelegate.fromString(MediaTypeHeaderDelegate.java:15)
      at javax.ws.rs.core.MediaType.valueOf(MediaType.java:172)
      at org.jboss.resteasy.reactive.server.handlers.ClassRoutingHandler.acceptHeaderMatches(ClassRoutingHandler.java:159)
      at org.jboss.resteasy.reactive.server.handlers.ClassRoutingHandler.handle(ClassRoutingHandler.java:129)
      at io.quarkus.resteasy.reactive.server.runtime.QuarkusResteasyReactiveRequestContext.invokeHandler(QuarkusResteasyReactiveRequestContext.java:96)
      at org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext.run(AbstractResteasyReactiveContext.java:145)
      at org.jboss.resteasy.reactive.server.handlers.RestInitialHandler.beginProcessing(RestInitialHandler.java:48)
      at org.jboss.resteasy.reactive.server.vertx.ResteasyReactiveVertxHandler.handle(ResteasyReactiveVertxHandler.java:23)
      at org.jboss.resteasy.reactive.server.vertx.ResteasyReactiveVertxHandler.handle(ResteasyReactiveVertxHandler.java:10)
      at io.vertx.ext.web.impl.RouteState.handleContext(RouteState.java:1284)
      at io.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:177)
      at io.vertx.ext.web.impl.RoutingContextImpl.next(RoutingContextImpl.java:141)
      at io.quarkus.vertx.http.runtime.StaticResourcesRecorder$2.handle(StaticResourcesRecorder.java:101)
      at io.quarkus.vertx.http.runtime.StaticResourcesRecorder$2.handle(StaticResourcesRecorder.java:87)
      at io.vertx.ext.web.impl.RouteState.handleContext(RouteState.java:1284)
      at io.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:140)
      at io.vertx.ext.web.impl.RoutingContextImpl.next(RoutingContextImpl.java:141)
      at io.vertx.ext.web.handler.impl.StaticHandlerImpl.lambda$sendStatic$1(StaticHandlerImpl.java:290)
      at io.vertx.core.impl.future.FutureImpl$3.onSuccess(FutureImpl.java:141)
      at io.vertx.core.impl.future.FutureBase.lambda$emitSuccess$0(FutureBase.java:54)
      at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174)
      at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167)
      at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470)
      at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569)
      at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
      at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
      at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
      at java.base/java.lang.Thread.run(Thread.java:833)

       

       

        1. spring-resteasy.war
          5.47 MB
          Katarína Hermanová
        2. server.log
          8 kB
          Katarína Hermanová

              kathermanova Katarína Hermanová
              brianc@kahoot.com Brian Cullen (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

                Created:
                Updated:
                Resolved: