2017-05-23 1 views
0

J'essaie de configurer une source de données scriptée en utilisant pojos de mon application (java 1.8). J'ai intégré un reportengine (4.4.0) dans mon application via maven et j'ai créé un rapport avec un script scénarisé. Les pojos peuvent être vus par le rapport.BIRT: la source de données scriptée ne peut pas accéder aux méthodes publiques

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

fonctionne.

Je peux accéder aux méthodes statiques de mon objet, mais quoi que j'essaie, l'accès aux méthodes publiques ou aux champs entraîne une exception.

Alors

books = bookSrv.books; 

donne

org.mozilla.javascript.EvaluatorException: classe Java "de.me.service.ReportDataService" n'a pas de champ d'instance public méthode nommée "livres". (/ Rapport/ensembles de données/script-ensemble de données [@ id = "5"]/méthode [@ name = "ouvert"] # 11) ou

books = bookSrv.showMyBooks('Peter'); 

donne

org

. mozilla.javascript.EvaluatorException: La classe Java "de.my.service.ReportDataService" n'a pas de champ d'instance publique ou de méthode nommée "showMyBooks". (/ Rapport/ensembles de données/script-ensemble de données [@ id = "5"]/méthode [@ name = "ouvert"] # 11)

Mais:

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

fonctionne comme prévu . (Il suffit d'une enveloppe statique autour de ma méthode)

ici est ma classe 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); 
    } 
} 

Un grand merci Uli

Répondre

0

Hmm ...

devrait-il pas

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

au lieu de

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

?

Avec le second, bookSrv sera la Java classe ReportDataService (qui est un objet en Rhinoscript), pas un exemple de la classe.

+0

... ou, si votre ReportDataService est un singleton, peut-être bookSrv = Packages.de.me.service.ReportDataService.getInstance()? – hvb