user5732979
user5732979

Reputation:

Reading binary data from HttpServletRequest

Using Jetty, I'm sending bytes to URL http://localhost:8080/input/ like so -

public static void sampleBytesRequest (String url)
{
    try
    {
        HttpClient client = new HttpClient();
        client.start();

        client.newRequest(url)
              .content(new InputStreamContentProvider(new ByteArrayInputStream("batman".getBytes())))
              .send();
    }
    catch (Exception e) { e.printStackTrace(); }
}

My server (also Jetty) has a handler like so -

public final class JettyHandler extends AbstractHandler implements JettyConstants, LqsConstants
{
@Override
public void handle (String target,
                    Request baseRequest,
                    HttpServletRequest request,
                    HttpServletResponse response)
             throws IOException, ServletException
{
    response.setContentType(UTF_ENCODING);

    String requestBody = null;
    try { requestBody = baseRequest.getReader().readLine(); }
    catch (IOException e) { e.printStackTrace(); }

     System.out.println(new String(IOUtils.toByteArray(request.getInputStream())));
}
}

As you can see, I'm trying to recreate the original string from the binary data and print it to stdout.

However, if I set a break point at the print statement in the handler, when the request reaches that line, the server abruptly seems to skip over it.

What am I doing wrong? How can I get the binary data I'm sending over and recreate the string?

Thank you!

Upvotes: 1

Views: 1269

Answers (1)

user5732979
user5732979

Reputation:

Turns out the issue was with my client.

Instead of

client.newRequest(url)
          .content(new InputStreamContentProvider(new ByteArrayInputStream("batman".getBytes())))
          .send();

The proper way to do this is -

client.newRequest(url)
      .content(new BytesContentProvider("batman".getBytes()), "text/plain")
      .send();

Upvotes: 0

Related Questions