BIRT重复聚合名称:COUNT。 (1次)

时间:2014-10-27 08:06:49

标签: java maven java-ee report birt

我尝试将BIRT报告与我的webApp集成。 当我在Eclips中打开报告时 - 所有可用信息和渲染正常。 万一,当我尝试从webApp下载此报告时: 在PDF中 - 仅渲染静态文本。 在HTML中 - 我看到了exeption:

Chart (id = 32):
- Duplicate aggregation name: COUNT. (Element ID:32)
Duplicate aggregation name: COUNT. ( 1 time(s) )
detail : org.eclipse.birt.report.engine.api.EngineException: Duplicate aggregation name: COUNT. (Element ID:32)
    at org.eclipse.birt.report.engine.executor.ExecutionContext.addException(ExecutionContext.java:1237)
    at org.eclipse.birt.report.engine.data.dte.ReportQueryBuilder$QueryBuilderVisitor.visitExtendedItem(ReportQueryBuilder.java:693)
    at org.eclipse.birt.report.engine.ir.ExtendedItemDesign.accept(ExtendedItemDesign.java:45)
    at org.eclipse.birt.report.engine.data.dte.ReportQueryBuilder.build(ReportQueryBuilder.java:256)
    at org.eclipse.birt.report.engine.data.dte.ReportQueryBuilder.build(ReportQueryBuilder.java:237)
    at org.eclipse.birt.report.engine.data.dte.AbstractDataEngine.prepare(AbstractDataEngine.java:180)

myServlet:

@WebServlet(name = "GenerateTestBirtServlet", urlPatterns = {"/GenerateTestBirtServlet"})
public class GenerateTestBirtServlet extends HttpServlet {
    private IReportEngine birtEngine;
    private TestBirtService report;
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        {

            String downloadFileName = "MyReport";


            try{
                EngineConfig  config = new EngineConfig();
                Platform.startup(config);
                String reportName = request.getParameter("path");
                ServletContext sc = request.getSession().getServletContext();
                birtEngine = BirtEngine.getBirtEngine(sc);
                IReportEngineFactory factory = (IReportEngineFactory) Platform.createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );
                IReportEngine   engine = factory.createReportEngine( config );
                IReportRunnable reportDoc =  engine.openReportDesign(reportName);


                HTMLRenderOption option = new HTMLRenderOption();
                option.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_HTML);
                response.setHeader(  "Content-Disposition", "attachment; filename="+downloadFileName );
                option.setOutputStream(response.getOutputStream());
                IRunAndRenderTask task = engine.createRunAndRenderTask(reportDoc);
                task.setRenderOption(option);
                task.validateParameters();
                task.run();
                task.close();
                engine.destroy();

            }catch( Exception ex){
                ex.printStackTrace();
            }
            finally
            {
                Platform.shutdown( );
                RegistryProviderFactory.releaseDefault();
            }
        }
    }
}

pom:

<dependency>
            <groupId>org.eclipse.birt.runtime</groupId>
            <artifactId>org.eclipse.birt.runtime</artifactId>
            <version>4.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.birt.runtime</groupId>
            <artifactId>viewservlets</artifactId>
            <version>4.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.ow2.orchestra.eclipse.birt</groupId>
            <artifactId>org.ow2.orchestra.eclipse.birt.report.engine</artifactId>
            <version>3.7.0</version>
        </dependency>

BirtEngine:

public class BirtEngine {

    private static IReportEngine birtEngine = null;

    private static Properties configProps = new Properties();

    private final static String configFile = "BirtConfig.properties";

    public static synchronized void initBirtConfig() {
        loadEngineProps();
    }

    public static synchronized IReportEngine getBirtEngine(ServletContext sc) {
        if (birtEngine == null)
        {
            EngineConfig config = new EngineConfig();
            if( configProps != null){
                String logLevel = configProps.getProperty("logLevel");
                Level level = Level.OFF;
                if ("SEVERE".equalsIgnoreCase(logLevel))
                {
                    level = Level.SEVERE;
                } else if ("WARNING".equalsIgnoreCase(logLevel))
                {
                    level = Level.WARNING;
                } else if ("INFO".equalsIgnoreCase(logLevel))
                {
                    level = Level.INFO;
                } else if ("CONFIG".equalsIgnoreCase(logLevel))
                {
                    level = Level.CONFIG;
                } else if ("FINE".equalsIgnoreCase(logLevel))
                {
                    level = Level.FINE;
                } else if ("FINER".equalsIgnoreCase(logLevel))
                {
                    level = Level.FINER;
                } else if ("FINEST".equalsIgnoreCase(logLevel))
                {
                    level = Level.FINEST;
                } else if ("OFF".equalsIgnoreCase(logLevel))
                {
                    level = Level.OFF;
                }

                config.setLogConfig(configProps.getProperty("logDirectory"), level);
            }

            config.setEngineHome("");
            config.getAppContext().put(EngineConstants.APPCONTEXT_CLASSLOADER_KEY, BirtEngine.class.getClassLoader());


            IPlatformContext context = new PlatformServletContext( sc );
            config.setPlatformContext( context );

            //Create the report engine
            //birtEngine = new ReportEngine( config );
            //ReportEngine engine = new ReportEngine( null );


            try
            {
                Platform.startup( config );
            }
            catch ( BirtException e )
            {
                e.printStackTrace( );
            }

            IReportEngineFactory factory = (IReportEngineFactory) Platform
                    .createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );
            birtEngine = factory.createReportEngine( config );


        }
        return birtEngine;
    }

    public static synchronized void destroyBirtEngine() {
        if (birtEngine == null) {
            return;
        }
        birtEngine.destroy();
        Platform.shutdown();
        birtEngine = null;
    }

    public Object clone() throws CloneNotSupportedException {
        throw new CloneNotSupportedException();
    }

    private static void loadEngineProps() {
        try {
            //Config File must be in classpath
            ClassLoader cl = Thread.currentThread ().getContextClassLoader();
            InputStream in = null;
            in = cl.getResourceAsStream (configFile);
            configProps.load(in);
            in.close();


        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

根据您提供的例外情况:

Duplicate aggregation name: COUNT

这意味着在您的报告文件中,您多次使用名为aggregation COUNT ,将其他聚合重命名为其他内容,例如COUNT_2 ...