首页 > 解决方案 > 从 Azure 上的 Linux 容器运行 Google Cloud Vision

问题描述

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

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

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 设置正确:

屏幕截图 GOOGLE_APPLICATION_CREDENTIALS

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

屏幕截图网络版本

标签: azuretomcatgoogle-cloud-vision

解决方案


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

当我将 Web Apps 容器更改为 Java 11(和 Tomcat 9.0)时,它就可以工作了!

Azure 门户

感谢@Kolban 提供故障排除页面的链接,其中包括以下内容:

如果您在 32 位操作系统上,使用 Java 11+ 可能是最简单的解决方案,因为 ALPN 是在 Java 9 中添加到 Java 中的。如果在 32 位 Windows 上,Conscrypt 是一个选项。否则,您需要构建自己的 32 位版本的 netty-tcnative。


推荐阅读