From: Sebastien P. <seb...@qo...> - 2006-09-28 09:44:28
|
Hello, This mail was first sent to the jetty-support list, but nobody seemed to = be very=20 inspired by it, so I'll have a try here... Hope I don't disturb anyone. I am a developer for logback, a logging framework which you might know. One of the logback modules, called Access, integrates with Servlet contai= ners to provide HTTP-access log functionality. To allow flexibility in the loggin= g layout, we have developed a special implementation of a PatternLayout, which you mig= ht see as a http-centered PatternLayout. The problem I am facing now is the following. I'd like to add to the Patt= ernLayout the possibility to output the content of a POST request. I wrote a test case that creates a Jetty server, with a ContextHandler, RequestLogHandler and a "BasicHandler". The last handler is here just to = send a "hello world" response to the client. The RequestLogHandler is set with o= ur own implementation of Jetty's RequestLog interface. In the test, I create a POST request like this: URL url =3D new URL("http://localhost:8080/"); HttpURLConnection connection =3D (HttpURLConnection)url.openConnection(); ((HttpURLConnection)connection).setRequestMethod("POST"); connection.setDoOutput(true); connection.setDoInput(true); connection.setUseCaches(false); connection.setRequestProperty("Content-Type", "text/plain"); String msg =3D "test message"; PrintWriter output =3D new PrintWriter(new OutputStreamWriter(connection.getOutputStream())); output.print(msg); output.flush(); output.close(); I expect this to be a usable POST request. Is that the case? Later in the process, the RequestLog implementation receives the logging = request. It then sends it to my Appenders, one of them trying to output the content o= f the POST request (i.e the "test message" String), to the console. To access the post content, I take the inputStream of the HttpRequest and= a create a String from its content. Now to the part that I don't understand: if, after the ouput.close() stat= ement, I add this: String result =3D Util.readToString(connection.getInputStream()); Then everything goes well, and the ouput in the console displays the "tes= t message". If this line is not used, then the output is complete except for the POST= content. Does that mean that the HttpRequest's InputStream is filled only if the C= onnection's InputStream is read? Could anybody help me understand that? Thanks, --=20 S=E9bastien Pennec seb...@qo... Logback: The reliable, generic, fast and flexible logging framework for J= ava. http://logback.qos.ch/ |