[
https://issues.apache.org/jira/browse/CXF-8349?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17202909#comment-17202909
]
Andriy Redko commented on CXF-8349:
-----------------------------------
Hey [~kjq],
Thanks for the report, let's try to look at the issues one by one.
* Flux "error" returns a mixed response
You have the elements emitted before the error happened, I think this
part is fine and expected. Also, you do have (or should have) the correct
response code, in this case, it should be *404* (so you could check if the
response was successful or not). Now, as you also noticed, the mapped exception
is returned to you as one of the elements in response payload (since the
response is streamed). What are your expectations in this case? I think CXF
does the right thing here.
* Mono that returns empty seems to hang on thread and never return.
Clearly a bug.
Thanks.
Best Regards,
Andriy Redko
> 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)