2024 Clojure状态调查!中分享您的想法。

欢迎!请查看关于页面了解有关此功能的更多信息。

0

我在尝试使用Congitect的aws-api库以及Java 8运行时从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
...