Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google Cloud Vision客户端API-Java-异常:计算凭据元数据失败_Java_Google Cloud Vision - Fatal编程技术网

Google Cloud Vision客户端API-Java-异常:计算凭据元数据失败

Google Cloud Vision客户端API-Java-异常:计算凭据元数据失败,java,google-cloud-vision,Java,Google Cloud Vision,我想在我基于谷歌云的应用程序中提供“搜索已经存储在谷歌云存储中的PDF或TIFF文件中的任何文本”功能。因此,我将此链接中给出的示例(第1217行到第1280行)复制到我的项目中 尝试1的详细信息 appengine-web.xml的内容: <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE xml> <appengine-web-app xmlns="http://appengine.google.co

我想在我基于谷歌云的应用程序中提供“搜索已经存储在谷歌云存储中的PDF或TIFF文件中的任何文本”功能。因此,我将此链接中给出的示例(第1217行到第1280行)复制到我的项目中

尝试1的详细信息

appengine-web.xml的内容:

<?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE xml>
    <appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
        <application>garbledappname</application>
        <version>1</version>
        <runtime>java8</runtime>
        <threadsafe>true</threadsafe>
        <system-properties>
            <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
        </system-properties>
        <sessions-enabled>true</sessions-enabled>
        <url-stream-handler>urlfetch</url-stream-handler>
    </appengine-web-app>
<?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE xml>
    <appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
        <application>garbledappname</application>
        <version>1</version>
        <runtime>java8</runtime>
        <threadsafe>true</threadsafe>
        <system-properties>
            <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
        </system-properties>
        <sessions-enabled>true</sessions-enabled>
        <url-stream-handler>urlfetch</url-stream-handler>
        <env-variables>
            <env-var    name="GOOGLE_APPLICATION_CREDENTIALS"
                        value="WEB-INF/myproject-eaa46206856e.json" />
        </env-variables>
    </appengine-web-app>
因此,我更改了尝试2的appengine-web.xml

尝试2的详细信息 appengine-web.xml的内容:

<?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE xml>
    <appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
        <application>garbledappname</application>
        <version>1</version>
        <runtime>java8</runtime>
        <threadsafe>true</threadsafe>
        <system-properties>
            <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
        </system-properties>
        <sessions-enabled>true</sessions-enabled>
        <url-stream-handler>urlfetch</url-stream-handler>
    </appengine-web-app>
<?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE xml>
    <appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
        <application>garbledappname</application>
        <version>1</version>
        <runtime>java8</runtime>
        <threadsafe>true</threadsafe>
        <system-properties>
            <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
        </system-properties>
        <sessions-enabled>true</sessions-enabled>
        <url-stream-handler>urlfetch</url-stream-handler>
        <env-variables>
            <env-var    name="GOOGLE_APPLICATION_CREDENTIALS"
                        value="WEB-INF/myproject-eaa46206856e.json" />
        </env-variables>
    </appengine-web-app>
在如上所述更改appengine-web.xml、构建、部署和执行应用程序后,我遇到了以下异常:

javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.io.IOException: The Application Default Credentials are not available. They are available if running in Google Compute Engine. Otherwise, the environment variable GOOGLE_APPLICATION_CREDENTIALS must be defined pointing to a file defining the credentials. See https://developers.google.com/accounts/docs/application-default-credentials for more information
org.eclipse.jetty.servlet.ServletHandler doHandle:  (ServletHandler.java:624)
javax.servlet.ServletException: com.google.api.gax.rpc.UnauthenticatedException: io.grpc.StatusRuntimeException: UNAUTHENTICATED: Failed computing credential metadata
在我的代码中,这是上面跟踪中报告的行:

BatchAnnotateFilesResponse response = imageAnnotatorClient.batchAnnotateFiles(request);

这是整个方法:

setQualifiedFiles           =   mapOfQualifiedReportFiles.keySet();
itrOverSetOfQualifiedFiles  =   setQualifiedFiles.iterator();
while(itrOverSetOfQualifiedFiles.hasNext()) {
    try (ImageAnnotatorClient imageAnnotatorClient = ImageAnnotatorClient.create()) {
        qualifiedFileName   =   itrOverSetOfQualifiedFiles.next();
        fileNameOnCloud     =   mapOfQualifiedReportFiles.get(qualifiedFileName);
        gcsFileName         =   new GcsFilename(bucketNameExtVendorReports, fileNameOnCloud);
        gcsPath             =   "gs://" + bucketNameExtVendorReports + "/" + fileNameOnCloud;
        logger.info("gcsPath = " + gcsPath);
        GcsSource gcsSource = GcsSource.newBuilder().setUri(gcsPath).build();
        InputConfig inputConfig = InputConfig.newBuilder().setGcsSource(gcsSource).build();
        Feature.Type type = Feature.Type.DOCUMENT_TEXT_DETECTION;
        Feature featuresElement = Feature.newBuilder().setType(type).build();
        List<Feature> features = Arrays.asList(featuresElement);
        int pagesElement = 1;
        int pagesElement2 = 2;
        List<Integer> pages = Arrays.asList(pagesElement, pagesElement2);
        AnnotateFileRequest requestsElement = AnnotateFileRequest.newBuilder()
                                            .setInputConfig(inputConfig)
                                            .addAllFeatures(features)
                                            .addAllPages(pages)
                                            .build();
        List<AnnotateFileRequest> requests = Arrays.asList(requestsElement);
        BatchAnnotateFilesRequest request =                                 BatchAnnotateFilesRequest.newBuilder().addAllRequests(requests).build();
        BatchAnnotateFilesResponse response = imageAnnotatorClient.batchAnnotateFiles(request);
        for (AnnotateImageResponse imageResponse :
          response.getResponsesList().get(0).getResponsesList()) {
          System.out.printf("Full text: %s\n", imageResponse.getFullTextAnnotation().getText());
           for (Page page : imageResponse.getFullTextAnnotation().getPagesList()) {
               for (Block block : page.getBlocksList()) {
                 System.out.printf("\nBlock confidence: %s\n", block.getConfidence());
                 for (Paragraph par : block.getParagraphsList()) {
                    System.out.printf("\tParagraph confidence: %s\n", par.getConfidence());
                    for (Word word : par.getWordsList()) {
                      System.out.printf("\t\tWord confidence: %s\n", word.getConfidence());
                      for (Symbol symbol : word.getSymbolsList()) {
                        System.out.printf("\t\t\tSymbol: %s, (confidence: %s)\n",
                                    symbol.getText(), symbol.getConfidence());
                      }
                    }
                  }
                }
              }
            }
        }
    }
