rineholt    02/03/24 10:51:29

  Modified:    java/src/org/apache/axis SOAPPart.java
               java/src/org/apache/axis/attachments
                        BoundaryDelimitedStream.java
                        MultiPartRelatedInputStream.java
               java/src/org/apache/axis/utils resources.properties
               java/test/encoding AttributeBean.java TestAttributes.java
  Log:
  Hopefully fixed a problem with BoundaryDelmited stream that only happens on
  rare occasions.  Also did some cleanup.
  
  Moved AttributeBean into package test.encoding  I was getting a duplicate
  class error.
  
  Revision  Changes    Path
  1.17      +2 -2      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.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- SOAPPart.java     15 Mar 2002 01:14:09 -0000      1.16
  +++ SOAPPart.java     24 Mar 2002 18:51:28 -0000      1.17
  @@ -124,7 +124,7 @@
        * The original message.  Again, may be String, byte[], InputStream,
        * or SOAPEnvelope.
        */
  -    private Object originalMessage ;
  +    // private Object originalMessage ; //free up reference  this is not in use.
   
       /**
        * Do not call this directly!  Should only be called by Message.
  @@ -134,7 +134,7 @@
       public SOAPPart(Message parent, Object initialContents, boolean isBodyStream) {
           super();
           msgObject=parent;
  -        originalMessage = initialContents;
  +        // originalMessage = initialContents;
           int form = FORM_STRING;
           if (initialContents instanceof SOAPEnvelope) {
               form = FORM_SOAPENVELOPE;
  
  
  
  1.10      +89 -10    
xml-axis/java/src/org/apache/axis/attachments/BoundaryDelimitedStream.java
  
  Index: BoundaryDelimitedStream.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/attachments/BoundaryDelimitedStream.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- BoundaryDelimitedStream.java      22 Mar 2002 15:29:51 -0000      1.9
  +++ BoundaryDelimitedStream.java      24 Mar 2002 18:51:28 -0000      1.10
  @@ -54,6 +54,8 @@
    */
   
   package org.apache.axis.attachments;
  +import java.lang.ref.WeakReference;
  +
   
   import org.apache.axis.utils.JavaUtils;
   
  @@ -123,7 +125,7 @@
         */
       protected BoundaryDelimitedStream(BoundaryDelimitedStream prev,
         int readbufsz ) {
  -        super (prev.is);
  +        super (null);
   
           streamNo= newStreamNo();
   
  @@ -140,7 +142,7 @@
           readBufPos = prev.readBufPos + boundaryBufLen; 
           readBufEnd = prev.readBufEnd;
           //find the new boundary.
  -        boundaryPos = boundaryPosition( readbuf, readBufPos, readBufEnd-1);
  +        boundaryPos = boundaryPosition( readbuf, readBufPos, readBufEnd);
           prev.theEnd = theEnd; //The stream.
       }
   
  @@ -152,11 +154,12 @@
        */
        BoundaryDelimitedStream( java.io.InputStream is, byte[] boundary,
         int readbufsz) throws org.apache.axis.AxisFault {
  -        super (is);
  +        // super (is);
  +         super(null); //we handle everything so this is not necessary, don't won't 
to hang on to a reference.
           isDebugEnabled= log.isDebugEnabled();
           streamNo= newStreamNo();
           closed = false;
  -        this.is = is;
  +        this.is =  is;
           //Copy the boundary array to make certain it is never altered.
           this.boundary= new byte[boundary.length];
           System.arraycopy(boundary,0,this.boundary,0, boundary.length);
  @@ -166,6 +169,22 @@
             //Most mime boundaries are 40 bytes or so.
           this.readbufsz = Math.max( (boundaryBufLen) * 2, readbufsz); 
       }
  +
  +    private final int readFromStream( final byte[] b) throws java.io.IOException{
  +       return readFromStream(b, 0, b.length);
  +    }
  +    private final int readFromStream( final byte[] b, final int start, final int 
length) throws java.io.IOException{
  +            int minRead= Math.min(boundaryBufLen *2, length); 
  +            int br= 0;
  +            int brTotal=0;
  +            do
  +            {
  +              br= is.read(b, brTotal + start, length - brTotal);
  +              if(br > 0) brTotal+= br;
  +            }while(br > -1 && brTotal < minRead);
  +
  +            return brTotal != 0?  brTotal : br;
  +    }
        
       /**
        * Read from the boundary delimited stream.
  @@ -185,8 +204,11 @@
   
           if (readbuf == null) { //Allocate the buffer.
               readbuf = new byte[Math.max(len, readbufsz ) ];
  -            readBufEnd = is.read(readbuf);
  +            readBufEnd = readFromStream(readbuf);
               if( readBufEnd < 0) {
  +                readbuf= null;
  +                closed= true;
  +                theEnd = true;
                   throw new java.io.IOException(
                           JavaUtils.getMessage("eosBeforeMarker"));
               }
  @@ -221,9 +243,12 @@
                   //copy what was left over.
                   System.arraycopy(readbuf, readBufPos, dstbuf, 0, movecnt);
                   //Read in the new data.
  -                int readcnt = is.read(dstbuf, movecnt, dstbuf.length - movecnt);
  +                int readcnt = readFromStream(dstbuf, movecnt, dstbuf.length - 
movecnt);
                   
                   if( readcnt < 0) {
  +                    readbuf= null;
  +                    closed= true;
  +                    theEnd = true;
                       throw new java.io.IOException(
                               JavaUtils.getMessage("eosBeforeMarker"));
                   }
  @@ -234,7 +259,7 @@
                                         //just move the boundary by what we moved
                   if (BOUNDARY_NOT_FOUND != boundaryPos ) boundaryPos -= movecnt;
                   else boundaryPos = boundaryPosition( readbuf, readBufPos,
  -                                 readBufEnd-1); //See if the boundary is now there.
  +                                 readBufEnd); //See if the boundary is now there.
               }
   
           }
  @@ -250,6 +275,7 @@
                           {"" + bwritten, "" + streamNo, new String(tb)}));
               }
           }
  +        if(eos && theEnd)readbuf= null; //dealloc even in Java.  
   
           return bwritten;
       }
  @@ -296,13 +322,44 @@
   
           }
       }
  +    /**
  +     * mark the stream.
  +     * This is not supported.
  +     */
  +    public void mark( int readlimit){
  +    //do nothing
  +    }
  +
  +    /**
  +     * reset the stream.
  +     * This is not supported.
  +     */
  +    public void reset() throws java.io.IOException{
  +      throw new java.io.IOException(JavaUtils.getMessage("attach.bounday.mns"));
  +    }
  +
  +    /**
  +     * markSupported
  +     * return false; 
  +     */
  +    public boolean markSupported(){
  +      return false;
  +    }
  +
  +    public int available() throws java.io.IOException{
  +      int bcopy = readBufEnd - readBufPos - boundaryBufLen;
  +                             //never go past the boundary.
  +      bcopy = Math.min(bcopy, boundaryPos - readBufPos); 
  +      return Math.max(0,bcopy);
  +    }
  +
   
       /**
        * Read from the boundary delimited stream.
        * @return The position of the boundary. Detects the end of the source stream.
        * 
        */
  -    int boundaryPosition( byte[] searchbuf, int start, int end) {
  +    protected int boundaryPosition( byte[] searchbuf, int start, int end) {
   
           int foundAt = boundarySearch(searchbuf, start, end);
                                                  //First find the boundary marker
  @@ -330,7 +387,8 @@
      private int boundarySearch(final byte[]text,final int start, final int end ) {
   //log.debug(">>>>" + start + "," + end);   
   
  -       int i, j, k;
  +       int i=0, j=0, k=0;
  +       if(boundaryLen > (end - start)) return BOUNDARY_NOT_FOUND;
         
          if(null == skip){
              skip= new int[256];
  @@ -339,10 +397,31 @@
          }
   
   
  -       for( k=start + boundaryLen-1; k <=end; k += skip[text[k] & (0xff)] ) {
  +       for( k=start + boundaryLen-1; k <end; k += skip[text[k] & (0xff)] ) {
   // log.debug(">>>>" + k);   
   //printarry(text, k-boundaryLen+1, end);
  +            try{
               for( j=boundaryLen-1, i=k; j>=0 && text[i] == boundary[j]; j-- ) i--;
  +            }catch(ArrayIndexOutOfBoundsException e){
  +              System.
  +              err.println(">>>" +e); //rr temporary till a boundary issue is 
resolved.
  +              System.
  +              err.println("start=" +start);
  +              System.
  +              err.println("k=" +k);
  +              System.
  +              err.println("text.length=" + text.length );
  +              System.
  +              err.println("i=" + i );
  +              System.
  +              err.println("boundary.length=" + boundary.length );
  +              System.
  +              err.println("j=" + j );
  +              System.
  +              err.println("end=" + end );
  +              throw e;
  +
  +            }
               if( j == (-1) ) return i+1;
          }
   
  
  
  
  1.12      +3 -3      
xml-axis/java/src/org/apache/axis/attachments/MultiPartRelatedInputStream.java
  
  Index: MultiPartRelatedInputStream.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/attachments/MultiPartRelatedInputStream.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- MultiPartRelatedInputStream.java  15 Mar 2002 01:14:10 -0000      1.11
  +++ MultiPartRelatedInputStream.java  24 Mar 2002 18:51:28 -0000      1.12
  @@ -83,7 +83,7 @@
       protected int rootPartLength = 0;
       protected boolean closed = false; //If true the stream has been closed.
       protected boolean eos = false;  //This is set once the SOAP packet has reached 
the end of stream.
  -    protected java.io.InputStream is = null; //The orginal multipart/related stream.
  +    // protected java.io.InputStream is = null; //The orginal multipart/related 
stream.
       //This stream controls and manages the  boundary.
       protected org.apache.axis.attachments.BoundaryDelimitedStream 
boundaryDelimitedStream = null;
       protected java.io.InputStream soapStream = null; //Set the soap stream once 
found.
  @@ -100,9 +100,8 @@
        * @param is the true input stream from where the source.
        */
       public MultiPartRelatedInputStream ( String contentType, java.io.InputStream 
is) throws org.apache.axis.AxisFault {
  -        super (is);
  +        super (null); //don't cache this stream.
           try {
  -            this.is = is;
               //First find the start and boundary parameters. There are real weird 
rules regard what
               // can be in real headers what needs to be escaped etc  let mail parse 
it.
               javax.mail.internet.ContentType ct = new 
javax.mail.internet.ContentType(contentType);
  @@ -305,6 +304,7 @@
               }
                  //Now start searching for the data.
   
  +            if(null!= boundaryDelimitedStream )
               do {
                   String contentType = null;
                   String contentId = null;
  
  
  
  1.84      +2 -0      xml-axis/java/src/org/apache/axis/utils/resources.properties
  
  Index: resources.properties
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/utils/resources.properties,v
  retrieving revision 1.83
  retrieving revision 1.84
  diff -u -r1.83 -r1.84
  --- resources.properties      22 Mar 2002 17:21:25 -0000      1.83
  +++ resources.properties      24 Mar 2002 18:51:29 -0000      1.84
  @@ -791,3 +791,5 @@
   
   optionFactory00=name of the JavaWriterFactory class for extending Java generation 
functions
   optionHelper00=emits separate Helper classes for meta data
  +
  +attach.bounday.mns=Marking streams not supported.
  
  
  
  1.3       +2 -0      xml-axis/java/test/encoding/AttributeBean.java
  
  Index: AttributeBean.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/test/encoding/AttributeBean.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- AttributeBean.java        8 Mar 2002 05:04:54 -0000       1.2
  +++ AttributeBean.java        24 Mar 2002 18:51:29 -0000      1.3
  @@ -53,6 +53,8 @@
   * <http://www.apache.org/>.
   */
   
  +package test.encoding;
  +
   import org.apache.axis.description.AttributeDesc;
   import org.apache.axis.description.ElementDesc;
   import org.apache.axis.description.FieldDesc;
  
  
  
  1.3       +0 -1      xml-axis/java/test/encoding/TestAttributes.java
  
  Index: TestAttributes.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/test/encoding/TestAttributes.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TestAttributes.java       8 Mar 2002 05:04:54 -0000       1.2
  +++ TestAttributes.java       24 Mar 2002 18:51:29 -0000      1.3
  @@ -35,7 +35,6 @@
   import java.io.Writer;
   import java.util.Vector;
   
  -import AttributeBean;
   
   /**
    *  Test the serialization of a bean with attributes
  
  
  


Reply via email to