У меня есть AWS Step Function
, который вызывает Lambda Function
s для каждого состояния, и я передаю LinkedList
из PartETag
объектов из одного состояния в другое для MultipartUpload
.
Не уверен, поможет ли это, но вот фрагмент кода:
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import UploadJob;
import UploadJobParameters;
public class JobFinishHandler implements RequestHandler<ExportJobParameters, ExportJobParameters> {
@Override
public ExportJobParameters handleRequest(ExportJobParameters parameters, Context context) {
UploadJob uploadJob = new UploadJob(parameters, context);
context.getLogger().log("JobFinishHandler");
context.getLogger().log("parameters: " + parameters.toString());
context.getLogger().log("parameters.getPartETags().size(): " + parameters.getPartETags().size());
context.getLogger().log(parameters.getPartETags().toString());
context.getLogger().log("parameters.getPartETags().hashCode(): " + parameters.getPartETags().hashCode());
uploadJob.continueS3UploadStream();
uploadJob.jobFinish();
uploadJob.jobAbort();
return parameters;
}
}
Это ввод для состояния:
{
"uploadId":"1234567890",
"partETags":[
{
"partNumber":1,
"ETag":"67c335990ba21ff95db1d09a3c2c4a11"
}
]
}
Я получаю эту ошибку:
An error occurred during JSON parsing: java.lang.RuntimeException
java.lang.RuntimeException: An error occurred during JSON parsing
Caused by: java.io.UncheckedIOException: com.fasterxml.jackson.databind.JsonMappingException: No suitable constructor found for type [simple type, class com.amazonaws.services.s3.model.PartETag]: can not instantiate from JSON object (missing default constructor or creator, or perhaps need to add/enable type information?)
at [Source: lambdainternal.util.NativeMemoryAsInputStream@369f73a2; line: 1, column: 458] (through reference chain: gov.osdls.exportservices.export.common.ExportJobParameters["partETags"]->java.util.ArrayList[0])
Caused by: com.fasterxml.jackson.databind.JsonMappingException: No suitable constructor found for type [simple type, class com.amazonaws.services.s3.model.PartETag]: can not instantiate from JSON object (missing default constructor or creator, or perhaps need to add/enable type information?)
at [Source: lambdainternal.util.NativeMemoryAsInputStream@369f73a2; line: 1, column: 458] (through reference chain: gov.osdls.exportservices.export.common.ExportJobParameters["partETags"]->java.util.ArrayList[0])
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1106)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:296)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:133)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:245)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:217)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:25)
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:520)
at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:95)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:258)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:125)
at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:1511)
at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1102)
Я проверил класс PartETag
, чтобы увидеть, есть ли конструктор по умолчанию, и нет, поэтому я собираюсь переопределить этот класс и сделать конструктор по умолчанию.Но я чувствую, что, поскольку PartETag
является объектом Амазонки, разве они не подумали об этом уже?Я делаю это неправильно?Есть лучший способ сделать это?