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

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

Hello Andy.

I was talking with my team about your suggested patch above. 

The suggestion is clever but if you feel the way CXF handles it now is the 
"proper" way vs. the Spring approach we are fine with leaving it as and not 
introducing unnecessary work for a one-off edge case. 

The suggestion would solve the issue providing the first element is the 
exception but, as it is a flux, it is likely one of the later elements could 
put us back in the same boat anyhow.

As of now, for us, the only implication is the exception itself and we can work 
around it.

The Mono hanging is probably one we would want to fix as that is quite possible 
(how we never caught that in our test cases is beyond me) and would impact 
usage.

Thanks.

> 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
>            Priority: Critical
>
> 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)

Reply via email to