final Map<String, String> extraParameter) throws ReportDataFactoryException
{
final String baseURL = computeBaseUrl(dataRow);
if (StringUtils.isEmpty(baseURL, true))
{
throw new ReportDataFactoryException("Base URL is null");
}
try
{
final StringBuilder url = new StringBuilder();
url.append(baseURL);
url.append("/content/cda/");
url.append(method);
url.append("?");
url.append("outputType=xml");
url.append("&solution=");
url.append(encodeParameter(solution));
url.append("&path=");
url.append(encodeParameter(path));
url.append("&file=");
url.append(encodeParameter(file));
for (final Map.Entry<String, String> entry : extraParameter.entrySet())
{
final String key = encodeParameter(entry.getKey());
if (StringUtils.isEmpty(key))
{
continue;
}
// For custom parameters, we prepend 'param'. Exception is dataAccessId
if(key.equals("dataAccessId")){
url.append("&");
}
else{
url.append("¶m");
}
url.append(key);
url.append("=");
url.append(encodeParameter(entry.getValue()));
}
httpCall = new GetMethod(url.toString());
final HttpClient client = getHttpClient();
final int status = client.executeMethod(httpCall);
if (status != 200)
{
throw new ReportDataFactoryException("Failed to retrieve data: " + httpCall.getStatusLine());
}
final InputStream responseBody = httpCall.getResponseBodyAsStream();
return CdaResponseParser.performParse(responseBody);
}
catch (UnsupportedEncodingException use)
{
throw new ReportDataFactoryException("Failed to encode parameter", use);
}
catch (Exception e)
{
throw new ReportDataFactoryException("Failed to send request", e);
}
finally
{
httpCall = null;
}