2024 Clojure状态调查中分享您的观点!

欢迎!请参阅关于页面获取更多此功能的信息。

0

我正在尝试使用Java 8运行时,使用Congitect的aws-api库从AWS Lambda中检索文件,但我一直遇到问题

(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 编译了代码。
by
现在正在运行。结果证明代码是好的,但我使用的是 `fish` shell 中的 `jenv`,它并未完全设置,所以我以为我使用了 JRE 8,但实际上我使用的是 JRE 11。
by
你能检查一下其中一个类文件吗?

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

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