JAX-WS:在代码中定义服务器端处理程序链,而不是在外部xml中定义

zer*_*gen 2 soap http jax-ws handler chain

我想为我的jax-ws webservice启用http压缩.我发现我必须使用可以修改http标头的自定义处理程序链.

我找到的所有教程都引用了注释@HandlerChain,指向处理程序链配置xml文件但我的问题是我的webservice必须尽可能轻量级,因此我无法在外部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);
Run Code Online (Sandbox Code Playgroud)

有谁知道如何做到这一点?它甚至可能吗?

小智 6

在服务已经发布时,您似乎无法更改处理程序链.

如果您的实际用例如上所述,只需创建()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");
Run Code Online (Sandbox Code Playgroud)

  • 更令人困惑的是 - 如果你在发布后添加处理程序 - `getBinding().getHandlerChain()`List**包含新的Handler,但它没有被使用. (2认同)