[
https://issues.apache.org/jira/browse/CXF-8349?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17202940#comment-17202940
]
Andriy Redko commented on CXF-8349:
-----------------------------------
Hey [~kjq] ,
Yeah, it's been a while. You are obviously correct regarding the *#1* issue, I
recall this adjustment (should have gone over CXF-8022 comments first, sorry
for not doing that), we actually do have test case for it [1], just without
exception mapper, so as of now this is expected behavior but not necessarily
the correct one, I will be looking into these issues shortly. In the interim
term, the fact that correct status code is returned would help you (I believe
it should be sufficient to distinguish success/failure)?
PS: Thanks a lot for reporting Jackson serialization issue, it seems to be
regression in 2.11.2, should be fixed in 2.11.3 (or you may downgrade to 2.11.1
as well, should be good).
Thanks!
[1]
https://github.com/apache/cxf/blob/master/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactor/FluxService.java#L66
> 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: Blocker
>
> 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)