[prev in list] [next in list] [prev in thread] [next in thread] 

List:       httpclient-commons-dev
Subject:    RE: problem posting xml, with size larger than 8196 or 4319 bytes...
From:       "Kalnichevski, Oleg" <oleg.kalnichevski () bearingpoint ! com>
Date:       2004-02-25 18:18:23
Message-ID: 825BF35A92B3F0479CC164ECBBE9376E0DE6E0 () kccxoex06 ! corp ! kpmgconsulting ! com
[Download RAW message or body]


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:koutsomboris@intralot.com]
Sent: Wednesday, February 25, 2004 14:42
To: 'commons-httpclient-dev@jakarta.apache.org'
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: commons-httpclient-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-httpclient-dev-help@jakarta.apache.org


***************************************************************************************************
 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: commons-httpclient-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-httpclient-dev-help@jakarta.apache.org


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic