or a tcp dump if you prefer. Could it be a transfer encoding issue? Is there a proxy involved in this process?
2015-02-26 9:50 GMT+01:00 Oleg Kalnichevski <[email protected]>: > On Thu, 2015-02-26 at 08:26 +0100, Alessandro Manzoni wrote: > > Hi Stefan, > > thank you for the reply, > > > > Post a wire log of the session exhibiting the problem. > > Oleg > > > Il 25.02.2015 20.44, Stefan Magnus Landrø ha scritto: > > > 2015-02-25 20:07 GMT+01:00 Alessandro Manzoni < > [email protected] > > >> : > > >> Il 25.02.2015 19.28, Stefan Magnus Landrø ha scritto: > > >> > > >>> Few questions: > > >>> > > >>> Why not use a more appropriate entity type? ByteArrayEntity? > StreamEntity? > > >>> > > >> Should I? Why an entity would be more or less appropriate? > > >> > > >> By the way, in version 4.2.2 I have no StreamEntity class. > > > > > > > https://github.com/apache/httpcore/blob/4.2.2/httpcore/src/main/java/org/apache/http/entity/InputStreamEntity.java > > > > > > > > >> Docs says that ByteArrayEntity has no encoding, while StringEntity > does. > > >> That's it. > > >> > > > You're reading the whole thing into memory. You'll get better > performance > > > streaming. The encoding header can be set directly on the request. See > > > sources for details on which headers are set in case of string entity. > > I saw that if a null encoding is used, StringEntity uses a default one, > > that works just as expected with small (< 30kb) xml, so I have no > > reasons not to trust it. > > > > Since I produce the xml in memory, that's the way Marshal.marshal method > > works, I could use the ByteArrayEntity using the byte[] from the > > ByteArrayOutputStream supplied to marshal. But docs tell me that > > ByteArrayEntity is not thread-safe, while I need to use HttpClient by > > conncurrent threads. > > > > Further more, I supect that the target Tomcat dislikes my request due to > > incongruents content and content-lenght or a buffer too small somewhere. > > I don't see anything to do with the entity that matches this figure. > > > > Tomcat logs do not show anything about the reason not to accept the > > request. > > I need some hint to investigate further, maybe just to say it's not > > HTTPClient fault. > > > Fair enough. You should see details in the tomcat logs concerning the > 400 > > > error code. Are you controlling the application you're hitting? > > Not directly, just logs. > > I was told that target application logs received requests as soon as is > > invoked and always replies with an xml carrying an error indicating > > failing items. When the problem arise, I don't find any log about, and > > the only response received is tomcat error page. > > Then when Tomcat reject the request, usully is because of an uncathed > > exception (that cause a 500 reason code, and the exception appears in > > tomcat logs) or some filter prevent to invoke the target application > > (but I should see this in tomcat logs and reason code would be some 40x > > reason code but 400), or it evaluate the request as malformed (that > > resuts in a 400 reson code). Isn't it? > > >> By the way, I try to unmarshal response.getEntity().getContent(), as > the > > >> application waits for a returned xml stream. > > >> If the unmarshal fails, I just write the content to the log file. In > the > > >> log I found that Tomcat returned an html page, with the notification > of the > > >> failure. This case 400 bad request, and I'm wondering why Tomcat > dislikes > > >> my request. That's not bad at all to me. > > >> > > >> Den 25. feb. 2015 kl. 17.26 skrev Alessandro Manzoni < > > >>>> [email protected]>: > > >>>> > > >>>> I made a simple client that sends a xml stream to a webapp running > on > > >>>> tomcat 7 by POST method. > > >>>> Both client and tomcat run on the same server (linux). HTTPClient > > >>>> version is 4.2.2. > > >>>> > > >>>> The xml stream is formally correct. Somtimes, when the stream is > more > > >>>> than 30KB tomcat replies with an html page reporting 400 bad > request. When > > >>>> the stream is smaller goes fine. > > >>>> > > >>>> This is my code: > > >>>> HttpClient httpclient = new DefaultHttpClient(); > > >>>> HttpPost httppost = new HttpPost(uri); > > >>>> StringEntity entity = new StringEntity(new > > >>>> String(output.toByteArray()), ContentType.TEXT_XML); > > >>>> httppost.setEntity(entity); > > >>>> return httpclient.execute(httppost); > > >>>> > > >>>> where: > > >>>> - uri is the uri of the webapp, always the same. > > >>>> - output is a ByteArrayOutputStream that contains the xml stream > > >>>> > > >>>> Should I put some more headers? Or change somewhat to avoid the > error? > > >>>> > > >>>> Thanks, regards. > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [email protected] > > For additional commands, e-mail: [email protected] > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > > -- BEKK Open http://open.bekk.no TesTcl - a unit test framework for iRules http://testcl.com
