You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by sc...@apache.org on 2002/08/28 03:26:54 UTC

cvs commit: xml-axis/java/src/org/apache/axis/transport/http SimpleAxisWorker.java

scheu       2002/08/27 18:26:54

  Modified:    java/src/org/apache/axis SOAPPart.java
               java/src/org/apache/axis/transport/http
                        SimpleAxisWorker.java
  Log:
  Changes to SOAPPart to speed-up processing of getAsBytes and getAsString.
  If a FORM_STRING message is processed via getAsBytes(), the
  String message is saved away in the new cache variable currentMessageAsString.
  If a subsequent call to getAsString() is performed, the currentMessageAsString
  value is returned instead of doing the reverse translation.
  
  The same changes are made to getAsString().
  
  Testing revealed that the getAsString() cache is hit in each of our tests
  (usually many times per test).
  
  In my own tests SOAPPart.writeTo() performance improved from 16% of the total
  time to 10% of the total time.
  
  I also wrapped each "complicated" log.debug() message in a log.isDebugEnabled()
  if statement.  I did not change the debug messages that simply passed a constant
  String.  Should these be changed too ?
  
  Revision  Changes    Path
  1.43      +56 -16    xml-axis/java/src/org/apache/axis/SOAPPart.java
  
  Index: SOAPPart.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/SOAPPart.java,v
  retrieving revision 1.42
  retrieving revision 1.43
  diff -u -r1.42 -r1.43
  --- SOAPPart.java	27 Aug 2002 20:47:01 -0000	1.42
  +++ SOAPPart.java	28 Aug 2002 01:26:54 -0000	1.43
  @@ -128,6 +128,10 @@
        */
       private Object currentMessage ;
   
  +    // These two fields are used for caching in getAsString and getAsBytes
  +    private String currentMessageAsString = null;
  +    private byte[] currentMessageAsBytes = null;
  +
       /**
        * Message object this part is tied to. Used for serialization settings.
        */
  @@ -310,7 +314,7 @@
        * array.  This will force buffering of the message.
        */
       public byte[] getAsBytes() throws AxisFault {
  -	    log.debug("Enter: SOAPPart::getAsBytes");
  +        log.debug("Enter: SOAPPart::getAsBytes");
           if ( currentForm == FORM_BYTES ) {
               log.debug("Exit: SOAPPart::getAsBytes");
               return (byte[])currentMessage;
  @@ -321,7 +325,7 @@
                   getAsSOAPEnvelope();
               } catch (Exception e) {
                   log.fatal(JavaUtils.getMessage("makeEnvFail00"), e);
  -	            log.debug("Exit: SOAPPart::getAsBytes");
  +                log.debug("Exit: SOAPPart::getAsBytes");
                   return null;
               }
           }
  @@ -371,6 +375,18 @@
           }
   
           if ( currentForm == FORM_STRING ) {
  +            // If the current message was already converted from
  +            // a byte[] to String, return the byte[] representation
  +            // (this is done to avoid unnecessary conversions)
  +            if (currentMessage == currentMessageAsString &&
  +                currentMessageAsBytes != null) {
  +                if (log.isDebugEnabled()) {
  +                    log.debug("Exit: SOAPPart::getAsBytes()");
  +                }
  +                return currentMessageAsBytes;
  +            }
  +            // Save this message in case it is requested later in getAsString
  +            currentMessageAsString = (String) currentMessage;
               try{
                   setCurrentMessage( ((String)currentMessage).getBytes("UTF-8"),
                  FORM_BYTES );
  @@ -378,6 +394,8 @@
                  setCurrentMessage( ((String)currentMessage).getBytes(),
                                  FORM_BYTES );
               }
  +            currentMessageAsBytes = (byte[]) currentMessage;
  +
               log.debug("Exit: SOAPPart::getAsBytes");
               return (byte[])currentMessage;
           }
  @@ -395,7 +413,9 @@
       public String getAsString() throws AxisFault {
           log.debug("Enter: SOAPPart::getAsString");
           if ( currentForm == FORM_STRING ) {
  -            log.debug("Exit: SOAPPart::getAsString(): " + currentMessage);
  +            if (log.isDebugEnabled()) {
  +                log.debug("Exit: SOAPPart::getAsString(): " + currentMessage);
  +            }
               return (String)currentMessage;
           }
   
  @@ -406,14 +426,29 @@
           }
   
           if ( currentForm == FORM_BYTES ) {
  -                        try{
  -                                setCurrentMessage( new String((byte[]) currentMessage,"UTF-8"),
  -                               FORM_STRING );
  -                        }catch(UnsupportedEncodingException ue){
  -            setCurrentMessage( new String((byte[]) currentMessage),
  -                               FORM_STRING );
  -                        }
  -            log.debug("Exit: SOAPPart::getAsString(): " + currentMessage);
  +            // If the current message was already converted from
  +            // a String to byte[], return the String representation
  +            // (this is done to avoid unnecessary conversions)
  +            if (currentMessage == currentMessageAsBytes &&
  +                currentMessageAsString != null) {
  +                if (log.isDebugEnabled()) {
  +                    log.debug("Exit: SOAPPart::getAsString(): " + currentMessageAsString);
  +                } 
  +                return currentMessageAsString;
  +            }
  +            // Save this message in case it is requested later in getAsBytes
  +            currentMessageAsBytes = (byte[]) currentMessage;
  +            try{
  +                setCurrentMessage( new String((byte[]) currentMessage,"UTF-8"),
  +                                   FORM_STRING );
  +            }catch(UnsupportedEncodingException ue){
  +                setCurrentMessage( new String((byte[]) currentMessage),
  +                                   FORM_STRING );
  +            }
  +            currentMessageAsString = (String) currentMessage;
  +            if (log.isDebugEnabled()) {
  +                log.debug("Exit: SOAPPart::getAsString(): " + currentMessage);
  +            }
               return (String)currentMessage;
           }
   
  @@ -427,7 +462,9 @@
                   return null;
               }
               setCurrentMessage(writer.getBuffer().toString(), FORM_STRING);
  -            log.debug("Exit: SOAPPart::getAsString(): " + currentMessage);
  +            if (log.isDebugEnabled()) {
  +                log.debug("Exit: SOAPPart::getAsString(): " + currentMessage);
  +            }
               return (String)currentMessage;
           }
   
  @@ -440,7 +477,9 @@
                   throw AxisFault.makeFault(e);
               }
               setCurrentMessage(writer.getBuffer().toString(), FORM_STRING);
  -            log.debug("Exit: SOAPPart::getAsString(): " + currentMessage);
  +            if (log.isDebugEnabled()) {
  +                log.debug("Exit: SOAPPart::getAsString(): " + currentMessage);
  +            }
               return (String)currentMessage;
           }
   
  @@ -458,9 +497,10 @@
       public SOAPEnvelope getAsSOAPEnvelope()
           throws AxisFault
       {
  -        log.debug("Enter: SOAPPart::getAsSOAPEnvelope()");
  -        log.debug(JavaUtils.getMessage("currForm", formNames[currentForm]));
  -
  +        if (log.isDebugEnabled()) {
  +            log.debug("Enter: SOAPPart::getAsSOAPEnvelope()");
  +            log.debug(JavaUtils.getMessage("currForm", formNames[currentForm]));
  +        }
           if ( currentForm == FORM_SOAPENVELOPE )
               return (SOAPEnvelope)currentMessage;
   
  
  
  
  1.16      +1 -0      xml-axis/java/src/org/apache/axis/transport/http/SimpleAxisWorker.java
  
  Index: SimpleAxisWorker.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/transport/http/SimpleAxisWorker.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- SimpleAxisWorker.java	23 Aug 2002 19:07:19 -0000	1.15
  +++ SimpleAxisWorker.java	28 Aug 2002 01:26:54 -0000	1.16
  @@ -486,6 +486,7 @@
               } catch (Exception e) {
               }
           }
  +
       }
   
       /**