1

我必须为 Jasper 报告编写 PHP 前端。我可以使用 jasper REST 调用成功连接到服务器、验证和查看存储库。但是,当我尝试访问报告时,响应正文中出现以下错误:

未找到报告(在会话中未找到 uuid)

php代码如下:

   $uri = "http://localhost:8080/jasperserver/rest/report/samples/Client_Information_Report?RUN_OUTPUT_FORMAT=html";

    //PUT request to run the report
    $response = Httpful\Request::put($uri, $payload)
    ->authenticateWith("jasperadmin", "jasperadmin")
    ->send();

    $xml = new SimpleXMLElement($response->body);
    $uuid = (String)$xml->uuid; //The uuid is successfully returned

    $uri = "http://localhost:8080/jasperserver/rest/report/$uuid?file=report";
    $report = Httpful\Request::get($uri)
              ->authenticateWith("jasperadmin", "jasperadmin")
              ->send();

我能够确认第一个 PUT 返回了一个 uuid。我在这里有什么遗漏吗?任何帮助表示赞赏。

4

1 回答 1

2

珍妮兹,

首先检查来自 PUT 响应的信息,看看是否确实生成了一个报告并且该报告不为空,您应该收到如下信息:

<report>
    <uuid>d7bf6c9-9077-41f7-a2d4-8682e74b637e</uuid>
    <originalUri>/reports/samples/AllAccounts</originalUri>
    <totalPages>43</totalPages>
    <startPage>1</startPage>
    <endPage>43</endPage>
    <file type="image/png">img_0_0_0</file>
    <file type="image/gif">px</file>
    <file type="text/html">report</file>
    <file type="image/jpeg">img_0_42_27</file>
    <file type="image/png">img_0_42_26</file>
</report>

注意页数和可用文件。

我没有使用过 Httpful 库,但要检查的另一件事是该库使用基本身份验证的方式。可能会发生第二次呼叫让您再次登录并创建新会话;这就是您找不到当前会话的 UUID 的原因。

我在 GitHub 中有一个完整的JasperServer 和 PHP示例,您可以查看它,它实现了存储库浏览和输入控件呈现。我不确定您使用的是什么版本的 JasperReports Server,但在新版本中,有一个新的 REST API 可以更轻松地请求报告;查看JasperReports 服务器 Web 服务指南(第 3.2 节)。我在我的项目的JRS-Wrapper分支中实现了它。

希望这可以帮助!!

马里亚诺

于 2013-02-22T17:05:37.527 回答