java - 谷歌云语音NoSuchFieldError : CONTEXT_SPAN_KEY

标签 java maven google-cloud-platform google-cloud-speech

我在尝试使用 google-cloud-speech 库时遇到错误。

这可能与我的依赖有关。在添加 Firebase 身份验证依赖项之前,该库可以无缝运行。所以这可能是关于 endpoints-management-control-appengine-all依赖性。

Stackdriver 日志:

com.google.api.server.spi.SystemService invokeServiceMethod: exception occurred while calling backend method (SystemService.java:373) java.util.concurrent.ExecutionException: java.lang.NoSuchFieldError: CONTEXT_SPAN_KEY at com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:503) at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:462) at com.google.common.util.concurrent.AbstractFuture$TrustedFuture.get(AbstractFuture.java:79) at com.google.common.util.concurrent.ForwardingFuture.get(ForwardingFuture.java:62) at com.google.api.gax.longrunning.OperationFutureImpl.get(OperationFutureImpl.java:127) at com.codefan.backend.util.AudioRecognizer.getRecognizedSpeechResults(AudioRecognizer.java:45) at com.codefan.backend.util.SubtitleGenerator.generate(SubtitleGenerator.java:34) at com.codefan.backend.endpoint.SubtitleApi.generateSubtitles(SubtitleApi.java:92) 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:349) at com.google.api.server.spi.handlers.EndpointsMethodHandler$RestHandler.handle(EndpointsMethodHandler.java:127) at com.google.api.server.spi.handlers.EndpointsMethodHandler$RestHandler.handle(EndpointsMethodHandler.java:110) at com.google.api.server.spi.dispatcher.PathDispatcher.dispatch(PathDispatcher.java:50) at com.google.api.server.spi.EndpointsServlet.service(EndpointsServlet.java:80) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at com.google.inject.servlet.ServletDefinition.doServiceImpl(ServletDefinition.java:287) at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:277) at com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:182) at com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:91) at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:85) at com.googlecode.objectify.ObjectifyFilter.doFilter(ObjectifyFilter.java:48) at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82) at com.google.api.control.ConfigFilter.doFilter(ConfigFilter.java:125) at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82) at com.google.api.control.ControlFilter.doFilter(ControlFilter.java:229) at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82) at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:119) at com.google.inject.servlet.GuiceFilter$1.call(GuiceFilter.java:133) at com.google.inject.servlet.GuiceFilter$1.call(GuiceFilter.java:130) at com.google.inject.servlet.GuiceFilter$Context.call(GuiceFilter.java:203) at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:130) 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:183) 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:123) at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.dispatchServletRequest(JavaRuntime.java:692) at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.dispatchRequest(JavaRuntime.java:655) at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:625) at com.google.apphosting.runtime.JavaRuntime$NullSandboxRequestRunnable.run(JavaRuntime.java:817) at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:269) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.NoSuchFieldError: CONTEXT_SPAN_KEY at io.grpc.internal.CensusTracingModule$TracingClientInterceptor.interceptCall(CensusTracingModule.java:384) at io.grpc.ClientInterceptors$InterceptorChannel.newCall(ClientInterceptors.java:156) at io.grpc.internal.CensusStatsModule$StatsClientInterceptor.interceptCall(CensusStatsModule.java:690) at io.grpc.ClientInterceptors$InterceptorChannel.newCall(ClientInterceptors.java:156) at com.google.api.gax.grpc.GrpcChannelUUIDInterceptor.interceptCall(GrpcChannelUUIDInterceptor.java:52) at io.grpc.ClientInterceptors$InterceptorChannel.newCall(ClientInterceptors.java:156) at com.google.api.gax.grpc.GrpcHeaderInterceptor.interceptCall(GrpcHeaderInterceptor.java:80) at io.grpc.ClientInterceptors$InterceptorChannel.newCall(ClientInterceptors.java:156) at com.google.api.gax.grpc.GrpcMetadataHandlerInterceptor.interceptCall(GrpcMetadataHandlerInterceptor.java:55) at io.grpc.ClientInterceptors$InterceptorChannel.newCall(ClientInterceptors.java:156) at io.grpc.internal.ManagedChannelImpl.newCall(ManagedChannelImpl.java:789) at io.grpc.internal.ForwardingManagedChannel.newCall(ForwardingManagedChannel.java:63) at com.google.api.gax.grpc.GrpcClientCalls.newCall(GrpcClientCalls.java:90) at com.google.api.gax.grpc.GrpcDirectCallable.futureCall(GrpcDirectCallable.java:58) at com.google.api.gax.grpc.GrpcExceptionCallable.futureCall(GrpcExceptionCallable.java:64) at com.google.api.gax.rpc.AttemptCallable.call(AttemptCallable.java:86) at com.google.api.gax.rpc.RetryingCallable.futureCall(RetryingCallable.java:63) at com.google.api.gax.rpc.RetryingCallable.futureCall(RetryingCallable.java:41) at com.google.api.gax.grpc.GrpcOperationSnapshotCallable.futureCall(GrpcOperationSnapshotCallable.java:58) at com.google.api.gax.tracing.TracedUnaryCallable.futureCall(TracedUnaryCallable.java:75) at com.google.api.gax.tracing.TracedOperationInitialCallable.futureCall(TracedOperationInitialCallable.java:61) at com.google.api.gax.rpc.OperationCallableImpl.futureCall(OperationCallableImpl.java:82) at com.google.api.gax.tracing.TracedOperationCallable.futureCall(TracedOperationCallable.java:78) at com.google.api.gax.rpc.OperationCallable$1.futureCall(OperationCallable.java:150) at com.google.api.gax.rpc.OperationCallable.futureCall(OperationCallable.java:67) at com.google.cloud.speech.v1.SpeechClient.longRunningRecognizeAsync(SpeechClient.java:360) at com.google.cloud.speech.v1.SpeechClient.longRunningRecognizeAsync(SpeechClient.java:320) at com.codefan.backend.util.AudioRecognizer.getRecognizedSpeechResults(AudioRecognizer.java:39) ... 57 more

这是 AudioRecognizer 类的唯一方法:

@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>

最佳答案

为了添加 api 管理,我浏览了 this post 。它表示使用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>

并且我的项目中的代码可能较少,因为我没有添加所有内容。

关于java - 谷歌云语音NoSuchFieldError : CONTEXT_SPAN_KEY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55643735/

相关文章:

java - 如何将 Tiles 3 与 Struts2 正确集成?

java - 使用包装类来实现 Java 中的 typedef 等效项;我必须公开类变量吗?

java - 以编程方式启动 Appium 服务器

mysql - "new ephemeral certificate expires too soon: current time:"米

docker - 为什么我无法在我的云 devshell 中运行 docker 容器?

java - 无法理解带有 throws 的外部代码

java - 迭代器模式的目的。我理解对了吗?

java - Maven:如何在 >= Java 9 中将依赖项添加到模块路径

maven - 使用 Local Runner 在独立模式下运行 Hadoop 2.4.0 作业的单元测试

node.js - 在 Google 的云平台上定期运行 node.js 脚本的最简单方法是什么?