Как изменить заголовки HTTP для ответа JAX-WS в CXF?

Я работал над созданием веб-сервисов CXF, которые работают за прокси-сервером безопасности, который запрашивает базовую аутентификацию HTTP перед вызовом сервиса. Эти сервисы взаимодействуют между собой и требуют аутентификации как для запроса, так и для ответа.

До сих пор я был в состоянии установить базовую аутентификацию HTTP через HTTPConduit для запроса следующим образом:

    Client client = ClientProxy.getClient(port);
    HTTPConduit conduit = (HTTPConduit) client.getConduit();
    AuthorizationPolicy authorizationPolicy = new AuthorizationPolicy();
    authorizationPolicy.setUserName(username);
    authorizationPolicy.setPassword(password);
    authorizationPolicy.setAuthorizationType("Basic");
    conduit.setAuthorization(authorizationPolicy);

Метод выше вызывается при каждом вызове метода службы, и яполучать правильные входящие сообщения в виде

INFO: Inbound Message
----------------------------
ID: 1
Address: http://someURL/someService?wsdl
Encoding: UTF-8
Http-Method: POST
Content-Type: text/xml; charset=UTF-8
Headers: {Accept=[*/*], Authorization=[Basic {TOKEN}], 
                cache-control=[no-cache], connection=[keep-alive], 
                Content-Length=[735], content-type=[text/xml; charset=UTF-8], 
                pragma=[no-cache], ...}
Payload: ...
--------------------------------------

Ответ, однако, нет содержит необходимые заголовки

INFO: Outbound Message
---------------------------
ID: 2
Encoding: UTF-8
Content-Type: text/xml
Headers: {}
Payload: 

Ответы на вопрос(1)

Решение Вопроса

Одним из подходов будет созданиеCXF перехватчик.

public class BasicAuthOutInterceptor extends AbstractPhaseInterceptor {

    public BasicAuthOutInterceptor() {
        super(Phase.PRE_STREAM);
    }

    @Override
    public void handleMessage(Message message) throws Fault {
        String token = "basic auth token";

        @SuppressWarnings("unchecked")
        Map headers = (Map) message
                .get(Message.PROTOCOL_HEADERS);
        if (headers == null) {
            headers = new TreeMap(
                    String.CASE_INSENSITIVE_ORDER);
            message.put(Message.PROTOCOL_HEADERS, headers);
        }

        headers.put("Authentication", Arrays.asList("Basic "+ token));
    }

}

и зарегистрировать его как перехватчик out и outFault.

    

Ваш ответ на вопрос