【问题标题】:Cloud Translate API Java client - problems using source, target langCloud Translate API Java 客户端 - 使用源语言、目标语言的问题
【发布时间】:2017-09-08 14:32:43
【问题描述】:

我有一个问题,我希望能解决。首先,当我使用源语言和目标语言调用云翻译服务时,遇到以下错误:

java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
at com.google.cloud.translate.TranslateImpl.optionMap(TranslateImpl.java:131)
at com.google.cloud.translate.TranslateImpl.access$000(TranslateImpl.java:40)
at com.google.cloud.translate.TranslateImpl$4.call(TranslateImpl.java:113)
at com.google.cloud.translate.TranslateImpl$4.call(TranslateImpl.java:110)

这就是我正在做的:

protected Translate getTranslationServiceClient() throws IOException {
        if (translationServiceClient == null) {
            synchronized (this) {
                if (translationServiceClient == null) {

                    try (InputStream is = new FileInputStream(new File(getCredentialFilePath()))) {

                        final GoogleCredentials myCredentials = GoogleCredentials.fromStream(is);
                        translationServiceClient = TranslateOptions.newBuilder().setCredentials(myCredentials).build().getService();
                    } catch (IOException ioe) {
                        throw new NuxeoException(ioe);
                    }

                }
            }
        }

        return translationServiceClient;
    }

    public TranslationResponse translateText(String text, String sourceLanguage, String targetLanguage) throws IOException {

        Translation response = translationService.translate(text, TranslateOption.sourceLanguage("en"), TranslateOption.sourceLanguage("es"));
        //System.out.println(response.getTranslatedText());
        GoogleTranslationResponse gtr = new GoogleTranslationResponse(response);

        return gtr;
    }

错误指向 Cloud 的 TranslateImpl 类 optionMap 方法,并在 checkArgument 上溢出 NoSuchMethodError。我是否错误地传递了 TranslateOption??:

private Map<TranslateRpc.Option, ?> optionMap(Option... options) {
Map<TranslateRpc.Option, Object> optionMap = Maps.newEnumMap(TranslateRpc.Option.class);
for (Option option : options) {
  Object prev = optionMap.put(option.getRpcOption(), option.getValue());
  checkArgument(prev == null, "Duplicate option %s", option);
}
return optionMap;

}

为了从 API 获得任何类型的响应,我尝试在不传递任何选项或仅传递 targetLanguage 的情况下调用服务。没有任何选项,我没有任何错误,我的短信按预期翻译成英文。如果我只添加 TranslateOption.targetLanguage("es"),我仍然会得到 NoSuchMethodError。

【问题讨论】:

标签: java google-app-engine google-translate


【解决方案1】:

我遇到了同样的错误。问题是由其他一些依赖项引入了一个古老版本的 Google Guava。我通过运行mvn dependency:tree 发现了这一点。我不得不像这样排除古版本的番石榴

<exclusions>
    <exclusion>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    </exclusion>
</exclusions>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    • 1970-01-01
    • 2020-05-17
    • 2017-02-17
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多