使用AWS Java SDK在ColdFusion中调用Amazon Transcribe遇阻求助
问题分析与解决方案
首先,你的代码确实遗漏了向AWS发送请求的关键步骤——你只构建了请求对象,但没有调用Transcribe服务客户端的方法来提交这个请求!这就是为什么既没有报错,也没有启动转录任务的原因。
1. 补上发送请求的核心步骤
你使用的是AmazonTranscribeAsyncClient(异步客户端),需要调用startTranscriptionJobAsync()方法来提交请求。这个方法会返回一个Future<StartTranscriptionJobResult>对象,用于获取异步操作的结果。
修改后的核心代码片段如下:
/* Set up transcription job */ MediaFileUri = CreateObject('java','com.amazonaws.services.transcribe.model.Media').init(); MediaFileUri.setMediaFileUri('#variables.mediafilelocation#'); invokeRequest = CreateObject('java','com.amazonaws.services.transcribe.model.StartTranscriptionJobRequest').init(); invokeRequest.withLanguageCode('en-US'); invokeRequest.withMedia(MediaFileUri); invokeRequest.withMediaFormat('wav'); invokeRequest.withTranscriptionJobName('#variables.jobname#'); // 关键:发送异步请求并获取Future对象 transcriptionFuture = serviceObject.startTranscriptionJobAsync(invokeRequest); // 等待请求完成并获取响应(这里会阻塞直到结果返回,也可以设置超时) try { // 可选:设置超时时间,比如10秒,避免无限等待 transcriptionResult = transcriptionFuture.get(10, createObject('java','java.util.concurrent.TimeUnit').SECONDS); // 输出响应详情,确认任务状态 writeDump(transcriptionResult); } catch (java.util.concurrent.TimeoutException te) { writeOutput("请求超时:" & te.getMessage()); } catch (com.amazonaws.AmazonServiceException ase) { writeOutput("AWS服务错误:" & ase.getMessage() & ",错误代码:" & ase.getErrorCode()); } catch (Exception e) { writeOutput("其他错误:" & e.getMessage()); } /* Shut down client*/ serviceObject.shutdown();
2. 获取AWS响应的正确方式
- 对于异步客户端:通过
Future对象的get()方法(支持设置超时参数)获取StartTranscriptionJobResult,这个对象包含转录任务的完整信息,比如任务ARN、当前状态、创建时间等。 - 如果你不需要异步处理,也可以改用同步客户端
AmazonTranscribeClientBuilder,直接调用startTranscriptionJob(invokeRequest)就能同步获取响应,代码逻辑会更简单。
额外调试技巧:确认请求是否发送
如果还是不确定请求是否到达AWS,可以开启AWS SDK的日志功能,查看HTTP请求和响应的详细内容:
- 找到ColdFusion的
jvm.config文件,添加以下日志配置参数:
-Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog -Dorg.apache.commons.logging.simplelog.showdatetime=true -Dorg.apache.commons.logging.simplelog.log.com.amazonaws=DEBUG
- 重启ColdFusion服务后,查看CF日志目录下的日志文件,就能看到SDK发送的请求头、请求体,以及AWS返回的响应详情,以此确认请求是否成功发出。
几个注意点
- 确保你的AWS凭证拥有
transcribe:StartTranscriptionJob的权限,否则会返回权限拒绝的错误。 - 检查
variables.mediafilelocation是否是AWS可访问的S3路径(格式为s3://bucket-name/path/to/file.wav),Transcribe服务需要能直接读取这个存储位置的文件。
内容的提问来源于stack exchange,提问作者Rocky
相关产品推荐
相关产品推荐

