7

Amazon の AWS ツールキットで Java ベースの DynamoDBMapper が「クラスのインスタンス化に失敗しました」という例外エラーをスローする問題に直面しています。DBMapper を使用するのはこれが初めてなので、すべてが正しくセットアップされているかどうか完全にはわかりません。私のコードは以下にあります:

public static void main(String[] args) {
    dynamoDB = new AmazonDynamoDBClient(credentials);

    DynamoDBMapper mapper = new DynamoDBMapper(dynamoDB);
    PStatus data = mapper.load(PStatus.class, "online", new Integer(1655));
    String assigned = data.getAssigned();
    System.out.println(assigned);
}

@DynamoDBTable(tableName = "projectStatus")
public class PStatus {

    private Integer projID;
    private String status;
    private String assigned;

    @DynamoDBHashKey(attributeName = "status")
    public String getStatus() { return status; }
    public void setStatus(String status) { this.status = status; }

    @DynamoDBRangeKey(attributeName = "projID")
    public Integer getId() { return projID; }
    public void setId(Integer projID) { this.projID = projID; }

    @DynamoDBAttribute(attributeName = "assigned")
    public String getAssigned() { return assigned; }
    public void setAssigned(String assigned) { this.assigned = assigned; }
}

私は基本的に GetItemRequest を実行してから特定の属性を引き出そうとしていますが、行を指しているエラーが発生していますPStatus data = mapper.load(PStatus.class, "onFarm", new Integer(1655));。私は正確に何を間違っていますか?

編集:以下の正確な例外:

Exception in thread "main" com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException: Failed to instantiate class
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.createKeyObject(DynamoDBMapper.java:325)
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.load(DynamoDBMapper.java:313)
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.load(DynamoDBMapper.java:212)
    at test.TestGet.main(TestGet.java:20)
Caused by: java.lang.InstantiationException: test.TestGet$PStatus
    at java.lang.Class.newInstance0(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.createKeyObject(DynamoDBMapper.java:323)
4

4 に答える 4

19

java.lang.Class.newInstance0(Unknown Source) の呼び出しが機能するように、空のコンストラクターを追加します。

public PStatus()
{

}
于 2015-04-27T17:03:01.177 に答える
3

ちょうど答えを考え出した。思ったほどではありませんでしたが、クラスを間違った場所に置いていたという結果になりました。彼らが示した方法では、私はそれがサブクラスであるという印象を受けましたが、PStatus は独自のクラス、ファイル、およびすべてである必要がありました。私は TestGet 内でそれをサブクラス化しようとしていましたが、それは好きではありませんでした。DBMapperよりもJavaの問題だったと思います。まだまだ勉強中!

于 2013-04-29T00:54:34.430 に答える
1

私は同じ問題を抱えていて、初期化されているクラスのすべてのコンストラクターを削除することで解決しました。

于 2013-10-16T08:42:43.407 に答える