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

Я хочу включить сжатие http для моего jax-ws webservice. я узнал, что мне нужно сделать это с помощью специальной handlerchain, которая может модифицировать 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);
</handler>

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

1 ответ

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

Если ваш фактический вариант использования такой, как указано выше, его легко исправить, просто создав() 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");
</handler>

licensed under cc by-sa 3.0 with attribution.