Search code examples
phprestxamppjasper-reportsjasperserver

PHP JasperReports Server API Error


I am trying to ultimately run and display reports from a remote Jasper Server in a PHP application. What I am trying to do this with is the jrs-rest-php-client project on github.

The error:

Fatal error: Uncaught exception 'Jaspersoft\Exception\RESTRequestException' with message 'An unexpected HTTP status code was returned by the server' in C:\xampp\htdocs\jrs\vendor\src\Jaspersoft\Tool\RESTRequest.php:409 
Stack trace: 
#0 C:\xampp\htdocs\jrs\vendor\src\Jaspersoft\Tool\RESTRequest.php(479): Jaspersoft\Tool\RESTRequest->handleError(0, Array, false) 
#1 C:\xampp\htdocs\jrs\vendor\src\Jaspersoft\Service\ReportService.php(40): Jaspersoft\Tool\RESTRequest->prepAndSend('https://jasper....', Array, 'GET', NULL, true) 
#2 C:\xampp\htdocs\jrs\report.php(30): Jaspersoft\Service\ReportService->runReport('/Reports/Distri...', 'html') 
#3 {main} thrown in C:\xampp\htdocs\jrs\vendor\src\Jaspersoft\Tool\RESTRequest.php on line 409

My PHP:

require_once __DIR__ . "/vendor/autoload.php";
use Jaspersoft\Client\Client;
$d = new Client(
    "http://jasper.server.com/jasperserver-pro",
    "username",
    "password",
    "organization"
);  
$info = $d->serverInfo();

Any ideas?


Solution

  • Looking into the code of RESTRequest.php there are two cases in which this exception is thrown:

    • A JSON result set with an unknown error code is returned (unknown meaning different from 200 OK)
    • No JSON result set is returned at all

    So I suspect the connection isn't working properly. To find out more, you should catch the exception in your code and evaluate it:

    It could look something like this (I'm more familiar with Java):

    try {
        $d = new Client(
            "http://jasper.server.com/jasperserver-pro",
            "username",
            "password",
            "organization"
        );  
    
        $info = $d->serverInfo();
    
    } catch (RESTRequestException $e) {
        echo 'RESTRequestException:';
        echo 'Exception message:   ',  $e->getMessage(), "\n";
        echo 'Set parameters:      ',  $e->parameters, "\n";
        echo 'Expected status code:',  $e->expectedStatusCodes, "\n";
        echo 'Error code:          ',  $e->errorCode, "\n";
    }
    

    If there is still an error, you can check the following:

    • Can you reach the jasper server from the server where this code is deployed? Sometimes e.g. firewall settings can interfere.
    • Is the organization called exactly like defined in the properties of the organization in the server? (Open repository / right click on organization / properties / resource-id)