[ 
https://issues.apache.org/jira/browse/CAMEL-23249?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Federico Mariani reassigned CAMEL-23249:
----------------------------------------

    Assignee: Federico Mariani

> CXF RS Rest service loses content-type with stream caching enabled
> ------------------------------------------------------------------
>
>                 Key: CAMEL-23249
>                 URL: https://issues.apache.org/jira/browse/CAMEL-23249
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-cxfrs
>    Affects Versions: 4.14.5
>            Reporter: Dave Riseley
>            Assignee: Federico Mariani
>            Priority: Minor
>
> When Camel is used to host a CXF JaxRS rest service and stream caching is 
> enabled, the content-type is lost from the jaxrs Response object.  
> This has happened since CAMEL-22414 implemented support for stream caching 
> jakarta.ws.rs.core.Response objects.
> This can be demonstrated with the following test:
> {code:java}
>     @Autowired
>     ProducerTemplate producerTemplate;
>     @Configuration
>     static class TestConfig {
>         @Bean
>         SpringJAXRSServerFactoryBean restServer(Bus bus) {
>             SpringJAXRSServerFactoryBean restServer = new 
> SpringJAXRSServerFactoryBean();
>             restServer.setBus(bus);
>             restServer.setAddress("http://localhost:8001/rs";);
>             restServer.setServiceClass(EchoService.class);
>             return restServer;
>         }
>         @Bean
>         EchoService echoService() {
>             return new EchoServiceImpl();
>         }
>         @Bean
>         RoutesBuilder echoRoute() {
>             return new RouteBuilder() {
>                 @Override
>                 public void configure() throws Exception {
>                     from("cxfrs:bean:restServer")
>                         .streamCache(true)
>                         .bean(EchoService.class)
>                         .log(LoggingLevel.INFO, "Logging body: ${body}");
>                 }
>             };
>         }
>     }
>     private interface EchoService {
>         @GET
>         @Path("/echoVariable")
>         public Response echoVariable(@QueryParam("say") String say);
>     }
>     private static class EchoServiceImpl implements EchoService {
>         @Override
>         public Response echoVariable(String say) {
>             return Response
>                 .status(Status.OK)
>                 .type(MediaType.APPLICATION_JSON)
>                 .entity("{ \"message\":\""+ say +"\" }")
>                 .build();
>         }
>     }
>     @Test
>     void testEchoVariable() {
>         Exchange responseExchange = 
> producerTemplate.send("http://localhost:8001/rs/echoVariable?throwExceptionOnFailure=false&say=hello";,
>  e -> {});
>         assertNull(responseExchange.getException());
>         assertEquals(200, 
> responseExchange.getMessage().getHeader(Exchange.HTTP_RESPONSE_CODE, 
> Integer.class));
>         assertEquals("application/json", 
> responseExchange.getMessage().getHeader(Exchange.CONTENT_TYPE, String.class));
>         assertEquals("{ \"message\":\"hello\" }", 
> responseExchange.getMessage().getBody(String.class));
>     }
> {code}
> This test fails with Camel 4.14.2 (or later) - the content type of 
> "application/octet-stream" is returned instead of the expected 
> "application/json".  It passes with Camel 4.14.1, or if stream caching is 
> disabled (".streamCache(false)") .
> A full reproducer is here, which can just be run with mvn clean install:
> https://github.com/driseley/cxf-responsecaching-test



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to