Google Cloud Speech NoSuchFieldError: CONTEXT_SPAN_KEY - PullRequest
1 голос
/ 12 апреля 2019

Я получаю сообщение об ошибке при попытке использовать библиотеку google-cloud-speech.

Это, наверное, о моих зависимостях. Библиотека работала без проблем перед добавлением зависимостей аутентификации firebase. Так что, вероятно, это зависимость endpoints-management-control-appengine-all .

Журналы Stackdriver:

com.google.api.server.spi.SystemService invokeServiceMethod: исключение произошло при вызове метода бэкэнда (SystemService.java:373) java.util.concurrent.ExecutionException: java.lang.NoSuchFieldError: CONTEXT_SPAN_KEY в com.google.common.util.concurrent.AbstractFuture.getDoneValue (AbstractFuture.java:503) в com.google.common.util.concurrent.AbstractFuture.get (AbstractFuture.java:462) в com.google.common.util.concurrent.AbstractFuture $ TrustedFuture.get (AbstractFuture.java:79) в com.google.common.util.concurrent.ForwardingFuture.get (ForwardingFuture.java:62) в com.google.api.gax.longrunning.OperationFutureImpl.get (OperationFutureImpl.java:127) в com.codefan.backend.util.AudioRecognizer.getRecognizedSpeechResults (AudioRecognizer.java:45) в com.codefan.backend.util.SubtitleGenerator.generate (SubtitleGenerator.java:34) в com.codefan.backend.endpoint.SubtitleApi.generateSubtitles (SubtitleApi.java:92) в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke (Method.java:498) в com.google.api.server.spi.SystemService.invokeServiceMethod (SystemService.java:349) в com.google.api.server.spi.handlers.EndpointsMethodHandler $ RestHandler.handle (EndpointsMethodHandler.java:127) в com.google.api.server.spi.handlers.EndpointsMethodHandler $ RestHandler.handle (EndpointsMethodHandler.java:110) в com.google.api.server.spi.dispatcher.PathDispatcher.dispatch (PathDispatcher.java:50) в com.google.api.server.spi.EndpointsServlet.service (EndpointsServlet.java:80) в javax.servlet.http.HttpServlet.service (HttpServlet.java:790) в com.google.inject.servlet.ServletDefinition.doServiceImpl (ServletDefinition.java:287) в com.google.inject.servlet.ServletDefinition.doService (ServletDefinition.java:277) в com.google.inject.servlet.ServletDefinition.service (ServletDefinition.java:182) в com.google.inject.servlet.ManagedServletPipeline.service (ManagedServletPipeline.java:91) в com.google.inject.servlet.FilterChainInvocation.doFilter (FilterChainInvocation.java:85) в com.googlecode.objectify.ObjectifyFilter.doFilter (ObjectifyFilter.java:48) в com.google.inject.servlet.FilterChainInvocation.doFilter (FilterChainInvocation.java:82) на com.google.api.control.ConfigFilter.doFilter (ConfigFilter.java:125) в com.google.inject.servlet.FilterChainInvocation.doFilter (FilterChainInvocation.java:82) в com.google.api.control.ControlFilter.doFilter (ControlFilter.java:229) в com.google.inject.servlet.FilterChainInvocation.doFilter (FilterChainInvocation.java:82) в com.google.inject.servlet.ManagedFilterPipeline.dispatch (ManagedFilterPipeline.java:119) на com.google.inject.servlet.GuiceFilter $ 1.call (GuiceFilter.java:133) на com.google.inject.servlet.GuiceFilter $ 1.call (GuiceFilter.java:130) в com.google.inject.servlet.GuiceFilter $ Context.call (GuiceFilter.java:203) в com.google.inject.servlet.GuiceFilter.doFilter (GuiceFilter.java:130) в org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1759) в com.google.apphosting.utils.servlet.JdbcMySqlConnectionCleanupFilter.doFilter (JdbcMySqlConnectionCleanupFilter.java:60) в org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1759) в org.eclipse.jetty.servlet.ServletHandler.doHandle (ServletHandler.java:582) вorg.eclipse.jetty.server.handler.ScopedHandler.handle (ScopedHandler.java:143) в org.eclipse.jetty.security.SecurityHandler.handle (SecurityHandler.java:524) в org.eclipse.jetty.server.session.SessionHandler.doHandle (SessionHandler.java:226) в org.eclipse.jetty.server.handler.ScopedHandler.handle (ScopedHandler.java:143) в org.eclipse.jetty.server.handler.HandlerWrapper.handle.HandlerWrapper.handle.134) по адресу com.google.apphosting.runtime.jetty9.ParseBlobUploadHandler.handle (ParseBlobUploadHandler.java:119) по адресу org.eclipse.jetty.server.handler.ContextHandler.doHandle (ContextHandler.java:1182) на сайте ContextHandler.java:1182).runtime.jetty9.AppEngineWebAppContext.doHandle (AppEngineWebAppContext.java:183) при org.eclipse.jetty.servlet.ServletHandler.doScope (ServletHandler.java:512) в org.eclipse.jetty.server.session.SessionHandler.doScope (SessionHandler.java: 185) в org.eclipse.jetty.server.handler.ContextHandler.doScope (ContextHandler.java:1112) в org.eclipse.jetty.server.handler.ScopedHandler.handle (ScopedHandler.java:141) в com.google.apphosting.runtime.jetty9.AppVersionHandlerMap.handle (AppVersionHandlerMap.java:293) в org.eclipse.jetty.server.handler.HandlerWrapper.handle (HandavaWraj.jj).в org.eclipse.jetty.server.Server.handle (Server.java:539) в org.eclipse.jetty.server.HttpChannel.handle (HttpChannel.java:333) в com.google.apphosting.runtime.jetty9.RpcConnectionРучной) в com.google.apphosting.runtime.JavaRuntime $ RequestRunnable.dispatchServletRequest (JavaRuntime.java:692) в com.google.apphosting.runtime.JavaRuntime $ RequestRunnable.dispatchRequest (JavaRuntime.java:655hosting) в com.gruntime.JavaRuntime $ RequestRunnable.run (JavaRuntime.java:625) на com.google.apphosting.runtime.JavaRuntime $ NullSandboxRequestRunnable.run (JavaRuntime.java:817) в com.google.apphosting.runtime.ThreadGroupPool $ PoolEntry.run (ThreadGroupPool.java:269) в java.lang.Thread.run (Thread.java:748), вызванный: java.lang.NoSuchFieldError: CONTEXT_SPAN_KEY по адресу io.grpc.internal.CensusTracingModule $ TracingClientInterceptor.interceptCall (CensusTracingModule.java:384) по адресу io.grpc.ClientInterceptors $ InterceptorChannel.newats.allInCentorCointerCointerSync.(CensusStatsModule.java:690) по адресу io.grpc.ClientInterceptors $ InterceptorChannel.newCall (ClientInterceptors.java:156) по адресу com.google.api.gax.grpc.GrpcChannelUUIDInterceptor.interceptCall (GrpcCravor.jp.$ ClientInterceptorsна com.google.api.gax.grpc.GrpcMetadataHandlerInterceptor.interceptCall (GrpcMetadataHandlerInterceptor.java:55) по адресу io.grpc.ClientInterceptors $ InterceptorChannel.newCall (ClientInterceptors.java:156) по адресу io.grpc.internal.ManagedChannelImpl.all.java ijcv. ip..ForwardingManagedChannel.newCall (ForwardingManagedChannel.java:63) на com.google.api.gax.grpc.GrpcClientCalls.newCall (GrpcClientCalls.java:90) на com.google.api.gax.grpc.GrpcDirectCall.la: 58) на com.google.api.gax.grpc.GrpcExceptionCallable.futureCall (GrpcExceptionCallable.java:64) на com.google.api.gax.rpc.AttemptCallable.call (AttemptCallable.java:86) на com.google.api.gax.rpc.RetringCallable.futureCall (RetriedCallable.java:63) в com.google.api.gax.rpc.RetringCallable.futureCall (RetriedCallable.java:41) вcom.google.api.gax.grpc.GrpcOperationSnapshotCallable.futureCall (GrpcOperationSnapshotCallable.java:58) в com.google.api.gax.tracing.TracedUnaryCallable.futureCall (TracedUnaryCallable.java:75) в com.google.api.gax.tracing.TracedOperationInitialCallable.futureCall (TracedOperationInitialCallable.java:61) в com.google.api.gax.rpc.OperationCallableImpl.futureCall (OperationCallableImpl.java:82) в com.google.api.gax.tracing.TracedOperationCallable.futureCall (TracedOperationCallable.java:78) в com.google.api.gax.rpc.OperationCallable $ 1.futureCall (OperationCallable.java:150) в com.google.api.gax.rpc.OperationCallable.futureCall (OperationCallable.java:67) в com.google.cloud.speech.v1.SpeechClient.longRunningRecognizeAsync (SpeechClient.java:360) в com.google.cloud.speech.v1.SpeechClient.longRunningRecognizeAsync (SpeechClient.java:320) в com.codefan.backend.util.AudioRecognizer.getRecognizedSpeechResults (AudioRecognizer.java:39) ... еще 57

