Reputation: 12003
I created an implementation of LoggingHandler
that implements SOAPHandler<SOAPMessageContext>
It should log whenever handleMessage
triggers (and it is never called in my case)
MyService service = new MyService();
MyServicePort port = service.getPortType();
now I try this:
BindingProvider bindingProvider = (BindingProvider)port;
bindingProvider.getBinding().getHandlerChain().add(new LoggingHandler());
I do not see any request / response xml though.
Can you suggest any solution? Maybe there's another way to see output and request XML?
Upvotes: 21
Views: 22398
Reputation: 6707
If anyone is wondering the 'why' of @EugeneP excellent answer.
In the Interface javax.xml.ws.Binding, there is the following comment.
/**
* Gets a copy of the handler chain for a protocol binding instance.
* If the returned chain is modified a call to
<code>setHandlerChain</code>
* is required to configure the binding instance with the new chain.
*
* @return java.util.List<Handler> Handler chain
*/
public java.util.List<javax.xml.ws.handler.Handler> getHandlerChain();
So the getHandlerChain() method returns a copy of the List not the list itself. So you have to use setHandlerChain to update the actual List.
Upvotes: 2
Reputation: 7568
you can add a logger in you log4j.xml file :
<!-- Log WebService's inputs and outputs -->
<logger name="org.apache.cxf.interceptor">
<level value="INFO" />
<appender-ref ref="[YOUR_LOGGER]" />
</logger>
Upvotes: 3
Reputation: 12003
It starts working if you use this method:
binding.setHandlerChain(handlerList);
So, first initialize this list with
binding.getHandlerChain();
then add your element to the list and after all
setHandlerChain();
Upvotes: 28