Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to switch from HttpURLConnection to HttpClient

this is my first question, so please, bear with me.

I have a Swing application, which gets data in a for of XML from a server through HttpURLConnection. Now I'm trying to create a constant request-respond connection with the server, to check if there are any updates for the application (as the checking has to be done regularly and often (every second or so)).

In some question's comment I read that it would be better to use Apache HttpClient instead of HttpURLConnection to maintain a live connection, but I can't find any good example how to go from my current code to the one with HttpClient. Specifically, what to use instead of HttpURLConnection.setRequestProperty() and HttpURLConnection.getOutputStream()?

Document request = new Document(xmlElement);
Document response = new Document();

String server = getServerURL(datasetName);
try {
  URL url = new URL(server);
  try {
    HttpURLConnection connection = (HttpURLConnection)url.openConnection();
    connection.setRequestProperty("Content-Type","application/xml; charset=ISO-8859-1");
    connection.setDoOutput(true);
    connection.setDoInput(true);
    connection.setRequestMethod("POST");
    OutputStream output = connection.getOutputStream();

    XMLOutputter serializer = new XMLOutputter();
    serializer.output(request, output);

    output.flush();
    output.close();

    InputStream input = connection.getInputStream();
    String tempString = ErrOut.printToString(input);

    SAXBuilder parser = new SAXBuilder();
    try {
      response = parser.build(new StringReader(tempString));
    }
    catch (JDOMException ex) { ... }
    input.close();
    connection.disconnect();
  }
  catch (IOException ex) { ... }
}
catch (MalformedURLException ex) { ... }
like image 467
Rolandas Avatar asked Dec 16 '11 12:12

Rolandas


3 Answers

I think apache provides all the examples.. if you are using httpclient 4 you can refer to this URL http://hc.apache.org/httpcomponents-client-ga/examples.html

Additionally you may find this useful.. w.r.t setting the response type etc http://hc.apache.org/httpcomponents-client-ga/tutorial/html/fundamentals.html

like image 157
Raveesh Sharma Avatar answered Oct 02 '22 14:10

Raveesh Sharma


Thank you Santosh and Raveesh Sharma for your answers. I ended up using StringEntity, and this is what I have now:

Document request = new Document(xmlElement);
Document response = new Document();

XMLOutputter xmlOutputter = new XMLOutputter();
String xml = xmlOutputter.outputString(request);

HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(getServerURL(datasetName));
post.setHeader("Content-type", "application/xml; charset=ISO-8859-1");

try
{
  StringEntity se = new StringEntity(xml);
  se.setContentType("text/xml");
  post.setEntity(se);
}
catch (UnsupportedEncodingException e) { ... }

try
{
  HttpResponse httpResponse = client.execute(post);

  BufferedReader rd = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent()));
  String line = "";
  String tempString = "";
  while ((line = rd.readLine()) != null)
  {
    tempString += line;
  }

  SAXBuilder parser = new SAXBuilder();
  try
  {
    response = parser.build(new StringReader(tempString));
  }
  catch (JDOMException ex) { ... }
}
catch (IOException ex) { ... }
like image 29
Rolandas Avatar answered Oct 02 '22 14:10

Rolandas


Here is snippet you need (this replaces most of the things you have in try block) ,

try {
String postURL= server;
HttpClient client = new HttpClient();
PostMethod postMethod = new PostMethod(postURL);;
client.executeMethod(postMethod);
InputStream input = postMethod.getResponseBodyAsStream();   
//--your subsequent code here

EDIT: Here is the example of posting XML to a server Using Http-Client.

like image 37
Santosh Avatar answered Oct 02 '22 12:10

Santosh