Вот только метод AudioRecognizer class ':

@Override
public List<SpeechRecognitionResult> getRecognizedSpeechResults(String sourceLang, int sampleRate, String gcsUri) throws IOException, InterruptedException, ExecutionException {

    SpeechClient speechClient = SpeechClient.create();

    RecognitionConfig config = RecognitionConfig.newBuilder()
            .setEncoding(AudioEncoding.FLAC)
            .setLanguageCode(sourceLang)
            .setSampleRateHertz(sampleRate)
            .setEnableWordTimeOffsets(true)
            .build();

    RecognitionAudio audio = RecognitionAudio.newBuilder().setUri(gcsUri).build();

    // Use non-blocking call for getting file transcription
    OperationFuture<LongRunningRecognizeResponse, LongRunningRecognizeMetadata> speechRecResponse = speechClient.longRunningRecognizeAsync(config, audio);
    while (!speechRecResponse.isDone()) {
        logger.warning("Waiting for response...");
        Thread.sleep(10000);
    }

    return speechRecResponse.get().getResultsList();
}

Зависимости проекта:

<dependencies>
    <dependency>
        <groupId>com.google.endpoints</groupId>
        <artifactId>endpoints-framework</artifactId>
        <version>2.2.1</version>
    </dependency>
    <dependency>
        <groupId>com.google.endpoints</groupId>
        <artifactId>endpoints-framework-guice</artifactId>
        <version>2.2.0</version>
    </dependency>
    <!-- [START api_management] -->
    <dependency>
        <groupId>com.google.endpoints</groupId>
        <artifactId>endpoints-management-control-appengine-all</artifactId>
        <version>1.0.11</version>
    </dependency>
    <!-- [END api_management] -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <type>jar</type>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>google-cloud-speech</artifactId>
        <version>0.87.0-beta</version>
    </dependency>
    <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>google-cloud-translate</artifactId>
        <version>1.69.0</version>
    </dependency>
    <!-- [START Objectify_Dependencies] -->
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>22.0</version>
    </dependency>
    <dependency>
        <groupId>com.googlecode.objectify</groupId>
        <artifactId>objectify</artifactId>
        <version>5.1.21</version>
    </dependency>
    <!-- [END Objectify_Dependencies] -->
    <!-- [START Test_Dependencies] -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
    <!-- [END Test_Dependencies] -->
</dependencies>

1 Ответ

1 голос
/ 12 апреля 2019

Чтобы добавить управление API, я прошел через этот пост .Это указывает на использование библиотеки endpoints-management-control-appengine-all .

Позже, когда я проверил зависимости компиляции этой библиотеки, я не смог их увидеть.Вероятно, они вставили коды в библиотеку без использования каких-либо зависимостей, поэтому, я думаю, у нее есть индикатор -all .Это приводит к тому, что несколько экземпляров одного и того же класса.Поскольку зависимости не определены, maven не может выбрать одну из нескольких зависимостей.

В двух словах, это вызвано сканированием классов из разных мест.

К счастью, есть альтернативыв эту библиотеку.Вот зависимости, которые я сейчас использую для управления API.

<dependency>
    <groupId>com.google.endpoints</groupId>
    <artifactId>endpoints-management-control-appengine</artifactId>
    <version>1.0.11</version>
</dependency>
<dependency>
    <groupId>com.google.endpoints</groupId>
    <artifactId>endpoints-framework-auth</artifactId>
    <version>1.0.11</version>
</dependency>

И, возможно, в моем проекте меньше кода, поскольку я не добавляю все вещей.

...