Имя хоста не может быть нулевой ошибкой при использовании AWS transcribe - PullRequest
1 голос
/ 07 января 2020

У меня сейчас есть код:

public class ProviderTranscribeController {

    private AmazonTranscribe client = 
    AmazonTranscribeClient.builder().withRegion(Regions.EU_WEST_2).build();
    final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.EU_WEST_2).build();


    public TranscriptionJob transcribeMp3(){
        StartTranscriptionJobRequest request = new StartTranscriptionJobRequest();
        request.withLanguageCode(LanguageCode.EsUS);
        Media media = new Media();

        media.setMediaFileUri(s3.getUrl("bucket", "file.mp3").toString());

        request.withMedia(media).withMediaSampleRateHertz(8000);
        String transcriptionJobName = "myJob";
        request.setTranscriptionJobName(transcriptionJobName);
        request.withMediaFormat("mp3");

        client.startTranscriptionJob(request);

        GetTranscriptionJobRequest jobRequest = new GetTranscriptionJobRequest();
        jobRequest.setTranscriptionJobName(transcriptionJobName);
        TranscriptionJob transcriptionJob;
        transcriptionJob = client.getTranscriptionJob(jobRequest).getTranscriptionJob();

        return transcriptionJob;
    }
}

Но я получаю сообщение об ошибке:

    hostname cannot be null: java.lang.IllegalArgumentException
    java.lang.IllegalArgumentException: hostname cannot be null
    at com.amazonaws.util.AwsHostNameUtils.parseRegion(AwsHostNameUtils.java:79)
    at com.amazonaws.util.AwsHostNameUtils.parseRegionName(AwsHostNameUtils.java:59)
    at 



 com.amazonaws.auth.internal.AWS4SignerRequestParams.resolveRegion(AWS4SignerRequestParams.java:121)
    at com.amazonaws.auth.internal.AWS4SignerRequestParams.<init>(AWS4SignerRequestParams.java:103)
    at com.amazonaws.auth.AWS4Signer.sign(AWS4Signer.java:225)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1271)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1113)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:770)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:744)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:726)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:686)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:668)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:532)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:512)
    at com.amazonaws.services.transcribe.AmazonTranscribeClient.doInvoke(AmazonTranscribeClient.java:349)
    at com.amazonaws.services.transcribe.AmazonTranscribeClient.invoke(AmazonTranscribeClient.java:325)
    at com.amazonaws.services.transcribe.AmazonTranscribeClient.executeStartTranscriptionJob(AmazonTranscribeClient.java:289)
    at com.amazonaws.services.transcribe.AmazonTranscribeClient.startTranscriptionJob(AmazonTranscribeClient.java:264)
    at transcribe.back.providers.ProviderTranscribeController.transcribeMp3(ProviderTranscribeController.java:32)
    at transcribe.back.services.ServiceCollectHttp.convertBase64(ServiceCollectHttp.java:27)
    at transcribe.back.ApplicationHandler.handleRequest(ApplicationHandler.java:24)
    at transcribe.back.ApplicationHandler.handleRequest(ApplicationHandler.java:14)

Я посмотрел на ошибку имени хоста и увидел, что иногда это происходит из-за регионы ошибочны, но я уверен, что это правильно, так как мой s3 работает. Любая помощь приветствуется.

1 Ответ

1 голос
/ 07 января 2020

Похоже, что проблема заключена в строке, переданной параметру awsRegion. В следующем коде

, если awsRegion является строкой, он должен использовать тире в качестве разделителей, например, «us-west-2», в противном случае он должен использовать перечисление Regions, например Regions.US_WEST_2.

Альтернативное решение включает использование withEndpointConfiguration вместо withRegion

пример:

String ecrEndpoint = "s3.%s.amazonaws.com";
final AmazonS3 s3 = = AmazonS3ClientBuilder.standard()
            .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(String.format(ecrEndpoint, awsRegion), awsRegion))
            ...

Ссылка:

java .lang.IllegalArgumentException: имя хоста не может быть пустым при попытке получить AWS токен аутентификации ECR

...