Koutsomboris,

Your servlet code appears to be causing the problem

>          ServletInputStream servInStream = null;
>       ByteArrayOutputStream baos = null;
>       ByteArrayInputStream bais = null;
>       byte[] bufByteArray = null;
>       String msgIN = null;
>       servInStream = request.getInputStream();
>        System.out.println("--->request.getContentLength() = "
> +request.getContentLength());
>        bufByteArray = new byte[request.getContentLength()];
>        servInStream.read(bufByteArray);
>        msgIN = new String(bufByteArray, "UTF-8");
>        bais = new ByteArrayInputStream(bufByteArray);

If I interpret the words of the InputStream.html#read(byte[]) javadoc correctly, the 
method is supposed to read only "some number of bytes from the input stream... The 
number of bytes actually read is returned as an integer. This method blocks until 
input data is available, end of file is detected, or an exception is thrown". This 
method does not block until THE ENTIRE buffer is filled up, only until SOME data 
become available. Please someone correct me if I err.

file:///C:/java/sun-jdk-1.4.2/docs/api/java/io/InputStream.html#read(byte[])

You should probably be reading the request body like that

                ByteArrayOutputStream outstream = new ByteArrayOutputStream();
                byte[] buffer = new byte[4096];
                int len;
                while ((len = instream.read(buffer)) > 0) {
                    outstream.write(buffer, 0, len);
                }
                outstream.close();
                byte[] requestBody = outstream.toByteArray();

Hope this helps,

Oleg

-----Original Message-----
From: Koutsomboris Tasos [mailto:[EMAIL PROTECTED]
Sent: Wednesday, February 25, 2004 14:42
To: '[EMAIL PROTECTED]'
Subject: problem posting xml, with size larger than 8196 or 4319 bytes...


Hello to all!
Forgive me, if I have made a mistake, by posting my question to an
irrelevant list, but this is my first try to use the benefits of the mailing
list.

I have just downloaded (from http://jakarta.apache.org/site/binindex.cgi)
version  2 (final) of httpclient and I am trying to create a small tester,
trying to post an xml, that I have read from a file.

I am pasting the test code that mades the post (in the code, I am creating
the test string ,  that I am willing to send, with a specific length of
10000 . The results are also the same, in case I am reading the input xml
from a file ) :

package com.intralot.melisa.bae.utils;

import com.intralot.melisa.bae.agents.agentBase;
import java.io.ByteArrayOutputStream;
import com.intralot.melisa.exceptions.iLotException;
import java.io.UnsupportedEncodingException;
import org.exolab.castor.xml.Marshaller;
import java.io.OutputStreamWriter;
import org.exolab.castor.xml.CastorException;
import java.io.ByteArrayInputStream;
import java.io.InputStreamReader;
import org.exolab.castor.types.Date;
import java.io.FileOutputStream;
import  java.io.InputStream;

import java.io.File;
import java.io.FileInputStream;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.EntityEnclosingMethod;
import org.apache.commons.httpclient.methods.PostMethod;


public class test_post_mailinglist {
  public test_post_mailinglist() {
  }

  public static void main(String[] args) {
    test_post_mailinglist test_post1 = new test_post_mailinglist();
    System.out.println("POST");
    try {
      ///////////////////////////
      System.setProperty("org.apache.commons.logging.Log",
                         "org.apache.commons.logging.impl.SimpleLog");

System.setProperty("org.apache.commons.logging.simplelog.showdatetime",
                         "true");
      System.setProperty(
          "org.apache.commons.logging.simplelog.log.httpclient.wire",
"debug");
      System.setProperty(

"org.apache.commons.logging.simplelog.log.org.apache.commons.httpclient",
          "debug");
      String stringtosend = "";
      for (int kl = 0;kl<10000;kl++){
        stringtosend = stringtosend + "c" ;
      }

test_post1.SendTo("http://localhost:8080/MELISAdummy/receiver",stringtosend)
;

    }
    catch (Exception e) {
      System.out.println(e.toString());
    }

  }

  public String SendTo(String URL, String XmlStringToSend) throws Exception
{
     try {

       String strURL = URL;
       String input = XmlStringToSend ;
       PostMethod post = new PostMethod(strURL);
       //post.setRequestBody(new FileInputStream(new File("./input.xml")));
       post.setRequestBody(input);
       System.out.println(
           "--------------------------------------------------------");
       System.out.println("----------------- input.length() = " +
input.length());
       post.setRequestContentLength( post.CONTENT_LENGTH_AUTO );
       // post.setRequestContentLength( (int) input.length()
       //
post.setRequestContentLength(EntityEnclosingMethod.CONTENT_LENGTH_CHUNKED)
       post.setRequestHeader("Content-type", "text/xml; charset=UTF-8");
       HttpClient httpclient = new HttpClient();
       // Execute request
       httpclient.setConnectionTimeout(20000);
       httpclient.setTimeout(20000);
       int result = httpclient.executeMethod(post);
       System.out.println(" Response status code: " + result);
       System.out.print("Response CharSet--> ");
       System.out.println(post.getResponseCharSet());
       System.out.print("Response body--> ");
       System.out.println(post.getResponseBodyAsString());
       post.releaseConnection();
       return post.getResponseBodyAsString() ;
     }

catch(org.apache.commons.httpclient.HttpConnection$ConnectionTimeoutExceptio
n e){
       System.out.println("--- ConnectionTimeoutException ---");
       throw e;
     }
     catch(org.apache.commons.httpclient.HttpRecoverableException e){
       System.out.println("--- TimeoutException, ---");
       throw e;
     }
     catch (Exception exc) {
       throw exc;
     }
   }


}

The strange thing is that if I print  the results on server side, which is a
servlet (I am reading the results as :
          ServletInputStream servInStream = null;
       ByteArrayOutputStream baos = null;
       ByteArrayInputStream bais = null;
       byte[] bufByteArray = null;
       String msgIN = null;
       servInStream = request.getInputStream();
        System.out.println("--->request.getContentLength() = "
+request.getContentLength());
        bufByteArray = new byte[request.getContentLength()];
        servInStream.read(bufByteArray);
        msgIN = new String(bufByteArray, "UTF-8");
        bais = new ByteArrayInputStream(bufByteArray);
     
      System.out.println("--->bufByteArray.length = " +bufByteArray.length);
      System.out.println("--->msgIN.length()      = " +msgIN.length());
      for (int gg=0;gg<bufByteArray.length;gg++) {
        if (bufByteArray[gg]==0) break;
        System.out.print("--->byte("+gg+") = " + msgIN.charAt(gg));
      }


)
only first 4319 bytes include a value, although the length of received data
is the same as the length of sent data (I can see these values in
system.out).
Any help would be useful,

Tassos















---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


***************************************************************************************************
The information in this email is confidential and may be legally privileged.  Access 
to this email by anyone other than the intended addressee is unauthorized.  If you are 
not the intended recipient of this message, any review, disclosure, copying, 
distribution, retention, or any action taken or omitted to be taken in reliance on it 
is prohibited and may be unlawful.  If you are not the intended recipient, please 
reply to or forward a copy of this message to the sender and delete the message, any 
attachments, and any copies thereof from your system.
***************************************************************************************************

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to