Cloud Translate API Java 客户端 - 使用源、目标语言时出现问题
Cloud Translate API Java client - problems using source, target lang
我有一个问题希望得到解决。首先,当我使用源语言和目标语言调用云翻译服务时,遇到以下错误:
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[=12=]0(TranslateImpl.java:40)
at com.google.cloud.translate.TranslateImpl.call(TranslateImpl.java:113)
at com.google.cloud.translate.TranslateImpl.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 class 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。
我遇到了完全相同的错误。问题是 Google Guava 的一个古老版本被其他依赖引入。我通过 运行 mvn dependency:tree
找到了这个。我不得不像这样排除古老版本的番石榴
<exclusions>
<exclusion>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</exclusion>
</exclusions>
我有一个问题希望得到解决。首先,当我使用源语言和目标语言调用云翻译服务时,遇到以下错误:
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[=12=]0(TranslateImpl.java:40)
at com.google.cloud.translate.TranslateImpl.call(TranslateImpl.java:113)
at com.google.cloud.translate.TranslateImpl.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 class 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。
我遇到了完全相同的错误。问题是 Google Guava 的一个古老版本被其他依赖引入。我通过 运行 mvn dependency:tree
找到了这个。我不得不像这样排除古老版本的番石榴
<exclusions>
<exclusion>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</exclusion>
</exclusions>