Не могу добавить аннотацию «javax.ws.rs.core.Context» с верблюжьим планом на моем CXF Rest Server (cxf: rsServer) - PullRequest
0 голосов
/ 23 сентября 2019

Оригинальная проблема здесь: https://issues.apache.org/jira/browse/CXF-8119#

У меня есть сборка проекта REST Service для Red Hat Fuse.

это простая настройка службы отдыха с «планом».xml "и" cxf: rsServer ", и это прекрасно работает.

Но мне нужно использовать аннотацию @Context для javax.ws.rs, и я не могу найти способ динамически внедрить @Контекст моего класса Java.

Полный проект для проверки проблемы можно найти здесь:

https://github.com/p4535992/bug-load-context-annotation-blueprint

Моя цель - установить значение поля;

@javax.ws.rs.core.Context
public javax.ws.rs.core.HttpHeaders httpHeaders;

Другая странная ошибка, если я вызываю метод:

    @GET
    @Path("/ping")
    @Produces(MediaType.APPLICATION_JSON)
    @WebMethod(operationName = "ping")
    @WebResult(name = "Response")
    @ApiResponses(value = { 
            @ApiResponse(code = 200, message = "Success") ,
            @ApiResponse(code = 500, message = "Error") 
        }
    )
    @ApiOperation( "Get operation with Response and @Default value")
    public Response ping() {
        logger.info("PING SIGNATURE SERVICE");
        return Response.ok().entity("PING SIGNATURE SERVICE").build();
    }
}

, это работает просто отлично, но если я вызываю это (я просто добавляю параметр @Context HttpHeaders httpHeaders наметод):

 @GET
 @Path("/ping")
 @Produces(MediaType.APPLICATION_JSON)
 @WebMethod(operationName = "ping")
 @WebResult(name = "Response")
 @ApiResponses(value =

{ @ApiResponse(code = 200, message = "Success") , @ApiResponse(code = 500, message = "Error") }

)
 @ApiOperation( "Get operation with Response and @Default value")
 public Response ping(@Context HttpHeaders httpHeaders)

{ logger.info("PING SIGNATURE SERVICE"); return Response.ok().entity("PING SIGNATURE SERVICE").build(); }

}

я получаю эту ошибку:

415 Error: Unsupported Media Type

В документации говорится что-то об атрибуте "spreadateContexts" для true, но, похоже, ничего не делают:

 <from id="myRestSereer" uri="cxfrs:bean:myRestSereer?performInvocation=true&amp;bindingStyle=SimpleConsumer&amp;propagateContexts=true"/>

ДРУГОЙ пример, я не могу понять, первый метод вводится с успехом, второй дает мне «415Ошибка: неподдерживаемый тип носителя ":


    /**
     * THIS WORK
     */
    @GET
    @Path("/getheader")
    public Response getHeaderDetails(
            @HeaderParam("User-Agent") String userAgent,
            @HeaderParam("Content-Type") String contentType,
            @HeaderParam("Accept") String accept
            ) {

        String header = "User-Agent: " + userAgent +
                "\nContent-Type: " + contentType +
                "\nAccept: " + accept;
        return Response.status(200).entity(header).build();
    }

    /**
     * THIS NOT WORK error "415 Error: Unsupported Media Type"
     */
    @GET
    @Path("/getallheader")
    public Response getAllHeader(@Context HttpHeaders httpHeaders) {

        // local variables
        StringBuffer stringBuffer = new StringBuffer();
        String headerValue = "";
        for(String header : httpHeaders.getRequestHeaders().keySet()) {
            headerValue = httpHeaders.getRequestHeader(header).get(0);
            stringBuffer.append(header + ": " + headerValue + "\n");
        }
        logger.info(stringBuffer.toString());
        return Response.status(200).entity(stringBuffer.toString()).build();
    }

Кто-нибудь знает, что я делаю неправильно с Camel-Blueprint?

...