JAX-WS: определить цепочку обработчиков на стороне сервера в коде, а не во внешнем XML - PullRequest
2 голосов
/ 24 января 2012

Я хочу включить сжатие 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);

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

1 Ответ

6 голосов
/ 28 февраля 2012

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

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

    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");
...