Details
-
Bug
-
Status: Resolved
-
P2
-
Resolution: Fixed
-
2.28.0
-
None
Description
Minimal test case to reproduce:
AwsOptions awsOptions = PipelineOptionsTranslation .fromProto(PipelineOptionsTranslation.toProto(PipelineOptionsFactory .fromArgs("--clientConfiguration={ \"proxyPort\": -1 }") .create() )) .as(AwsOptions.class); System.out.println(awsOptions.getClientConfiguration());
Stacktrace:
java.lang.Double cannot be cast to java.lang.Integer java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.Integer at org.apache.beam.sdk.io.aws.options.AwsModule$AwsHttpClientConfigurationDeserializer.deserialize(AwsModule.java:303) at org.apache.beam.sdk.io.aws.options.AwsModule$AwsHttpClientConfigurationDeserializer.deserialize(AwsModule.java:290) at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4202) at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3205) at org.apache.beam.sdk.options.ProxyInvocationHandler.getValueFromJson(ProxyInvocationHandler.java:511) at org.apache.beam.sdk.options.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:170) at com.sun.proxy.$Proxy59.getClientConfiguration(Unknown Source)
Culprit:
Explanation:
Jackson messages serialize numeric values as doubles. When options are later deserialized from that format, the value of "proxyPort" is "-1.0" and not "-1", leading to:
(Integer) Double.valueOf(-1.0)
Attachments
Issue Links
- links to