2017-01-17 2 views
1

Я использую Watson Java SDK от github (https://github.com/watson-developer-cloud/java-sdk), чтобы запустить тест службы речи в текст. Я запускаю пример с моего рабочего места, в котором установлен брандмауэр и http-прокси.Вызов речи Watson из Java через корпоративный прокси

Тестирование не выполняется, так как удаленный сервер не может быть достигнут. Трассировка стека выглядит следующим образом:

Exception in thread "main" java.lang.RuntimeException: java.net.UnknownHostException: stream.watsonplatform.net 
    at com.ibm.watson.developer_cloud.service.WatsonService$1.execute(WatsonService.java:182) 
    at com.costaisa.app.api.test.ibm.watson.TestIBMWatson.testSpeechToText(TestIBMWatson.java:76) 
    at com.costaisa.app.api.test.ibm.watson.TestIBMWatson.main(TestIBMWatson.java:37) 
Caused by: java.net.UnknownHostException: stream.watsonplatform.net 
    at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) 
    at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:928) 
    at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323) 
    at java.net.InetAddress.getAllByName0(InetAddress.java:1276) 
    at java.net.InetAddress.getAllByName(InetAddress.java:1192) 
    at java.net.InetAddress.getAllByName(InetAddress.java:1126) 
    at okhttp3.Dns$1.lookup(Dns.java:39) 
    at okhttp3.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:173) 
    at okhttp3.internal.http.RouteSelector.nextProxy(RouteSelector.java:139) 
    at okhttp3.internal.http.RouteSelector.next(RouteSelector.java:81) 
    at okhttp3.internal.http.StreamAllocation.findConnection(StreamAllocation.java:172) 
    at okhttp3.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:123) 
    at okhttp3.internal.http.StreamAllocation.newStream(StreamAllocation.java:93) 
    at okhttp3.internal.http.HttpEngine.connect(HttpEngine.java:296) 
    at okhttp3.internal.http.HttpEngine.sendRequest(HttpEngine.java:248) 
    at okhttp3.RealCall.getResponse(RealCall.java:243) 
    at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:201) 
    at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:163) 
    at okhttp3.RealCall.execute(RealCall.java:57) 
    at com.ibm.watson.developer_cloud.service.WatsonService$1.execute(WatsonService.java:179) 
    ... 2 more 

Мне кажется, что okhttp3 поддерживает HTTP-прокси, но не через переменные окружения или системных свойств.

Я что-то упустил? Можно ли вообще вызывать услугу Watson для передачи речи на текст из Java через прокси?

+1

Эй Juanjo, вы можете настроить URL службы, чтобы указать на прокси-сервере. Мы не выставляем HTTPClient из okHttp, поэтому вы не сможете использовать okhttp для этого –

+0

Спасибо за ответ. И как мне это сделать? Я не могу найти ссылки на это в репозитории github. И когда вы упоминаете «прокси», вы имеете в виду прокси-сервер http? Это то, о чем я говорю. –

+0

Я могу объединить запрос на тяну, если вы найдете способ отладки для этой функции без чрезмерного воздействия на реализацию –

ответ

0

Juanjo Это то, что вы можете сделать, чтобы передать запрос через корпоративный прокси.

Создайте класс, который простирается от TextToSpeech (как ExtendedTextToSpeech that I wrote for me.). Затем измените DemoServlet, который поставляется с образцом Ватсон, как показано ниже

   TextToSpeech textService = new com.ibm.cloudoe.samples.ExtendedTextToSpeech(); 
      textService.setUsernameAndPassword("username", "password"); 
      String voice = req.getParameter("voice"); 
      String text = req.getParameter("text"); 
      String format = "audio/ogg; codecs=opus"; 
      in = textService.synthesize(text, new Voice(voice, null, null), format); 

Если вы получаете javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX здание путь не удалось: sun.security.provider. certpath.SunCertPathBuilderException: не удалось найти правильный путь сертификации к запрошенной цели, то

  • логин для stream.watsonplatform.net/text-to-speech/api/v1 с вашим именем пользователя/пароль, полученные от Шрифтом- вашего аккаунта Уотсона на речью
  • Нажмите на значок блокировки в адресной строке браузера и экспортировать сертификат.
  • Следуйте инструкциям здесь http://magicmonster.com/kb/prg/java/ssl/pkix_path_building_failed.html
+0

Спасибо за информацию, но я использую SpeechToText, а не TextToSpeech , В любом случае, у меня нет сервлетов, развернутых в любом месте: я потребляю службу SpeechToText, и это терпит неудачу, потому что мой код не может связаться с хостом stream.watsonplatform.net. Отсюда мой вопрос: как я могу это сделать с помощью корпоративного прокси. –

+0

Привет @JuanjoAparicioJara Я посмотрел класс SpeechToText, вам нужно будет создать свой класс ExtendedSpeechToText, который расширяет com.ibm.watson.developer_cloud.speech_to_text.v1.SpeechToText (как я создал ExtendedTextToSpeech). Ваш класс должен иметь тот же код, что и в ExtendedTextToSpeech, где вы создаете клиент OkHttpClient с конфигурацией прокси. Затем в вашем клиенте, где вы создаете экземпляр SpeechToText, используйте «SpeechToTect service = new ExtendedSpeechToText(); обслуживание.setUsernameAndPassword ("", ""); Надеюсь, это поможет. –

+0

Это действительно помогает. Но это означает, что вы не можете указать конфигурацию прокси-сервера для службы, вам необходимо частично переопределить соединение. Спасибо всем за помощь. –

Смежные вопросы