У меня несоответствие типов между 'com / google / type / LatLng' и 'com / google / protobuf / GeneratedMessage', и я не могу сказать, почему - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь получить тип класса Value (из google.datastore.v1) из типа Long или даже целого числа, и не могу этого сделать.

Вот часть кода, которая кажется неохотной

import com.google.datastore.v1.Value;

public class EntityHelper {
  public static Value makeValue(final Long value) {
    Value.Builder builder = Value.newBuilder();
    builder.setIntegerValue(value);
    return builder.build();
  }
}

При запуске этот код генерирует следующую ошибку:

com.google.api.server.spi.SystemService invokeServiceMethod: exception occurred while calling backend method (SystemService.java:375)
java.lang.VerifyError: Bad type on operand stack
Exception Details:
  Location:
    com/google/datastore/v1/Value$Builder.setGeoPointValue(Lcom/google/type/LatLng$Builder;)Lcom/google/datastore/v1/Value$Builder; @30: invokevirtual
  Reason:
    Type 'com/google/type/LatLng' (current frame, stack[1]) is not assignable to 'com/google/protobuf/GeneratedMessage'
  Current Frame:
    bci: @30
    flags: { }
    locals: { 'com/google/datastore/v1/Value$Builder', 'com/google/type/LatLng$Builder' }
    stack: { 'com/google/protobuf/SingleFieldBuilder', 'com/google/type/LatLng' }
  Bytecode:
    0x0000000: 2ab4 001a c700 122a 2bb6 007c b500 102a
    0x0000010: b600 37a7 000f 2ab4 001a 2bb6 007c b600
    0x0000020: 5a57 2a10 08b5 0009 2ab0               
  Stackmap Table:
    same_frame(@22)
    same_frame(@34)

    at com.google.datastore.v1.Value.toBuilder(Value.java:749)
    at com.google.datastore.v1.Value.newBuilder(Value.java:743)
    at com.app.data.impl.objectify.EntityHelper.makeValue(EntityHelper.java:931)
    at com.app.data.impl.objectify.EntityHelper.makeValue(EntityHelper.java:903)
    at com.app.apps.client.data.impl.BookingDao.getContactBookings(BookingDao.java:123)
    at com.app.apps.client.reporting.Endpoints.getContactListBookingsDataResponse(Endpoints.java:230)
    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:498)
    at com.google.api.server.spi.SystemService.invokeServiceMethod(SystemService.java:351)
    at com.google.api.server.spi.handlers.EndpointsMethodHandler$RestHandler.handle(EndpointsMethodHandler.java:119)
    at com.google.api.server.spi.handlers.EndpointsMethodHandler$RestHandler.handle(EndpointsMethodHandler.java:102)
    at com.google.api.server.spi.dispatcher.PathDispatcher.dispatch(PathDispatcher.java:50)
    at com.google.api.server.spi.EndpointsServlet.service(EndpointsServlet.java:72)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:848)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1772)
    at com.app.apps.client.servlet.InitializerFilter.doFilter(InitializerFilter.java:27)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1759)
    at net.lightoze.gwt.i18n.server.I18nFilter.doFilter(I18nFilter.java:65)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1759)
    at com.googlecode.objectify.ObjectifyFilter.doFilter(ObjectifyFilter.java:48)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1759)
    at org.slim3.datastore.DatastoreFilter.doFilter(DatastoreFilter.java:55)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1759)
    at com.google.apphosting.utils.servlet.JdbcMySqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:60)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1759)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:582)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:524)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)
    at com.google.apphosting.runtime.jetty9.ParseBlobUploadHandler.handle(ParseBlobUploadHandler.java:119)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1182)
    at com.google.apphosting.runtime.jetty9.AppEngineWebAppContext.doHandle(AppEngineWebAppContext.java:187)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:512)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
    at com.google.apphosting.runtime.jetty9.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:293)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)
    at org.eclipse.jetty.server.Server.handle(Server.java:539)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:333)
    at com.google.apphosting.runtime.jetty9.RpcConnection.handle(RpcConnection.java:213)
    at com.google.apphosting.runtime.jetty9.RpcConnector.serviceRequest(RpcConnector.java:81)
    at com.google.apphosting.runtime.jetty9.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:134)
    at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.dispatchServletRequest(JavaRuntime.java:757)
    at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.dispatchRequest(JavaRuntime.java:720)
    at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:690)
    at com.google.apphosting.runtime.JavaRuntime$NullSandboxRequestRunnable.run(JavaRuntime.java:882)
    at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:270)
    at java.lang.Thread.run(Thread.java:748)

Кажется, я не могу понять, почему эта ошибка генерируется и что я должен сделать, чтобы это исправить, любая помощь приветствуется

1 Ответ

0 голосов
/ 01 апреля 2020

Несколько идей здесь:

import com.google.datastore.v1.Value;

public class EntityHelper {
  public static Value makeValue(final Long value) {
     Value.Builder builder = Value.newBuilder();
     builder.setIntegerValue(value);
     return builder.build();
  }
}

Во-первых, вы устанавливаете длинное целое число. По определению это может привести к потере данных, поскольку long составляет 8 байтов, а целое число составляет 4 байта.

Вы можете попробовать установить тип в тип, который будет совместим с тем, который вы пытаетесь использовать.

Обычно широта и долгота представлены в виде двойных чисел. Надеюсь, это поможет вам устранить неполадки.

Я не уверен, какой объект LatLng вы используете, но вот пример

[https://developer.android.com/reference/androidx/car/cluster/navigation/LatLng]

В качестве примера вы можете попробовать это:

import com.google.datastore.v1.Value;

public class EntityHelper {
  public static Value makeValue(final Double value) {
     Value.Builder builder = Value.newBuilder();
     builder.setDoubleValue(value);
     return builder.build();
  }
}

Я не уверен относительно вашей реализации, однако другой вариант будет использовать LatLng.Builder getGeoPointValueBuilder ()

В этом примере , вы бы реализовали что-то вроде следующего:

... потребуется другой импорт ...

import com.google.datastore.v1.Value;

public class EntityHelper {
  public static LatLng makeLatLng(final LatLng value) {
     LatLng.Builder builder = LatLng.Builder.newBuilder(); 
     builder.setLatLng(value);
     return builder.build();
  }
}

Как я уже сказал, я не уверен, какой API вы используете, но возможно поищите здесь, чтобы адаптировать ваше решение:

[http://googleapis.github.io/googleapis/java/all/latest/apidocs/com/google/type/LatLng.html]

...