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