I have XML below which is stored as a String
in xmlData
variable and I need to pass this String to my URL in client_data
variable and then execute the URL:
<?xml version="1.0"?>
<ClientData
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.google.com model.xsd"
xmlns="http://www.google.com">
<client id="100">
<clock>
<for>
<etc>val(tery) = 1</etc>
<while><![CDATA[val(tery) < 20]]></while>
</for>
</clock>
</model>
</ClientData>
Below is the URL I am hitting on the browser by URL encoding client_data
value manually to get the response back and it works fine through browser -
http://localhost:8080/test_tmp?max_time=30&users=1000&client_data=<?xml version="1.0"?>
<ClientData
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.google.com model.xsd"
xmlns="http://www.google.com">
<client id="100">
<clock>
<for>
<etc>val(tery) = 1</etc>
<while><![CDATA[val(tery) < 20]]></while>
</for>
</clock>
</model>
</ClientData>
Now I have started using Apache HttpClient
to execute the URL and I have got below code which is working fine -
Using Apache HttpClient
This code works fine and I am able to get the response back. I am getting JSON response back as a string which is expected.
public static void main(String[] args) {
for(int i= 1; i<=100; i++) {
// this will return xml as a string
String xmlData = getXMLData(i);
String url = generateURL(xmlData);
// do I need to create this everytime for each call?
HttpClient httpclient = HttpClientBuilder.create().build();
HttpGet request = new HttpGet(url);
StringBuilder response = new StringBuilder();
try {
HttpResponse httpResponse = httpclient.execute(request);
StatusLine statusLine = httpResponse.getStatusLine();
int statusCode = statusLine.getStatusCode();
String phrase = statusLine.toString();
if (statusCode == HttpStatus.OK.value()) {
BufferedReader rd = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent()));
String line = "";
while ((line = rd.readLine()) != null) {
response.append(line);
}
}
} catch (ClientProtocolException e) {
System.out.println(e.getMessage());
} catch (IOException e) {
System.out.println(e.getMessage());
}
// prints response
System.out.println(response.toString());
// and then I am serializing json "response" here to my POJO if it not null
}
}
private static String generateURL(final String clientData) {
StringBuilder url = new StringBuilder();
url.append("http://localhost:8080/test_tmp?max_time=30&users=1000&client_data=");
url.append(URLEncoder.encode(clientData, "UTF-8"));
return url.toString();
}
I am opting for code review to see whether there is any better way to execute the URL efficiently using Apache HttpClient
or if there is any way to simplify the above code.