JAX-WS: определить цепочку обработчиков на стороне сервера в коде, а не во внешнем xml

я хочу включить сжатие http для моего веб-сервиса jax-ws. я узнал, что мне нужно сделать это с помощью пользовательской цепочки обработчиков, которая может изменять http-заголовки.

все учебники, которые я нашел, ссылаются на аннотацию @HandlerChain, которая указывает на xml-файл конфигурации цепочки обработчиков, но моя проблема в том, что мой веб-сервис должен быть как можно более легким, поэтому я не могу определить свою цепочку обработчиков во внешнем xml-файле.

я пробовал следующее, но не удалось:

        final Endpoint ep = Endpoint.publish("http://localhost:8878/mywebservice",
                new WebserviceImpl() );
        final Binding binding = ep.getBinding();
        final List<Handler> handlerChain = binding.getHandlerChain();
        handlerChain.add(new MySuperbSOAPHandler());
        binding.setHandlerChain(handlerChain);

Кто-нибудь знает как это сделать? это вообще возможно?


person krinklesaurus    schedule 24.01.2012    source источник


Ответы (1)


Похоже, вы не можете изменить цепочку обработчиков, когда служба уже опубликована.

Если ваш фактический вариант использования такой же, как указано выше, это легко исправить, просто создав() и затем опубликовав().

    final Endpoint ep = Endpoint.create(new WebserviceImpl() );
    final Binding binding = ep.getBinding();
    final List<Handler> handlerChain = binding.getHandlerChain();
    handlerChain.add(new MySuperbSOAPHandler());
    binding.setHandlerChain(handlerChain);
    ep.publish("http://localhost:8878/mywebservice");
person Derek Dean    schedule 28.02.2012
comment
еще больше сбивает с толку тот факт, что - если вы добавите обработчик после публикации - список getBinding().getHandlerChain() действительно содержит новый обработчик, но он не используется. - person Yuri; 08.04.2013