Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Archived » BIRT » POJO Data Set and HttpClient(POJO Data Set and HttpClient)
POJO Data Set and HttpClient [message #1718711] Tue, 29 December 2015 11:37
Gniewko Ostrowski is currently offline Gniewko OstrowskiFriend
Messages: 1
Registered: December 2015
Junior Member
Hello, I have a problem while using a simple HttpClient connection from a POJO data source, I have a class:

package pl.m.olap.base;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

public abstract class BaseDataSource<T> {

    private Iterator<T> iterator;
    private Map<String, Object> dataSetParamValues;

    public abstract List<T> fetch();

    public void open(Object appContext, Map<String, Object> dataSetParamValues) {
        this.dataSetParamValues = dataSetParamValues;
        iterator = fetch().iterator();
    }

    public Object next() {
        if (iterator != null && iterator.hasNext()) {
            return iterator.next();
        }
        return null;
    }
    public void close() {
    }
}


package pl.m.olap.dataset;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import pl.mikronika.olap.base.BaseDataSource;
import pl.mikronika.olap.base.BaseWebClientBuilder;
import pl.mikronika.olap.dto.MOlapLocation;
import pl.mikronika.olap.logic.LocationService;
import pl.mikronika.olap.response.Response;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class MOlapProvinceDataSet extends BaseDataSource<MOlapLocation> {

    @Override
    public List<MOlapLocation> fetch() {
        HttpClient httpClient = BaseWebClientBuilder.create();
        Gson gson = new GsonBuilder().create();
        HttpGet getRequest = new HttpGet(
                "http://127.0.0.1:8080/oc/api/olap/datasources/dimension/location?type=PROVINCE");

        getRequest.addHeader("accept", "application/json");
        String responseString = "";
        try {
            HttpResponse response = httpClient.execute(getRequest);
            if (response.getStatusLine().getStatusCode() != 200) {
                throw new RuntimeException("Failed : HTTP error code : "
                        + response.getStatusLine().getStatusCode());
            }

            BufferedReader br = new BufferedReader(
                    new InputStreamReader((response.getEntity().getContent())));

            String output;
            while ((output = br.readLine()) != null) {
                //System.out.println(output);
                responseString += output;
            }

        } catch (IOException e) {
        }

        Response response = gson.fromJson(responseString, Response.class);

        List<MOlapLocation> locations = new ArrayList();
        if (!response.data.isEmpty()) {
            response.data.stream().forEach((name) -> {
                System.out.println("name = " + name);
                locations.add(new MOlapLocation((String) name));
            });
        }
        return locations;
    }
}


and when adding this DataSet to BIRT and trying to get the data it throws

Quote:
org.eclipse.birt.data.engine.odaconsumer.OdaDataException: Cannot execute the statement.
org.eclipse.datatools.connectivity.oda.OdaException ;
java.lang.reflect.InvocationTargetException
at org.eclipse.birt.data.engine.odaconsumer.ExceptionHandler.newException(ExceptionHandler.java:52)
at org.eclipse.birt.data.engine.odaconsumer.ExceptionHandler.throwException(ExceptionHandler.java:108)
at org.eclipse.birt.data.engine.odaconsumer.ExceptionHandler.throwException(ExceptionHandler.java:84)
at org.eclipse.birt.data.engine.odaconsumer.PreparedStatement.execute(PreparedStatement.java:586)
at org.eclipse.birt.data.engine.executor.DataSourceQuery.execute(DataSourceQuery.java:978)
at org.eclipse.birt.data.engine.impl.PreparedOdaDSQuery$OdaDSQueryExecutor.executeOdiQuery(PreparedOdaDSQuery.java:607)
at org.eclipse.birt.data.engine.impl.QueryExecutor.execute(QueryExecutor.java:1251)
at org.eclipse.birt.data.engine.impl.ServiceForQueryResults.executeQuery(ServiceForQueryResults.java:233)
at org.eclipse.birt.data.engine.impl.QueryResults.getResultIterator(QueryResults.java:178)
at org.eclipse.birt.report.engine.api.impl.ExtractionResults.nextResultIterator(ExtractionResults.java:157)
at org.eclipse.birt.report.designer.data.ui.dataset.DataSetPreviewer.preview(DataSetPreviewer.java:69)
at org.eclipse.birt.report.designer.data.ui.dataset.ResultSetPreviewPage$5.run(ResultSetPreviewPage.java:372)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:119)
Caused by: org.eclipse.datatools.connectivity.oda.OdaException ;
java.lang.reflect.InvocationTargetException
at org.eclipse.birt.data.oda.pojo.impl.internal.PojoDataSetFromCustomClass.open(PojoDataSetFromCustomClass.java:194)
at org.eclipse.birt.data.oda.pojo.impl.Query.executeQuery(Query.java:131)
at org.eclipse.datatools.connectivity.oda.consumer.helper.OdaQuery.doExecuteQuery(OdaQuery.java:480)
at org.eclipse.datatools.connectivity.oda.consumer.helper.OdaQuery.executeQuery(OdaQuery.java:444)
at org.eclipse.birt.data.engine.odaconsumer.PreparedStatement.execute(PreparedStatement.java:575)
... 9 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.eclipse.birt.data.oda.pojo.impl.internal.PojoDataSetFromCustomClass.open(PojoDataSetFromCustomClass.java:180)
... 13 more
Caused by: java.lang.NullPointerException
at pl.mikronika.olap.dataset.MOlapProvinceDataSet.fetch(MOlapProvinceDataSet.java:41)
at pl.mikronika.olap.base.BaseDataSource.open(BaseDataSource.java:20)
... 18 more


it is the error line, it works fine if i use it outside the birt designer/viewer, HttpResponse response = httpClient.execute(getRequest);

I have a shaded jar added to Eclipse with this DataSource, which has the HttpClient inside.

Please help
Previous Topic:How to pass the value of one data set into the another dataset?
Next Topic:Passing date parameter to birt report through url
Goto Forum:
  


Current Time: Wed Apr 24 17:00:32 GMT 2024

Powered by FUDForum. Page generated in 0.02744 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top