Как установить собственный заголовок ответа в CXF-RS Camel?

В настоящее время я пытаюсь установить один пользовательский заголовок в конечной точке CXF-RS на верблюде. Я хотел установить один заголовок с именем «приложения-клиент». Этот заголовок ответа будет использоваться потребителем остальной конечной точки.

Я попытался добавить класс DefaultCxfRsBinding.

<camel:route id="cxf-restful-routes">
    <camel:from uri="cxfrs:bean:cxf.restful.endpoint?binding=#CXFRestfulBindings" />
    <camel:to uri="direct:postJson" />
</camel:route>

Есть ли другой способ установить заголовок ответа?

Благодарю за вашу помощь..!!


person Ashish Mishra    schedule 04.05.2017    source источник


Ответы (2)


Я могу установить собственный заголовок в окончательном ответе. Я сделал это, добавив outInterceptor в CXFEndpoint. Я добавил AbstractPhaseInterceptor. Сначала я должен установить заголовок в CamelExchange на верблюжьем маршруте. Затем я установил то же самое для CXFExchange в #CXFRestfulBindings.populateCxfRsResponseFromExchange(), прочитав его из CamelExchange. Теперь этот заголовок будет доступен в CXFExchange, и его будет легко получить. Я прочитал этот заголовок в одном из перехватчиков, созданных путем расширения AbstractPhaseInterceptor. Затем я добавил этот заголовок в карту PROTOCOL_HEADERS.

Ниже приведен фрагмент кода,

public class OutResponseInterceptor extends AbstractPhaseInterceptor<Message>{

    public RestResponseInterceptor(String phase) {
        super(Phase.MARSHAL);
    }

    @Override
    public void handleMessage(Message message) throws Fault {
        try {
            @SuppressWarnings("unchecked")
            MultivaluedMap<String, Object> headers = (MetadataMap<String, Object>) message.get(Message.PROTOCOL_HEADERS);

            if (headers == null) {
                headers = new MetadataMap<String, Object>();
            }

            headers.putSingle("apps-client", (String) message.getExchange().get("apps-client"));
            message.put(Message.PROTOCOL_HEADERS, headers);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Спасибо..!!

person Ashish Mishra    schedule 09.05.2017

Вы пытались добавить этот заголовок в Exchange? Конечная точка добавит его в ответ HTTP.

<camel:route id="cxf-restful-routes">
    <camel:from uri="cxfrs:bean:cxf.restful.endpoint?binding=#CXFRestfulBindings" />
    <camel:setHeader headerName="apps-client">
        <constant>Your value here</constant> <!-- or use <simple> language -->
    </camel:setHeader>
    <camel:to uri="direct:postJson" />
</camel:route>
person Alessandro Da Rugna    schedule 05.05.2017
comment
Нет, это не сработало. По вашему предложению он будет установлен в CamelExchange, но не в заголовках протокола CXFExchange. - person Ashish Mishra; 03.06.2017