运行 Google Cloud Vision 来自 Linux Azure 上的容器

Running Google Cloud Vision from Linux Container on Azure

使用 Windows 服务器,Tomcat 8 和 Java 7,我成功地使用 Google Cloud Vision API 对文档进行 OCR。

当我从 Azure 上的 Linux 容器执行相同的过程(使用相同的库等)时,使用 Tomcat 9 和 Java 8 然后我得到以下信息:

java.lang.IllegalArgumentException: Jetty ALPN/NPN has not been > properly configured. > at >
 io.grpc.netty.GrpcSslContexts.selectApplicationProtocolConfig(GrpcSslContexts.java:162) > at 
io.grpc.netty.GrpcSslContexts.configure(GrpcSslContexts.java:136) > at 
io.grpc.netty.GrpcSslContexts.configure(GrpcSslContexts.java:124) > at 
io.grpc.netty.GrpcSslContexts.forClient(GrpcSslContexts.java:94) > at > 
io.grpc.netty.NettyChannelBuilder$NettyTransportFactory$DefaultNettyTransportCreationParamsFilterFactory.<init>(NettyChannelBuilder.java:521) > 2019-10-24T13:33:37.831210199Z at > 
io.grpc.netty.NettyChannelBuilder$NettyTransportFactory$DefaultNettyTransportCreationParamsFilterFactory.<init>(NettyChannelBuilder.java:514) > 2019-10-24T13:33:37.832461409Z at > 
io.grpc.netty.NettyChannelBuilder$NettyTransportFactory.<init>(NettyChannelBuilder.java:453) > at > 
io.grpc.netty.NettyChannelBuilder.buildTransportFactory(NettyChannelBuilder.java:312) > at > 
io.grpc.internal.AbstractManagedChannelImplBuilder.build(AbstractManagedChannelImplBuilder.java:324) > at > 
com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.createChannel(InstantiatingGrpcChannelProvider.java:165) > 2019-10-24T13:33:37.834701725Z at > 
com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.getTransportChannel(InstantiatingGrpcChannelProvider.java:130) > 2019-10-24T13:33:37.835210729Z at > 
com.google.api.gax.rpc.ClientContext.create(ClientContext.java:122) > at > 
com.google.cloud.vision.v1.stub.GrpcImageAnnotatorStub.create(GrpcImageAnnotatorStub.java:62) > at > 
com.google.cloud.vision.v1.ImageAnnotatorSettings.createStub(ImageAnnotatorSettings.java:101) > at > 
com.google.cloud.vision.v1.ImageAnnotatorClient.<init>(ImageAnnotatorClient.java:130) > at > 
com.google.cloud.vision.v1.ImageAnnotatorClient.create(ImageAnnotatorClient.java:111) > at > 
com.google.cloud.vision.v1.ImageAnnotatorClient.create(ImageAnnotatorClient.java:102)

有什么想法吗?

我的 GOOGLE_APPLICATION_CREDENTIALS 设置正确:

根据我的研究,似乎可能存在某种兼容性问题,可能与我使用的 netty 版本有关。

我找到问题了。 Linux Web 应用程序配置为使用 Java 8,而我的 Eclipse 环境有 jdk-12.0.2.

当我将 Web Apps 容器更改为 Java 11(并更改为 Tomcat 9.0)时,它就起作用了!

感谢@Kolban 提供 a link to a troubleshooting page 其中包括以下内容:

If you are on a 32-bit operating system, using Java 11+ may be the easiest solution, as ALPN was added to Java in Java 9. If on 32-bit Windows, Conscrypt is an option. Otherwise you need to build your own 32-bit version of netty-tcnative.