"No map fields found in com.google.cloud.compute.v1.Instance" error when getting instances in Google Cloud API Java

29 views Asked by At

I am trying to get the instances information with Google Cloud API in Java. When I send the list request I get an exception. Can you tell me why I getting this exception?

I do not know about the protocol buffers and the error message does not give much clue.

Best regards,

The code:

InputStream stream = GoogleComputeServiceImpl.class.getResourceAsStream("/google_service_account.json");
        FixedCredentialsProvider fixedCredentialsProvider = FixedCredentialsProvider.create(
                ComputeEngineCredentials.fromStream(stream));
        InstancesClient instancesClient =         InstancesClient.create(InstancesSettings.newBuilder().setCredentialsProvider(fixedCredentialsProvider).build());

ListInstancesRequest request =
        ListInstancesRequest.newBuilder()
                .setProject("my-project-name")
                .setReturnPartialSuccess(true)
                .setZone("europe-west3-c")
                .build();

try {
    InstancesClient.ListPagedResponse list = instancesClient.list(request);
    list.iterateAll().forEach(instance -> {
        log.info("Instance: " + instance.getName());
        log.info("Description: " + instance.getDescription());
        log.info("Hostname: " + instance.getHostname());

        instance.getNetworkInterfacesList().forEach(networkInterface -> {
            log.info("Network interface: " + networkInterface.getName());
            networkInterface.getAccessConfigsList().forEach(accessConfig -> {
                log.info("Access config: " + accessConfig.getName());
                log.info("IP: " + accessConfig.getNatIP());
            });
        });
    });
} catch (Exception e) {
    log.error("Error: ", e);
}

The error I got:

com.google.api.gax.rpc.CancelledException: Exception in message delivery at com.google.api.gax.rpc.ApiExceptionFactory.createException(ApiExceptionFactory.java:48) ~[gax-2.45.0.jar:2.45.0] at com.google.api.gax.httpjson.HttpJsonApiExceptionFactory.createApiException(HttpJsonApiExceptionFactory.java:76) ~[gax-httpjson-2.45.0.jar:2.45.0] at com.google.api.gax.httpjson.HttpJsonApiExceptionFactory.create(HttpJsonApiExceptionFactory.java:58) ~[gax-httpjson-2.45.0.jar:2.45.0] at com.google.api.gax.httpjson.HttpJsonExceptionCallable$ExceptionTransformingFuture.onFailure(HttpJsonExceptionCallable.java:97) ~[gax-httpjson-2.45.0.jar:2.45.0] at com.google.api.core.ApiFutures$1.onFailure(ApiFutures.java:84) ~[api-common-2.28.0.jar:2.28.0] at com.google.common.util.concurrent.Futures$CallbackListener.run(Futures.java:1127) ~[guava-32.1.3-jre.jar:na] at com.google.common.util.concurrent.DirectExecutor.execute(DirectExecutor.java:31) ~[guava-32.1.3-jre.jar:na] at com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:1286) ~[guava-32.1.3-jre.jar:na] at com.google.common.util.concurrent.AbstractFuture.complete(AbstractFuture.java:1055) ~[guava-32.1.3-jre.jar:na] at com.google.common.util.concurrent.AbstractFuture.setException(AbstractFuture.java:807) ~[guava-32.1.3-jre.jar:na] at com.google.api.core.AbstractApiFuture$InternalSettableFuture.setException(AbstractApiFuture.java:92) ~[api-common-2.28.0.jar:2.28.0] at com.google.api.core.AbstractApiFuture.setException(AbstractApiFuture.java:74) ~[api-common-2.28.0.jar:2.28.0] at com.google.api.gax.httpjson.HttpJsonClientCalls$HttpJsonFuture.setException(HttpJsonClientCalls.java:132) ~[gax-httpjson-2.45.0.jar:2.45.0] at com.google.api.gax.httpjson.HttpJsonClientCalls$FutureListener.onClose(HttpJsonClientCalls.java:166) ~[gax-httpjson-2.45.0.jar:2.45.0] at com.google.api.gax.httpjson.HttpJsonClientCallImpl$OnCloseNotificationTask.call(HttpJsonClientCallImpl.java:552) ~[gax-httpjson-2.45.0.jar:2.45.0] at com.google.api.gax.httpjson.HttpJsonClientCallImpl.notifyListeners(HttpJsonClientCallImpl.java:391) ~[gax-httpjson-2.45.0.jar:2.45.0] at com.google.api.gax.httpjson.HttpJsonClientCallImpl.deliver(HttpJsonClientCallImpl.java:318) ~[gax-httpjson-2.45.0.jar:2.45.0] at com.google.api.gax.httpjson.HttpJsonClientCallImpl.setResult(HttpJsonClientCallImpl.java:164) ~[gax-httpjson-2.45.0.jar:2.45.0] at com.google.api.gax.httpjson.HttpRequestRunnable.run(HttpRequestRunnable.java:149) ~[gax-httpjson-2.45.0.jar:2.45.0] at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) ~[na:na] at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) ~[na:na] at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) ~[na:na] at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[na:na] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na] at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na] Suppressed: com.google.api.gax.rpc.AsyncTaskException: Asynchronous task failed at com.google.api.gax.rpc.ApiExceptions.callAndTranslateApiException(ApiExceptions.java:57) ~[gax-2.45.0.jar:2.45.0] at com.google.api.gax.rpc.UnaryCallable.call(UnaryCallable.java:112) ~[gax-2.45.0.jar:2.45.0] at com.google.cloud.compute.v1.InstancesClient.list(InstancesClient.java:3117) ~[google-cloud-compute-1.48.0.jar:1.48.0] at org.service.impl.GoogleComputeServiceImpl.getProxyIp(GoogleComputeServiceImpl.java:49) ~[classes/:na] at org.controller.MyController.getProxyUrl(MyController.java:22) ~[classes/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.26.jar:5.3.26] at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.26.jar:5.3.26] at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.26.jar:5.3.26] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.26.jar:5.3.26] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.26.jar:5.3.26] at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.26.jar:5.3.26] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) ~[spring-webmvc-5.3.26.jar:5.3.26] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) ~[spring-webmvc-5.3.26.jar:5.3.26] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.26.jar:5.3.26] at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.26.jar:5.3.26] at javax.servlet.http.HttpServlet.service(HttpServlet.java:502) ~[tomcat-embed-core-9.0.73.jar:4.0.FR] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.26.jar:5.3.26] at javax.servlet.http.HttpServlet.service(HttpServlet.java:596) ~[tomcat-embed-core-9.0.73.jar:4.0.FR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) ~[tomcat-embed-core-9.0.73.jar:9.0.73] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.73.jar:9.0.73] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.73.jar:9.0.73] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.73.jar:9.0.73] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.73.jar:9.0.73] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.26.jar:5.3.26] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.26.jar:5.3.26] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.73.jar:9.0.73] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.73.jar:9.0.73] at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.26.jar:5.3.26] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.26.jar:5.3.26] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.73.jar:9.0.73] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.73.jar:9.0.73] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.26.jar:5.3.26] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.26.jar:5.3.26] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[tomcat-embed-core-9.0.73.jar:9.0.73] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[tomcat-embed-core-9.0.73.jar:9.0.73] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) ~[tomcat-embed-core-9.0.73.jar:9.0.73] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-9.0.73.jar:9.0.73] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:492) ~[tomcat-embed-core-9.0.73.jar:9.0.73] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) ~[tomcat-embed-core-9.0.73.jar:9.0.73] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-9.0.73.jar:9.0.73] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-9.0.73.jar:9.0.73] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.73.jar:9.0.73] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389) ~[tomcat-embed-core-9.0.73.jar:9.0.73] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-9.0.73.jar:9.0.73] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) ~[tomcat-embed-core-9.0.73.jar:9.0.73] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) ~[tomcat-embed-core-9.0.73.jar:9.0.73] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.73.jar:9.0.73] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.73.jar:9.0.73] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.73.jar:9.0.73] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.73.jar:9.0.73] ... 1 common frames omitted

