amazon-web-services - AWS 教程:GraphQL 构建因缺少符号和太多参数而失败
问题描述
我正在尝试完成有关 Android/GraphQL 的 AWS 教程,但失败得很惨。我的构建在来自以下命令的自动生成的一段代码上失败
amplify codegen models
用作源的架构是...
type NoteData
@model
@auth (rules: [ { allow: owner } ]) {
id: ID!
name: String!
description: String
image: String
}
...生成代码的失败部分是...
/** This is an auto generated class representing the NoteData type in your schema. */
@SuppressWarnings("all")
@ModelConfig(pluralName = "NoteData", authRules = {
@AuthRule(allow = AuthStrategy.OWNER, ownerField = "owner", identityClaim = "cognito:username", **provider** = "userPools", operations = { ModelOperation.CREATE, ModelOperation.UPDATE, ModelOperation.DELETE, ModelOperation.READ })
})
public final class NoteData implements Model {
public static final QueryField ID = field("NoteData", "id");
public static final QueryField NAME = field("NoteData", "name");
public static final QueryField DESCRIPTION = field("NoteData", "description");
public static final QueryField IMAGE = field("NoteData", "image");
private final @ModelField(targetType="ID", isRequired = true) String id;
private final @ModelField(targetType="String", isRequired = true) String name;
private final @ModelField(targetType="String") String description;
private final @ModelField(targetType="String") String image;
private @ModelField(targetType="AWSDateTime", **isReadOnly** = true) Temporal.DateTime createdAt;
private @ModelField(targetType="AWSDateTime", **isReadOnly** = true) Temporal.DateTime updatedAt;
public String getId() {
return id;
}
我的构建错误是...
C:\Users\yawbe\AndroidStudioProjects\AndroidGettingStarted\app\src\main\java\com\amplifyframework\datastore\generated\model\NoteData.java:25: error: cannot find symbol
@AuthRule(allow = AuthStrategy.OWNER, ownerField = "owner", identityClaim = "cognito:username", provider = "userPools", operations = { ModelOperation.CREATE, ModelOperation.UPDATE, ModelOperation.DELETE, ModelOperation.READ })
^
symbol: method provider()
location: @interface AuthRule
C:\Users\yawbe\AndroidStudioProjects\AndroidGettingStarted\app\src\main\java\com\amplifyframework\datastore\generated\model\NoteData.java:36: error: cannot find symbol
private @ModelField(targetType="AWSDateTime", isReadOnly = true) Temporal.DateTime createdAt;
^
symbol: method isReadOnly()
location: @interface ModelField
C:\Users\yawbe\AndroidStudioProjects\AndroidGettingStarted\app\src\main\java\com\amplifyframework\datastore\generated\model\NoteData.java:37: error: cannot find symbol
private @ModelField(targetType="AWSDateTime", isReadOnly = true) Temporal.DateTime updatedAt;
^
symbol: method isReadOnly()
location: @interface ModelField
C:\Users\yawbe\AndroidStudioProjects\AndroidGettingStarted\app\src\main\java\com\amplifyframework\datastore\generated\model\NoteData.java:28: error: method field in class QueryField cannot be applied to given types;
public static final QueryField ID = field("NoteData", "id");
^
required: String
found: String,String
reason: actual and formal argument lists differ in length
C:\Users\yawbe\AndroidStudioProjects\AndroidGettingStarted\app\src\main\java\com\amplifyframework\datastore\generated\model\NoteData.java:29: error: method field in class QueryField cannot be applied to given types;
public static final QueryField NAME = field("NoteData", "name");
^
required: String
found: String,String
reason: actual and formal argument lists differ in length
C:\Users\yawbe\AndroidStudioProjects\AndroidGettingStarted\app\src\main\java\com\amplifyframework\datastore\generated\model\NoteData.java:30: error: method field in class QueryField cannot be applied to given types;
public static final QueryField DESCRIPTION = field("NoteData", "description");
^
required: String
found: String,String
reason: actual and formal argument lists differ in length
C:\Users\yawbe\AndroidStudioProjects\AndroidGettingStarted\app\src\main\java\com\amplifyframework\datastore\generated\model\NoteData.java:31: error: method field in class QueryField cannot be applied to given types;
public static final QueryField IMAGE = field("NoteData", "image");
^
required: String
found: String,String
reason: actual and formal argument lists differ in length
所以这看起来像两个未定义的符号和四个变量数量错误的调用。采用后者,工具提示显示以下用法,它确实请求单个参数。
public static QueryField field(String fieldName)
我不知道为什么自动生成的代码有两个但是如果我删除第一个参数
field("NoteData", "image")
变成
field("image")
这真的会解决问题吗,还是会在给我创建一整套新的运行时问题的同时对构建错误进行排序?
回到两个未定义的符号,它们似乎没有缺少导入,而是定义和生成的代码之间不兼容。AuthRule 的源没有定义提供程序字段,因此这似乎是错误的一个明显原因,但我不明白为什么 amplify 将它放在首位以及需要替换它的内容(大概是什么? )。isReadOnly 也是如此,它没有定义,所以为什么要放大尝试使用它?
希望有人能直截了当地告诉我,到目前为止,我非常了解所有其他代码,但正是这个放大生成的文件让我头疼。
解决方案
如果您对 Gradle 库版本进行以下更改,则不会出现构建错误
implementation 'com.amplifyframework:aws-api:1.24.0'
implementation 'com.amplifyframework:aws-auth-cognito:1.24.0'
推荐阅读
- ios - FCM + iOS + 通知扩展
- postgresql - 如何将 postgres 配置添加到 cordas build gradle deployNodes-task
- python - 对整数上的内置方法 __str__() 感到困惑
- postgresql - payara / glassfish postgresql 数据源 jdbc 连接池
- visual-studio-2019 - 我在解码更新 NuGet 包时出错时发现无效数据
- scala - 优化猫库“<*>”
- kubernetes - Kubernetes 获取已完成工作的事件
- sql - 传入多个 Id 以返回 case 语句中的列
- laravel - 为什么我的 request->image 是字符串而不是二进制?
- c# - 如何使用机器人框架(Echobot,使用 ITurnContext)进行单元测试设置