[
https://issues.apache.org/jira/browse/CXF-8349?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
KimJohn Quinn updated CXF-8349:
-------------------------------
Description:
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.{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...
was:
It looks like we have similar/continuing issues as originally outlined in
[CXF-8022|https://issues.apache.org/jira/browse/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.{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 CXF08022):*
{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...
> 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
> * Jackson
> 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.{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)