Caused by: com.google.api.gax.httpjson.HttpJsonStatusRuntimeException: Exception in message delivery at com.google.api.gax.httpjson.HttpJsonClientCallImpl.deliver(HttpJsonClientCallImpl.java:368) ~[gax-httpjson-2.45.0.jar:2.45.0] ... 9 common frames omitted

Caused by: com.google.api.gax.httpjson.RestSerializationException: Failed to parse response message at com.google.api.gax.httpjson.ProtoRestSerializer.fromJson(ProtoRestSerializer.java:107) ~[gax-httpjson-2.45.0.jar:2.45.0] at com.google.api.gax.httpjson.ProtoMessageResponseParser.parse(ProtoMessageResponseParser.java:76) ~[gax-httpjson-2.45.0.jar:2.45.0] at com.google.api.gax.httpjson.ProtoMessageResponseParser.parse(ProtoMessageResponseParser.java:41) ~[gax-httpjson-2.45.0.jar:2.45.0] at com.google.api.gax.httpjson.HttpJsonClientCallImpl.consumeMessageFromStream(HttpJsonClientCallImpl.java:431) ~[gax-httpjson-2.45.0.jar:2.45.0] at com.google.api.gax.httpjson.HttpJsonClientCallImpl.deliver(HttpJsonClientCallImpl.java:363) ~[gax-httpjson-2.45.0.jar:2.45.0] ... 9 common frames omitted

Caused by: com.google.protobuf.InvalidProtocolBufferException: No map fields found in com.google.cloud.compute.v1.Instance at com.google.protobuf.util.JsonFormat$ParserImpl.merge(JsonFormat.java:1309) ~[protobuf-java-util-3.25.2.jar:na] at com.google.protobuf.util.JsonFormat$Parser.merge(JsonFormat.java:463) ~[protobuf-java-util-3.25.2.jar:na] at com.google.api.gax.httpjson.ProtoRestSerializer.fromJson(ProtoRestSerializer.java:104) ~[gax-httpjson-2.45.0.jar:2.45.0] ... 13 common frames omitted

