[jira] [Commented] (CXF-8349) Flux Returns Mixed Response on Errors and Mono Hangs when Empty

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[jira] [Commented] (CXF-8349) Flux Returns Mixed Response on Errors and Mono Hangs when Empty

Andriy Redko (Jira)

    [ https://issues.apache.org/jira/browse/CXF-8349?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17211950#comment-17211950 ]

KimJohn Quinn commented on CXF-8349:
------------------------------------

Hey Andy.

You bet!  I will test it this week.

Thanks a ton.

> Flux Returns Mixed Response on Errors and Mono Hangs when Empty
> ---------------------------------------------------------------
>
>                 Key: CXF-8349
>                 URL: https://issues.apache.org/jira/browse/CXF-8349
>             Project: CXF
>          Issue Type: Bug
>          Components: JAX-RS
>    Affects Versions: 3.4.0
>         Environment: *Versions:*
>  * Spring Boot 2.3.4.RELEASE
>  * Apache CXF 3.4.0 (using the new BOM + reactor extension)
>  * Undertow (latest from spring boot bom)
>  * Jackson (latest from spring boot bom)
>  * JDK 11
> We use CXF instead of Spring for all Mono/Flux REST endpoints.  Outside of the error handling, everything works great.
>            Reporter: KimJohn Quinn
>            Assignee: Andriy Redko
>            Priority: Critical
>             Fix For: 3.5.0, 3.3.8, 3.4.1
>
>
> 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.
> {color:#de350b}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.{color}
> ----
> +{color:#0747a6}*Problem 1: Flux error returns mixed response*{color}+
> 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):*
> {code:java}
> @GET
>     @Path("/test3")
>     @Produces(APPLICATION_JSON)
>     @Consumes(APPLICATION_JSON)
>     public Flux<String> getError()
>     {
>         return Flux
>             .range(1, 5)
>             .flatMap(item ->
>                      {
>                          if (item <= 4)
>                          {
>                              return Mono.just("item: " + item);
>                          }
>                          else
>                          {
>                              System.out.println("---Hitting exception");
>                              return error(new NotFoundException());
>                          }
>                      })
>             .onErrorMap(e -> new RuntimeException(e));
>     }
> {code}
>  *Returns this result (error):*
> {code:java}
>  [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)"
>     ]
> }{code}
> ----
> +{color:#0747a6}*Problem 2: Mono hangs returning empty*{color}+
> 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)
> {code:java}
>     @GET
>     @Path("/test1a")
>     @Produces(APPLICATION_JSON)
>     @Consumes(APPLICATION_JSON)
>     public Mono<Map> getMono()
>     {
>         return Mono.empty();
>     }
> {code}
> This will hang and not return a result.  Pausing it while debugging shows it holding up on a Thread parking...
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)