BIRT:脚本数据源无法访问公共方法

时间:2017-05-23 09:25:31

标签: birt

我正在尝试使用我的应用程序(java 1.8)中的pojos设置脚本数据源。 我通过maven在我的应用程序中嵌入了一个reportengine(4.4.0),并创建了一个带有脚本数据的报告。报告中可以看到pojos。

bookSrv = Packages.de.me.service.ReportDataService;

作品。

我可以访问我的对象的静态方法,但无论我尝试什么,访问公共方法或字段都会导致异常。

所以

books = bookSrv.books;

给出

org.mozilla.javascript.EvaluatorException:Java类“de.me.service.ReportDataService”没有名为“books”的公共实例字段或方法。 (/报告/数据集/脚本数据集[@ ID = “5”] /方法[@名称= “开放”]#11) 或

books = bookSrv.showMyBooks('Peter');

给出

org.mozilla.javascript.EvaluatorException:Java类“de.my.service.ReportDataService”没有名为“showMyBooks”的公共实例字段或方法。 (/报告/数据集/脚本数据集[@ ID = “5”] /方法[@名称= “开放”]#11)

可是:

books = Packages.me.tdesk.service.ReportDataService.myBooksStatic('Peter');

像预期的那样工作。 (只是围绕我的方法的静态包装)

这是我的java类:

package de.me.service;

import de.me.model.dto.BookDto;

import java.util.ArrayList;
import java.util.List;

public class ReportDataService {

    public ReportDataService() {
        books = showMyBooks("Peter");
        System.out.println("ReportDataService.init()");
    }

    private List<BookDto> books;

    public List<BookDto> getBooks() {
        return books;
    }

    public void setBooks(List<BookDto> books) {
        this.books = books;
    }



    public List<BookDto> showMyBooks(String commodity){
        BookDto dto = new BookDto(12l, "otto", "My", 12l);
        List<BookDto> books = new ArrayList<>();
        books.add(dto);
        dto = new BookDto(122l, "paul", "My", 122l);
        books.add(dto);
        return books;
    }


    public static List<BookDto> myBooksStatic(String commodity){
        ReportDataService rep = new ReportDataService();
        return rep.showMyBooks(commodity);
    }
}

非常感谢 乌利

1 个答案:

答案 0 :(得分:0)

嗯...

不应该是

bookSrv = new Packages.de.me.service.ReportDataService(...);

而不是

bookSrv = Packages.de.me.service.ReportDataService;

对于第二个,bookSrv将是Java ReportDataService(它是Rhinoscript中的一个对象),而不是该类的实例