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)) {

Reply via email to