Caused by: java.lang.IllegalArgumentException: No map fields found in com.google.cloud.compute.v1.Instance at com.google.protobuf.GeneratedMessageV3.internalGetMapField(GeneratedMessageV3.java:2054) ~[protobuf-java-3.24.3.jar:na] at com.google.protobuf.GeneratedMessageV3$FieldAccessorTable$MapFieldAccessor.getMapField(GeneratedMessageV3.java:2814) ~[protobuf-java-3.24.3.jar:na] at com.google.protobuf.GeneratedMessageV3$FieldAccessorTable$MapFieldAccessor.(GeneratedMessageV3.java:2806) ~[protobuf-java-3.24.3.jar:na] at com.google.protobuf.GeneratedMessageV3$FieldAccessorTable.ensureFieldAccessorsInitialized(GeneratedMessageV3.java:2123) ~[protobuf-java-3.24.3.jar:na] at com.google.cloud.compute.v1.Instance$Builder.internalGetFieldAccessorTable(Instance.java:4339) ~[proto-google-cloud-compute-v1-1.48.0.jar:1.48.0] at com.google.protobuf.GeneratedMessageV3$Builder.hasField(GeneratedMessageV3.java:747) ~[protobuf-java-3.24.3.jar:na] at com.google.protobuf.util.JsonFormat$ParserImpl.mergeField(JsonFormat.java:1629) ~[protobuf-java-util-3.25.2.jar:na] at com.google.protobuf.util.JsonFormat$ParserImpl.mergeMessage(JsonFormat.java:1477) ~[protobuf-java-util-3.25.2.jar:na] at com.google.protobuf.util.JsonFormat$ParserImpl.merge(JsonFormat.java:1435) ~[protobuf-java-util-3.25.2.jar:na] at com.google.protobuf.util.JsonFormat$ParserImpl.parseFieldValue(JsonFormat.java:1995) ~[protobuf-java-util-3.25.2.jar:na] at com.google.protobuf.util.JsonFormat$ParserImpl.mergeRepeatedField(JsonFormat.java:1710) ~[protobuf-java-util-3.25.2.jar:na] at com.google.protobuf.util.JsonFormat$ParserImpl.mergeField(JsonFormat.java:1642) ~[protobuf-java-util-3.25.2.jar:na] at com.google.protobuf.util.JsonFormat$ParserImpl.mergeMessage(JsonFormat.java:1477) ~[protobuf-java-util-3.25.2.jar:na] at com.google.protobuf.util.JsonFormat$ParserImpl.merge(JsonFormat.java:1435) ~[protobuf-java-util-3.25.2.jar:na] at com.google.protobuf.util.JsonFormat$ParserImpl.merge(JsonFormat.java:1299) ~[protobuf-java-util-3.25.2.jar:na] ... 15 common frames omitted

1

There are 1 answers

0
DazWilkin On

I am not a Java developer so apologies for what follows.

I tried your code and the following works for me.

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.stackoverflow</groupId>
  <artifactId>question</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>question</name>
  <description>Question: 78237926</description>
  
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>libraries-bom</artifactId>
        <version>26.34.0</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
    </dependency>
    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>google-cloud-compute</artifactId>
    </dependency>
  </dependencies>
</project>

And: com/stackoverflow/Question.java

package com.stackoverflow;

import com.google.cloud.compute.v1.Instance;
import com.google.cloud.compute.v1.InstancesClient;
import com.google.cloud.compute.v1.ListInstancesRequest;

import java.io.IOException;
import java.lang.System;

public class Question {

  public static void main(String[] args) throws IOException {
    String project = System.getenv("PROJECT");
    String zone = System.getenv("ZONE");

    // Uses Application Default Credentials
    InstancesClient instancesClient = InstancesClient.create();
    ListInstancesRequest rqst = ListInstancesRequest.newBuilder()
      .setProject(project)
      .setZone(zone)
      .setReturnPartialSuccess(true)
      .build();

    try {
      InstancesClient.ListPagedResponse list = instancesClient.list(rqst);
      list.iterateAll().forEach(instance -> {
        System.out.printf("Instance: %s\n", instance.getName());
        instance.getNetworkInterfacesList().forEach(networkInterface -> {
          System.out.printf("Network Interface: %s\n", networkInterface.getName());
          networkInterface.getAccessConfigsList().forEach(accessConfig -> {
            System.out.printf("Access Config: %s\n", accessConfig.getName());
          });
        });
      });
    } catch (Exception e) {
      System.out.printf("Error: %s", e);
    }
  }
}

And:

mvn clean && \
mvn package && \
PROJECT=... \
ZONE=... \
mvn exec:java \
--define exec.mainClass="com.stackoverflow.Question" \
--quiet