因此,我用try-catch-cluase将该行包围起来,结果堆栈跟踪显示:

com.google.api.gax.rpc.UnauthenticatedException: io.grpc.StatusRuntimeException: UNAUTHENTICATED: Failed computing credential metadata  

Caused by: com.google.apphosting.api.ApiProxy$CallNotFoundException: Can't make API call urlfetch.Fetch in a thread that is neither the original request thread nor a thread created by ThreadManager  
对如何解决这个问题有什么建议吗?在谷歌搜索中,出现了一些其他人曾经遇到过这个问题的帖子(由:com.goo……)但似乎没有解决办法。

感谢您的帮助。

这似乎只是一个身份验证问题,看起来与Vision API无关。身份验证错误发生在Vision API调用期间,因为在进行API调用之前,凭据被延迟加载/刷新


您似乎正在将应用程序部署到App Engine。如果是这样,本地设置的任何环境变量(如
GOOGLE\u APPLICATION\u CREDENTIALS
)都不会产生任何效果。您可能需要查看for App Engine上的文档。授予访问权限最直接的方法是授予对的权限。

这似乎只是一个身份验证问题,看起来与Vision API无关。身份验证错误发生在Vision API调用期间,因为在进行API调用之前,凭据被延迟加载/刷新


您似乎正在将应用程序部署到App Engine。如果是这样,本地设置的任何环境变量(如
GOOGLE\u APPLICATION\u CREDENTIALS
)都不会产生任何效果。您可能需要查看for App Engine上的文档。授予访问权限最直接的方法是授予对的权限。

这可能与此相关-您可以尝试将您的google auth库依赖项更新到0.17.1版吗?@Jon Skeet:谢谢。但我的pom.xml.Rats中已经有了这种依赖关系的确切版本。那样的话,恐怕我没有任何想法:(有人能帮忙吗?如果我的帖子中缺少信息,请告诉我,我会立即提供。你可以帮助更快地回答这个问题的一种方法是加入一个。我建议使用服务帐户创建一个控制台应用程序。我怀疑你可以显示完整的控制台应用程序w。)我需要30行代码(可能更少)-这将使人们更容易自己复制它。我已经在内部请了一位在Java库工作的同事,看看他们是否可以进一步帮助您。这可能与此相关-您可以尝试将您的google auth库依赖项更新到0.17.1版吗?@Jon Skeet:谢谢。但这正是依赖关系已经存在于我的pom.xml.Rats中。在这种情况下,我恐怕没有任何想法:(有人能帮忙吗?如果我的帖子中缺少信息,请告诉我,我会立即提供。你可以帮助更快地回答这个问题的一种方法是加入一个。我建议使用服务帐户创建一个控制台应用程序。我怀疑你可以显示完整的控制台应用程序w。)我用了30行代码(可能更少)-这将使人们更容易自己复制它。我在内部请了一位在Java库工作的同事,看看他们是否能进一步帮助您。Jeff非常感谢您的回复。我(再次)关注了这些链接。执行了此处列出的所有步骤,但均无效。我已使用新信息编辑了原始问题。请查看并提出解决方案。Jeff非常感谢您的回答。我(再次)查看了这些链接。执行了此处列出的所有步骤,但均无效。我已使用新信息编辑了原始问题。请查看并提出解决方案。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xml>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
    <application>myApp</application>
    <version>1</version>
    <runtime>java8</runtime>
    <threadsafe>true</threadsafe>
    <system-properties>
        <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
    </system-properties>
    <sessions-enabled>true</sessions-enabled>
    <url-stream-handler>urlfetch</url-stream-handler>
    <env-variables>
        <env-var    name="GOOGLE_APPLICATION_CREDENTIALS"
                    value="WEB-INF/myapp-eba46306896e.json" />
    </env-variables>
</appengine-web-app>
response = imageAnnotatorClient.batchAnnotateFiles(request);  
com.google.api.gax.rpc.UnauthenticatedException: io.grpc.StatusRuntimeException: UNAUTHENTICATED: Failed computing credential metadata  

Caused by: com.google.apphosting.api.ApiProxy$CallNotFoundException: Can't make API call urlfetch.Fetch in a thread that is neither the original request thread nor a thread created by ThreadManager