aws-sdk-java icon indicating copy to clipboard operation
aws-sdk-java copied to clipboard

StateMachine.json() timestamp formatting error

Open jkoe-r7 opened this issue 6 years ago • 3 comments

Step Function documentation (https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-wait-state.html) states Timestamps must conform to the RFC3339 profile of ISO 8601, with the further restrictions that an uppercase T must separate the date and time portions, and an uppercase Z must denote that a numeric time zone offset is not present, for example, 2016-08-18T17:33:00Z., however when calling StateMachine.json() on a state machine which utilizes a timestamp there appears to be a formatting error because the joda time parser being used expects hh:mm:ss.fractionZ and is not parsing hh:mm:ssZ because it considers the 'Z' at that position to be invalid.

SDK version: 1.11.604

State machine to reproduce:

{
  "StartAt": "TestTime",
  "States": {
    "TestTime": {
      "Type": "Wait",
      "Timestamp": "2016-03-14T01:59:00Z",
      "Next": "HelloWorld"
    },
    "HelloWorld": {
      "Type": "Pass",
      "Result": "Hello World!",
      "End": true
    }
  }
}

Corresponding stack trace:

Caused by: com.fasterxml.jackson.databind.JsonMappingException: Invalid format: "2016-03-14T01:59:00Z" is malformed at "Z" (through reference chain: com.amazonaws.services.stepfunctions.builder.StateMachine$Builder["States"]->java.util.LinkedHashMap["TestTime"]->com.amazonaws.services.stepfunctions.builder.states.WaitState$Builder["Timestamp"])
	at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:394)
	at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:353)
	at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.wrapAndThrow(BeanDeserializerBase.java:1711)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeWithUnwrapped(BeanDeserializer.java:643)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:321)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:194)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:161)
	at com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeDeserializer._deserializeTypedForId(AsPropertyTypeDeserializer.java:130)
	at com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeDeserializer.deserializeTypedFromObject(AsPropertyTypeDeserializer.java:97)
	at com.fasterxml.jackson.databind.deser.AbstractDeserializer.deserializeWithType(AbstractDeserializer.java:254)
	at com.fasterxml.jackson.databind.deser.std.MapDeserializer._readAndBindStringKeyMap(MapDeserializer.java:529)
	at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:364)
	at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:29)
	at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:138)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:288)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:151)
	at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4013)
	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3004)
	at com.amazonaws.services.stepfunctions.builder.StateMachine.fromJson(StateMachine.java:134)
	... 114 common frames omitted
Caused by: java.lang.IllegalArgumentException: Invalid format: "2016-03-14T01:59:00Z" is malformed at "Z"
	at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:945)
	at com.amazonaws.services.stepfunctions.builder.internal.DateModule.fromJson(DateModule.java:62)
	at com.amazonaws.services.stepfunctions.builder.internal.DateModule$2.deserialize(DateModule.java:56)
	at com.amazonaws.services.stepfunctions.builder.internal.DateModule$2.deserialize(DateModule.java:51)
	at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeWithUnwrapped(BeanDeserializer.java:641)

Debugger screenshot:

Difference between iValue and expected character at position 19

jkoe-r7 avatar Oct 18 '19 22:10 jkoe-r7

Apologies for the long silence here @jkoe-r7. I can see the Invalid format error as well, marking as a bug.

debora-ito avatar May 27 '20 17:05 debora-ito

Even though the StepFunctions documentation example does not show the fractional seconds, specifying a timestamp with them (like 2016-08-18T17:33:00.00Z) also works in the State Machine.

debora-ito avatar May 27 '20 17:05 debora-ito

Hi,can I get a pull request? Is this issue still open, I want to work on this to solve the issue

YourLord00 avatar Nov 03 '21 23:11 YourLord00