Poll request status - request ID no longer exists - what am I missing?

I am able to send a report request, passing in json as a report input control. I get the response back as json, with the applicable request and export IDs. I go to poll the requestExecution service for the status of the request and it throws a 404 error that the request ID is not found. What am I missing? Csharp code below...

using Newtonsoft.Json.Linq;
using System;
using System.Diagnostics;
using System.Net;
 
namespace JasperReportsClient
{
    class Program
    {
        static void Main(string[] args)
        {
            WebClient client = new WebClient();
 
            CredentialCache creds = new CredentialCache();
            creds.Add(new Uri("http://<Hostname>:8080/"), "Basic", new NetworkCredential("admin", "admin"));
            client.Credentials = creds;
 
            string data = Uri.EscapeDataString("[{\"CustNum\":\"      2\",\"CustSeq\":\"0\",\"Name\":\"Coordinated Bicycles - North\"}]");
 
            string request = 
                "{\"reportUnitUri\":\"/Reports/CustomerReport\",\"async\":true,\"freshData\":true," +
                "\"saveDataSnapshot\":false,\"outputFormat\":\"pdf\",\"interactive\":false,\"ignorePagination\":true," +
                "\"pages\":null,\"parameters\":{\"reportParameter\":[{\"name\":\"jsonString\",\"value\":[\"" + data + "\"]}]}}";
 
            WebHeaderCollection headers = new WebHeaderCollection();
            headers.Add("Content-Type:application/json");
            headers.Add("accept:application/json");
            client.Headers = headers;
 
            string response = "";
            response = client.UploadString("http://<Hostname>:8080/jasperserver/rest_v2/reportExecutions", request);
 
            JObject responseAsJsonObject = JObject.Parse(response);
 
            string requestId = responseAsJsonObject["requestId"].ToString();
            string exportId = responseAsJsonObject["exports"][0]["id"].ToString();
            string requestStatus = responseAsJsonObject["status"].ToString();
 
            Debug.WriteLine("Request ID: " + requestId);
            Debug.WriteLine("Export ID: " + exportId);
            Debug.WriteLine("Request Status: " + requestStatus);
 
            while(requestStatus == "queued")
            {
                response = null;
                response = client.DownloadString("http://<Hostname:8080/jasperserver/rest_v2/reportExecutions/" + Uri.EscapeDataString(requestId) + "/status");
                responseAsJsonObject = null;
                responseAsJsonObject = JObject.Parse(response);
 
                requestStatus = null;
                requestStatus = responseAsJsonObject["value"].ToString();
 
                Debug.WriteLine("Request Status: " + requestStatus);
            }
 
            if(requestStatus == "ready")
            {
                string ReportOutputPath = @"\\<Hostname>\<ReportOutputDirectory>\";
                string ReportOutputFile = "CustomerReport - " + DateTime.Now.ToString("yyyyMMdd_HHmmssff") + ".pdf";
                client.DownloadFile("http://<Hostname>:8080/jasperserver/rest_v2/reportExecutions/" 
                    + Uri.EscapeDataString(requestId) + "/exports/" + Uri.EscapeDataString(exportId) 
                    + "/outputResource", ReportOutputPath + ReportOutputFile);
 
                Process.Start(ReportOutputPath + ReportOutputFile);
 
            }
 
            client.Dispose();
        }
    }
}

trboyden's picture
Joined: Feb 6 2017 - 4:03pm
Last seen: 2 years 4 months ago

0 Answers:

No answers yet
Feedback