I'm running into an issue of the Java based DynamoDBMapper in Amazon's AWS toolkit throwing the "Failed to instantiate class" exception error. This is my first time attempting to use the DBMapper, so I'm not entirely sure I have everything setup right. My code can be found below:
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; }
}
I'm basically just trying to perform a GetItemRequest and then draw out a specific attribute, but I'm getting the error pointing to the line PStatus data = mapper.load(PStatus.class, "onFarm", new Integer(1655));
. What exactly am I doing wrong?
Edit: Exact Exception below:
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)
Add empty constructor so the call java.lang.Class.newInstance0(Unknown Source) will work:
public PStatus()
{
}
Just figured out the answer. It wasn't quite what I thought, but it ended up being that I had the class in the wrong location. The way they showed it, I was under the impression that it was a sub-class, but PStatus needed to be its own class, file and all. I was trying to sub-class it inside of TestGet and it wasn't liking that. Guess it was more a Java issue I was having than the DBMapper. Still learning!
I had the same issue and solved it by removing all constructors of the class being initialized.
It can also happen that you have used two DynamoDBVersionAttribute. Its not happening in you use-case but for that also can get this error.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With