Problem:A job is scheduled jasper REST_v2 API with date parameter, job descriptor some thing like: | [toc] |
{ "version" : 0, "username" : "jasperadmin", "label" : "Some label", "description" : "Some descr", "trigger" : { "simpleTrigger": { "version" : 0, "timezone" : "America\/New_York", "calendarName" : null, "startType" : 1, "startDate" : null, "endDate" : null, "misfireInstruction" : 0, "occurrenceCount" : 1, "recurrenceInterval" : -1, "recurrenceIntervalUnit": "" } }, "source" : { "reportUnitURI": "\/some\/path\/toReport", "parameters" : { "parameterValues": { "EndDate" : "2015-05-07 00:00", "StartDate" : "2015-05-01 00:00", "REPORT_TIME_ZONE": "America\/New_York", "UserID" : 105 } } }, "baseOutputFilename" : "some output", "outputLocale" : "en-US", "mailNotification" : { "version" : 0, "toAddresses" : { "address": ["user@jasperserver"] }, "ccAddresses" : { "address": [] }, "bccAddresses" : { "address": [] }, "subject" : "Some subject", "messageText" : "See attached report.", "skipEmptyReports" : false, "messageTextWhenJobFails" : null, "includingStackTraceWhenJobFails" : false, "skipNotificationWhenJobFails" : false, "resultSendType" : "SEND_ATTACHMENT" }, "alert" : null, "outputTimeZone" : "America\/New_York", "repositoryDestination": { "version": 0, "folderURI" : null, "sequentialFilenames" : false, "overwriteFiles" : false, "outputDescription" : null, "timestampPattern" : null, "saveToRepository" : false, "defaultReportOutputFolderURI" : null, "usingDefaultReportOutputFolderURI": false, "outputLocalFolder" : null },
When this request is sent to the server an error is thrown:
An error occurred while executing it.
[see nested exception: java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Date]
at com.jaspersoft.jasperserver.api.engine.scheduling.quartz.ReportExecutionJob.throwJobExecutionException(ReportExecution Job.java:338)
at com.jaspersoft.jasperserver.api.engine.scheduling.quartz.ReportExecutionJob.checkExceptions(ReportExecutionJob.java:33 0)
at com.jaspersoft.jasperserver.api.engine.scheduling.quartz.ReportExecutionJob.executeAndSendReport(ReportExecutionJob.java:605)
at com.jaspersoft.jasperserver.api.engine.scheduling.quartz.ReportExecutionJob.execute(ReportExecutionJob.java:222)
at com.jaspersoft.ji.report.options.engine.ReportOptionsExecutionJob.execute(ReportOptionsExecutionJob.java:49)
at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557)
Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Date
at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.setDate(JRJdbcQueryExecuter.java:649)
at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.setStatementParameter(JRJdbcQueryExecuter.java:577)
at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.setStatementParameter(JRJdbcQueryExecuter.java:399)
at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter$1.visit(JRJdbcQueryExecuter.java:332)
at net.sf.jasperreports.engine.query.JRAbstractQueryExecuter$QueryParameter.accept(JRAbstractQueryExecuter.java:157)
at net.sf.jasperreports.engine.query.JRAbstractQueryExecuter.visitQueryParameters(JRAbstractQueryExecuter.java:646)
at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createStatement(JRJdbcQueryExecuter.java:317)
at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:196)
at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:1114)
at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:691)
at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1314)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:931)
at net.sf.jasperreports.engine.fill.BaseFillHandle$ReportFiller.run(BaseFillHandle.java:120)
Solution:
First of all you need to make sure that the ContentType of the reuest is set to application/job+json. This is very important because otherwise the type unmarshalling will be incorrect and cause errors.
Secondly to pass the values you need to use the following syntax: "parameterName": ["value"]
Something like this:
"parameters": { "parameterValues": { "date": ["2014-12-01T00:00:00+00:00"] } }
Here is an example of a valid and correct job descriptor:
Content-Type: application/job+json { "version" : 0, "username" : "superuser", "label" : "test", "description" : "", "trigger" : { "simpleTrigger": { "id" : 3816, "version" : 0, "timezone" : "America/Los_Angeles", "calendarName" : null, "startType" : 2, "startDate" : "2015-09-26 10:00", "endDate" : null, "misfireInstruction": 0, "occurrenceCount" : 1, "recurrenceInterval": null } }, "source" : { "reportUnitURI": "/organizations/organization_1/AdditionalResourcesForTesting/Reports_With_Controls/Date/Date_equals_2_1_1", "parameters" : { "parameterValues" : { "date": ["2014-12-01T00:00:00+00:00"] } } }, "baseOutputFilename" : "Cascading_multi_select_report", "outputLocale" : "", "mailNotification" : null, "alert" : { "id" : 0, "version" : -1, "recipient" : "OWNER_AND_ADMIN", "toAddresses" : { "address": [] }, "jobState" : "FAIL_ONLY", "messageText" : null, "messageTextWhenJobFails": null, "subject" : null, "includingStackTrace" : true, "includingReportJobInfo" : true }, "outputTimeZone" : "America/Los_Angeles", "repositoryDestination": { "id" : 3817, "version" : 0, "folderURI" : "/organizations/organization_1/reports", "sequentialFilenames" : false, "overwriteFiles" : false, "outputDescription" : "", "timestampPattern" : null, "saveToRepository" : true, "defaultReportOutputFolderURI" : null, "usingDefaultReportOutputFolderURI": false, "outputLocalFolder" : null, "outputFTPInfo" : { "userName" : null, "password" : null, "folderPath": null, "serverName": null } }, "outputFormats" : { "outputFormat": ["PDF"] } }
Recommended Comments
There are no comments to display.