This is just a follow up on what I found....

The OperationDesc in the MessageContext will be null when:

1) The deployed interface/impl has over loaded methods.
2) When the client envelope is well formed (ie SAX parser is
        happy) but the method the client is trying to invoke
        doesn't exist.

So I did find a problem where the method was over loaded and
that fixed one of my problem.... However, I still had intermittent
problems w/ the MessageContext.getOperation() returning null for
some calls... So i figured out this and it seems to be working...

=========== snip =====================================
String operationName = "";
 try {
    Iterator i = messageContext.getCurrentMessage().
        getSOAPEnvelope().getBody().getChildElements();
    while (i.hasNext()) {
        try {
          RPCElement o= (RPCElement) i.next();
          operationName = o.getMethodName();
          break;
        } catch (ClassCastException e) {
        }
    }
    if (operationName.equals("")) {
        throw new
          Exception("Invalid request.  Only RPC is supported.");
    }
 } catch (NullPointerException ne) {
        throw new Exception(
        "Problem getting child elements: " + ne.toString());
 } catch (SOAPException e) {
        throw new CallerIdException(e.toString());
 }
 System.out.println("operationName = " + operationName);
=========== snip =====================================

Hope this helps someone else...  I would still like to see
how others are getting the calling method from the MessageContext
object...

Cheers,
-- Kevin

Kevin Colussi wrote:
Hello,

I have been running Axis 1.1 for a while... With a handler
that calls messageContext.getOperation() to log the client
method request... The service runs in a WAS 5.1 env on AIX...

Out of the blue I start getting null pointers from the
handler... I traces it down this line:

public void invoke(MessageContext messageContext) throws AxisFault {
    ............
    String name = messageContext.getOperation().getName();
    ............
}

So I started searching.... Sure enough the getOperation() returns
null from an Axis test client and JMeter script... In the debugger
I can see the AxisServer.class and the msgContext in this line:

setCurrentMessageContext(msgContext);

whose operation is null.... huh?  There are other services deployed
in this same container that use the same handler just fine.....

The Axis JavaDoc says it's ok for the messageContext.getOperation() to
return null....  If that is the case how does the Axis servlet know
which method to call in the service class implementation?  Should I be
using something other than messageContext.getOperation() to get the
method the client is calling?

Thanks a ton for any advise....
-- Kevin


-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Kevin Colussi Volvo IT North America Senior Web Developer Telephone: 336-393-2178 Fax: 336-393-2300 E-mail: [EMAIL PROTECTED] Office Hours: 6:00am - 3:00pm ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Reply via email to