The patch adds a new logger named 'org.apache.axis.TIME'. If you enable debugging on it, it'll display various interesting times - the Call.invoke(), time spent in the real method, time spent decoding and sending the response.
There is also the quick fix for nil/null, and few null pointer exceptions I get. Costin
Index: src/org/apache/axis/client/Call.java =================================================================== RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/client/Call.java,v retrieving revision 1.131 diff -u -r1.131 Call.java --- src/org/apache/axis/client/Call.java 6 Jun 2002 00:00:56 -0000 1.131 +++ src/org/apache/axis/client/Call.java 27 Jun 2002 20:08:38 -0000 @@ -141,6 +141,8 @@ public class Call implements javax.xml.rpc.Call { protected static Log log = LogFactory.getLog(Call.class.getName()); + private static Log tlog = + LogFactory.getLog("org.apache.axis.TIME"); private boolean parmAndRetReq = true ; private Service service = null ; @@ -1140,6 +1148,10 @@ * @throws java.rmi.RemoteException if there's an error */ public Object invoke(Object[] params) throws java.rmi.RemoteException { + long t0=0, t1=0, t2=0, t3=0; + if( tlog.isDebugEnabled() ) { + t0=System.currentTimeMillis(); + } /* First see if we're dealing with Messaging instead of RPC. */ /* If ALL of the params are SOAPBodyElements then we're doing */ /* Messaging, otherwise just fall through to normal RPC processing. */ @@ -1181,8 +1193,13 @@ if ( operationName == null ) throw new AxisFault( JavaUtils.getMessage("noOperation00") ); try { - return this.invoke(operationName.getNamespaceURI(), + Object res=this.invoke(operationName.getNamespaceURI(), operationName.getLocalPart(), params); + if( tlog.isDebugEnabled() ) { + t1=System.currentTimeMillis(); + tlog.debug("axis.Call.invoke: " + (t1-t0) + " " + operationName); + } + return res; } catch( AxisFault af) { throw af; Index: src/org/apache/axis/deployment/wsdd/WSDDTypeMapping.java =================================================================== RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/deployment/wsdd/WSDDTypeMapping.java,v retrieving revision 1.29 diff -u -r1.29 WSDDTypeMapping.java --- src/org/apache/axis/deployment/wsdd/WSDDTypeMapping.java 31 May 2002 19:08:06 -0000 1.29 +++ src/org/apache/axis/deployment/wsdd/WSDDTypeMapping.java 27 Jun 2002 20:08:38 +-0000 @@ -218,7 +218,11 @@ // We're } ClassLoader cl = Thread.currentThread().getContextClassLoader(); - return Class.forName(loadName, true, cl); + try { + return Class.forName(loadName, true, cl); + } catch( ClassNotFoundException ex1 ) { + return Class.forName( loadName ); + } } throw new ClassNotFoundException(JavaUtils.getMessage("noTypeQName00")); Index: src/org/apache/axis/description/ServiceDesc.java =================================================================== RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/description/ServiceDesc.java,v retrieving revision 1.24 diff -u -r1.24 ServiceDesc.java --- src/org/apache/axis/description/ServiceDesc.java 4 Jun 2002 20:34:02 -0000 1.24 +++ src/org/apache/axis/description/ServiceDesc.java 27 Jun 2002 20:08:38 -0000 @@ -676,7 +676,8 @@ createOperationsForName(implClass, methodName); // Note that we never have to look at this method name again. - completedNames.add(methodName); + if (completedNames != null) + completedNames.add(methodName); } /** Index: src/org/apache/axis/encoding/DeserializerImpl.java =================================================================== RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/encoding/DeserializerImpl.java,v retrieving revision 1.14 diff -u -r1.14 DeserializerImpl.java --- src/org/apache/axis/encoding/DeserializerImpl.java 31 May 2002 19:08:07 -0000 1.14 +++ src/org/apache/axis/encoding/DeserializerImpl.java 27 Jun 2002 20:08:38 -0000 @@ -331,7 +331,14 @@ isNil = true; return; } - + nil = Constants.getValue(attributes, + Constants.URIS_SCHEMA_XSI, + "null"); + if (nil != null && nil.equals("true")) { + value = null; + isNil = true; + return; + } // If this element has an id, then associate the value with the id. // (Prior to this association, the MessageElement of the element is // associated with the id. Failure to replace the MessageElement at this Index: src/org/apache/axis/server/AxisServer.java =================================================================== RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/server/AxisServer.java,v retrieving revision 1.67 diff -u -r1.67 AxisServer.java --- src/org/apache/axis/server/AxisServer.java 4 Jun 2002 22:58:32 -0000 1.67 +++ src/org/apache/axis/server/AxisServer.java 27 Jun 2002 20:08:39 -0000 @@ -78,6 +78,8 @@ { protected static Log log = LogFactory.getLog(AxisServer.class.getName()); + private static Log tlog = + LogFactory.getLog("org.apache.axis.TIME"); private static AxisServerFactory factory = null; @@ -161,6 +163,11 @@ * handler for the desired service and invoke() it. */ public void invoke(MessageContext msgContext) throws AxisFault { + long t0=0, t1=0, t2=0, t3=0, t4=0, t5=0; + if( tlog.isDebugEnabled() ) { + t0=System.currentTimeMillis(); + } + if (log.isDebugEnabled()) { log.debug("Enter: AxisServer::invoke"); } @@ -194,12 +201,21 @@ h = null ; } } + if( tlog.isDebugEnabled() ) { + t1=System.currentTimeMillis(); + } if ( h != null ) h.invoke(msgContext); else throw new AxisFault( "Server.error", JavaUtils.getMessage("noHandler00", hName), null, null ); + if( tlog.isDebugEnabled() ) { + t2=System.currentTimeMillis(); + tlog.debug( "AxisServer.invoke " + hName + " invoke=" + + ( t2-t1 ) + " pre=" + (t1-t0 )); + } + } else { // This really should be in a handler - but we need to discuss it @@ -246,6 +262,9 @@ if (log.isDebugEnabled()) log.debug(JavaUtils.getMessage("transport01", "AxisServer.invoke", hName)); + if( tlog.isDebugEnabled() ) { + t1=System.currentTimeMillis(); + } if ( hName != null && (h = getTransport( hName )) != null ) { if (h instanceof SimpleTargetedChain) { transportChain = (SimpleTargetedChain)h; @@ -255,6 +274,9 @@ } } + if( tlog.isDebugEnabled() ) { + t2=System.currentTimeMillis(); + } /* Process the Global Request Chain */ /**********************************/ if ((h = getGlobalRequest()) != null ) @@ -282,9 +304,16 @@ "" + msgContext.getTargetService()), null, null ); } + if( tlog.isDebugEnabled() ) { + t3=System.currentTimeMillis(); + } h.invoke(msgContext); + if( tlog.isDebugEnabled() ) { + t4=System.currentTimeMillis(); + } + /* Process the Global Response Chain */ /***********************************/ if ((h = getGlobalResponse()) != null) @@ -297,6 +326,19 @@ if (h != null) h.invoke(msgContext); } + + if( tlog.isDebugEnabled() ) { + t5=System.currentTimeMillis(); + tlog.debug( "AxisServer.invoke2 " + + " preTr=" + + ( t1-t0 ) + " tr=" + (t2-t1 ) + + " preInvoke=" + ( t3-t2 ) + + " invoke=" + ( t4-t3 ) + + " postInvoke=" + ( t5-t4 ) + + msgContext.getTargetService() + + "." + msgContext.getOperation().getName()); + } + } } catch (AxisFault e) { throw e; Index: src/org/apache/axis/transport/http/AxisServlet.java =================================================================== RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/transport/http/AxisServlet.java,v retrieving revision 1.109 diff -u -r1.109 AxisServlet.java --- src/org/apache/axis/transport/http/AxisServlet.java 6 Jun 2002 00:00:01 -0000 1.109 +++ src/org/apache/axis/transport/http/AxisServlet.java 27 Jun 2002 20:08:39 -0000 @@ -103,6 +103,8 @@ { protected static Log log = LogFactory.getLog(AxisServlet.class.getName()); + private static Log tlog = + LogFactory.getLog("org.apache.axis.TIME"); public static final String INIT_PROPERTY_TRANSPORT_NAME = "transport.name"; @@ -490,9 +492,15 @@ public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { + long t0=0, t1=0, t2=0, t3=0, t4=0; + String soapAction=null; + MessageContext msgContext=null; if (isDebug) log.debug("Enter: doPost()"); - + if( tlog.isDebugEnabled() ) { + t0=System.currentTimeMillis(); + } + Message responseMsg = null; try { @@ -510,7 +518,7 @@ /** get message context w/ various properties set */ - MessageContext msgContext = createMessageContext(engine, req, res); + msgContext = createMessageContext(engine, req, res); // ? OK to move this to 'getMessageContext', // ? where it would also be picked up for 'doGet()' ? @@ -544,7 +552,7 @@ */ // (is this last stmt true??? (I don't think so - Glen)) /********************************************************/ - String soapAction = getSoapAction(req); + soapAction = getSoapAction(req); if (soapAction != null) { msgContext.setUseSOAPAction(true); @@ -556,11 +564,17 @@ // (Sam is Watching! :-) msgContext.setSession(new AxisHttpSession(req)); + if( tlog.isDebugEnabled() ) { + t1=System.currentTimeMillis(); + } /* Invoke the Axis engine... */ /*****************************/ if(isDebug) log.debug("Invoking Axis Engine."); engine.invoke(msgContext); if(isDebug) log.debug("Return from Axis Engine."); + if( tlog.isDebugEnabled() ) { + t2=System.currentTimeMillis(); + } responseMsg = msgContext.getResponseMessage(); } catch (AxisFault e) { @@ -581,6 +595,9 @@ log.error(JavaUtils.getMessage("axisFault00"), fault); responseMsg = new Message(fault); } + if( tlog.isDebugEnabled() ) { + t3=System.currentTimeMillis(); + } /* Send response back along the wire... */ /***********************************/ @@ -591,6 +608,16 @@ log.debug("Response sent."); log.debug("Exit: doPost()"); } + if( tlog.isDebugEnabled() ) { + t4=System.currentTimeMillis(); + tlog.debug("axisServlet.doPost: " + soapAction + + " pre=" + (t1-t0) + + " invoke=" + (t2-t1) + + " post=" + (t3-t2) + + " send=" + (t4-t3) + + " " + msgContext.getTargetService() + "." + +msgContext.getOperation().getName() ); + } + } /** Index: src/org/apache/axis/wsdl/fromJava/Types.java =================================================================== RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/fromJava/Types.java,v retrieving revision 1.32 diff -u -r1.32 Types.java --- src/org/apache/axis/wsdl/fromJava/Types.java 5 Jun 2002 18:18:41 -0000 1.32 +++ src/org/apache/axis/wsdl/fromJava/Types.java 27 Jun 2002 20:08:40 -0000 @@ -145,6 +145,7 @@ * @return the QName of the generated Schema type, null if void */ public QName writePartType(Class type, javax.xml.rpc.namespace.QName qname) throws Exception { + if( type==null ) return null; if (type.getName().equals("void")) return null; if (isSimpleType(type)) {