Clojure 2024调查问卷中分享您的想法!

欢迎!请查看关于页面了解该工具的更多信息。

0
Libs

我正尝试使用Congitect的aws-api库和Java 8运行时,在AWS Lambda中检索S3对象,但一直出现问题

(def s3 (aws/client {:api :s3}))

(defn open-file []
  (aws/invoke s3 {:op :GetObject :request {:Bucket "test-bucket" :Key "filename.txt"}}))

调用open-file时出现以下错误

{
  ":cognitect.anomalies/category": {
    "sym": {
      "name": "fault",
      "namespace": "cognitect.anomalies"
    },
    "name": "fault",
    "namespace": "cognitect.anomalies"
  },
  ":cognitect.anomalies/message": "java.nio.ByteBuffer.flip()Ljava/nio/ByteBuffer;",
  ":cognitect.http-client/throwable": {
    "stackTrace": [
      {
        "methodName": "invokeStatic",
        "fileName": "http_client.clj",
        "lineNumber": 37,
        "className": "cognitect.http_client$empty_bbuf",
        "nativeMethod": false
      }
   ...

这是我的代码问题吗?似乎在不处于Lambda时可以正常工作。

1 个回答

+1

被选中
 
最佳回答

我之前见过这个错误(不是在这个上下文中)并依稀记得它与JDK的变化有关,反映某件事情,类似这样。Lambda中使用了哪个JDK版本

我找到了一条关于它的笔记——发生在使用Java 11进行AOT编译然后在Java 8上运行时。这有可能适用于您的情况吗?
by
AWS只支持Java 8,而且我是使用JDK 8编译代码的。
现在它已经可以正常工作了。结果证明代码是正常的,但我之前在使用`fish` shell中的`jenv`,它没有完全设置好,所以我以为我是用JRE 8编译的,但实际上我使用的是JRE 11。
你能检查一下其中一个类文件吗?

    javap -verbose <path/to/the.class> | grep major

主版本号52是Java 8,55是Java 11
...