You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis1-java-user@axis.apache.org by Pasquale Imbemba <p....@gmail.com> on 2010/05/01 15:53:26 UTC

Custom SOAP message Handler

Hi,

I'm developing a webservice client with Java. I'd like to use a Handler to
intercept the
SOAP requests the client makes for logging purposes.
I need to have this done by code - no xml configurations. I'm using
axis-1.4.

So far, I got to this point:
I have a class (SpecialHandler.java) that extends
javax.xml.rpc.handler.GenericHandler.
This class implements all necessary inherited methods from the abstract
class.
There is no logic yet, I just do sysouts in every method and put a
breakpoint on them,
to see if it enters any of these.

I then have a class (WSUtils.java) with a method that returns a service upon
which I consume the remote method:
<code>
1) InterService is = null;
2) try {
3) WSLocator servLocator = new WSLocator();
4) servLocator.setWSEndpointAddress(endpointURL);
5) HandlerRegistry hr = servLocator.getHandlerRegistry();
6) QName portName = new QName(endpointURL, remMethodName);
7) List handlerChain = hr.getHandlerChain(portName);
8) HandlerInfo hi = new HandlerInfo();
9) hi.setHandlerClass(SpecialHandler.class);
10) handlerChain.add(hi);
11) hr.setHandlerChain(portName, handlerChain);
12) is = servLocator.getWSRemoteService();
13) WSUtils.addAuthHeader((Stub) is, user, pwd, remMethodName, log);
</code>

What I do is: I retrieve the handlerRegistry from the serviceLocator, create
a new
QName with valid endpointURL and remMethodName (they're passed to this
method), retrieve a
list of handlerchains with that QName, create a new HandlerInfo, set it with
the class with
my handler logic, add it to the list and set the list back to the handler
registry. Line 13) is just to add an auth header to the request.

I presume that everytime a "request" event is created, thread execution
should stop on the handleRequest method
of the SpecialHandler.class, but it doesn't. It executes the call of the
remote method however (i.e. it sends a request indeed).

In debug mode, I see that the is (i.e. the service) has indeed the
handlerregistry set (with my SpecialHandler).

Am I missing something (crucial)?

Thanks in advance,
~pasquale