Uploaded image for project: 'CXF'
  1. CXF
  2. CXF-8349

Flux Returns Mixed Response on Errors and Mono Hangs when Empty



    • Type: Bug
    • Status: Resolved
    • Priority: Critical
    • Resolution: Fixed
    • Affects Version/s: 3.4.0
    • Fix Version/s: 3.3.8, 3.4.1, 3.2.15, 3.5.0
    • Component/s: JAX-RS
    • Labels:
    • Environment:


      It looks like we have similar/continuing issues as originally outlined in CXF-8022.

      Two issues I have are:

      • Flux "error" returns a mixed response
      • Mono that returns empty seems to hang on thread and never return.

      These are super important for us because it makes handling exceptions somewhat difficult (if there is a workaround that would be acceptable too as this is only with errors) and empty mono results, which can happen, unhandleable. We have a lot invested in using CXF as we start to move to Kamel and eventually Quarkus later and would not want to use Spring controllers.

      Problem 1: Flux error returns mixed response

      Using this test, when an exception is thrown from within a step in the stream the expectation is to get the error response only (handled by an ExceptionMapper).  Most cases this is true.

      This appears to happen only with a Flux and if the error is thrown before the last step in the chain (i.e. call a --> call b --> call c).  If there are multiple steps it appears the last one will return an error correctly, in the example call a and call b would return the mixed response where as call c returns the error correctly.

      Using this code (replica code in the original issue CXF-8022):

          public Flux<String> getError()
              return Flux
                  .range(1, 5)
                  .flatMap(item ->
                               if (item <= 4)
                                   return Mono.just("item: " + item);
                                   System.out.println("---Hitting exception");
                                   return error(new NotFoundException());
                  .onErrorMap(e -> new RuntimeException(e));

       Returns this result (error):

       [item: 1,item: 2,item: 3,item: 4
          "status": 404,
          "phrase": "Not Found",
          "message": "javax.ws.rs.NotFoundException: HTTP 404 Not Found",
          "path": "/projects/xxx/test3",
          "timestamp": 1601172421939,
          "trace": [
              "at aaa.bbb.project.services.ProjectResource.lambda$getError$0(ProjectResource.java:133)"

      Problem 2: Mono hangs returning empty

      Also, as a side node, I seem to have a similar problem with an empty Mono (whereas the ticket above the problem was in the Flux)

          public Mono<Map> getMono()
              return Mono.empty();

      This will hang and not return a result.  Pausing it while debugging shows it holding up on a Thread parking...



          Issue Links



              • Assignee:
                reta Andriy Redko
                kjq KimJohn Quinn
              • Votes:
                0 Vote for this issue
                2 Start watching this issue


                • Created: