IllegalArgumentException:期望的原始类,但是得到了UnsignedLong

时间:2014-07-17 06:03:42

标签: google-bigquery

这里是代码段

`GoogleCredential凭证=新的GoogleCredential();          credential.setAccessToken(tv.trim());           GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(                     TRANSPORT,JSON_FACTORY,CLIENT_ID,CLIENT_SECRET,Arrays.asList(BigqueryScopes.BIGQUERY))                     .build();

    Credential c =  flow.createAndStoreCredential(oauth2callback.tokens, null);

    bigquery = new Bigquery(TRANSPORT, JSON_FACTORY, c);



     Datasets.List datasetRequest = bigquery.datasets().list("real-time-insight");
        DatasetList datasetList = datasetRequest.execute();
        if (datasetList.getDatasets() != null) {
          List<DatasetList.Datasets> datasets = datasetList.getDatasets();
          System.out.println(" ");
          System.out.println("Available datasets\n----------------");
          System.out.println("    "+datasets.toString()+"  ");
          System.out.println(" ");
          for (DatasetList.Datasets dataset : datasets) {
            System.out.format("%s\n", dataset.getDatasetReference().getDatasetId());
            System.out.println(" ");
          }
        }

    /* DatasetList list = bigquery.datasets().list("real-time-insight").execute();
        out.println(list);
        System.out.println("lists are ::  "+list);*/
        String query = "select * from [ajay.export] where From_State like '%Alabama%' LIMIT 1";
      // QueryResponse response=null;



        Job job = new Job();
        JobConfiguration config = new JobConfiguration();
        JobConfigurationQuery queryConfig = new JobConfigurationQuery();
        config.setQuery(queryConfig);

        job.setConfiguration(config);
        queryConfig.setQuery(query);

        Insert insert = bigquery.jobs().insert("real-time-insight", job);

        insert.setProjectId("real-time-insight");
        JobReference jobId = insert.execute().getJobReference();
        System.out.println(" ");

        System.out.println("job id : " +jobId);
        System.out.println(" ");
        Job pollJob = bigquery.jobs().get("real-time-insight", jobId.getJobId()).execute();
        if (pollJob.getStatus().getState().equals("DONE")) 
        {
            System.out.println(" ");
             System.out.format("Job status %s: %s\n", 
               jobId.getJobId(), pollJob.getStatus().getState());
             System.out.println(" ");
        }
        else
        {
             try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.println("1. here");
        System.out.println(" ");
        System.out.println("poll job id is :: "+pollJob.getJobReference().getJobId());


       String pageToken=null; 
        System.out.println(" ");
        System.out.println("1. here  " );
        System.out.println(" ");

        GetQueryResultsResponse queryResult = bigquery.jobs()
                .getQueryResults(
                    "real-time-insight",  pollJob.getJobReference().getJobId())
                      .setPageToken(pageToken).execute();


        if (queryResult.getJobComplete()) {
              List<TableRow> rows = queryResult.getRows();

                System.out.print("\nQuery Results:\n------------\n");

                for (TableRow row : rows) {
                  for (TableCell field : row.getF()) {
                  System.out.printf("%-50s", field.getV());
                   }
                  System.out.println();
                }

            pageToken = queryResult.getPageToken();
            if (null == pageToken) {
              return;
            }
          }

        System.out.println("12345. here");



       /* List<TableRow> rows = queryResult.getRows();

        System.out.print("\nQuery Results:\n------------\n");

        for (TableRow row : rows) {
          for (TableCell field : row.getF()) {
          System.out.printf("%-50s", field.getV());
           }
          System.out.println();
        }`

堆栈跟踪

java.lang.IllegalArgumentException:[key totalRows,field private com.google.common.primitives.UnsignedLong com.google.api.services.bigquery.model.QueryResponse.totalRows]     在com.google.api.client.json.JsonParser.parseValue(JsonParser.java:630)     在com.google.api.client.json.JsonParser.parse(JsonParser.java:342)     在com.google.api.client.json.JsonParser.parseValue(JsonParser.java:578)     在com.google.api.client.json.JsonParser.parse(JsonParser.java:281)     在com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:87)     在com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:81)     在com.google.api.client.http.HttpResponse.parseAs(HttpResponse.java:459)     在com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:470)     在com.ajay.oauth.BigQueryHandler1.doGet(BigQueryHandler1.java:61)     在javax.servlet.http.HttpServlet.service(HttpServlet.java:617)     在javax.servlet.http.HttpServlet.service(HttpServlet.java:717)     在org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)     在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1166)     在com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)     在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)     在com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:127)     在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)     在com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)     在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)     在com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)     在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)     在com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)     在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)     在com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)     在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)     在com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366)     在com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349)     在com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116)     在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)     在org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)     在org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)     在org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)     在org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)     在org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)     在com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:98)     在org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)     在com.google.appengine.tools.development.JettyContainerService $ ApiProxyHandler.handle(JettyContainerService.java:490)     在org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)     在org.mortbay.jetty.Server.handle(Server.java:326)     在org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)     at org.mortbay.jetty.HttpConnection $ RequestHandler.headerComplete(HttpConnection.java:923)     在org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547)     在org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)     在org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)     在org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)     在org.mortbay.thread.QueuedThreadPool $ PoolThread.run(QueuedThreadPool.java:582) 引起:java.lang.IllegalArgumentException:期望的原始类,但得到:class com.google.common.primitives.UnsignedLong     在com.google.api.client.util.Data.parsePrimitiveValue(Data.java:453)     在com.google.api.client.json.JsonParser.parseValue(JsonParser.java:628)

1 个答案:

答案 0 :(得分:0)

免责声明:我没有BigQuery的第一手经验,以下是一般编程推理

根据Guava docsUnsignedLong是无符号长值的包装类。另外,根据文档,它有一个longValue()方法,正如您所料,它以long形式返回值。

在某处(确切地说,您发布的代码中没有立即显示),您有一个(可能是间接地)调用com.google.api.client.util.Data.parsePrimitiveValue(Data.java:453)的方法,它看起来像这样(source):

public static Object parsePrimitiveValue(Type type, String stringValue) {
    Class<?> primitiveClass = type instanceof Class<?> ? (Class<?>) type : null;
    ...
    if (primitiveClass == Character.class || primitiveClass == char.class) {....}
    if (primitiveClass == Boolean.class || primitiveClass == boolean.class) {... }

    //checks for each primitive class to see if it matches the type passed in
    //if no primitive type is matched:
    throw new IllegalArgumentException("expected primitive class, but got: " + type);
}

显然,这个方法是使用类型参数UnsignedLong调用的。你需要找出发生的位置(提示:遵循堆栈跟踪),然后找出传递给它的参数的来源(提示:进一步跟踪堆栈跟踪)。我打赌你会找到一种方法来解决这个问题:

someMethod(){
 UnsignedLong val;
 ...
 parsePrimitiveValue(val.getClass().getName(), val.toString());
 ...
}

因此,弄清楚如何将对某事的调用改为

parsePrimitiveValue(Long.class.getName(),  val.longValue().toString())