Bulat Shakirzyanov created BEAM-12081:
-----------------------------------------
Summary: AwsOptions protobuf (de)serialization bug
Key: BEAM-12081
URL: https://issues.apache.org/jira/browse/BEAM-12081
Project: Beam
Issue Type: Bug
Components: io-java-aws
Reporter: Bulat Shakirzyanov
Fix For: 2.28.0
Minimal test case to reproduce:
{code:java}
AwsOptions awsOptions = PipelineOptionsTranslation
.fromProto(PipelineOptionsTranslation.toProto(PipelineOptionsFactory
.fromArgs("--clientConfiguration={ \"proxyPort\": -1 }")
.create()
))
.as(AwsOptions.class);
System.out.println(awsOptions.getClientConfiguration());
{code}
Stacktrace:
{code:java}
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)
{code}
Culprit:
[https://github.com/apache/beam/blob/v2.28.0/sdks/java/io/amazon-web-services/src/main/java/org/apache/beam/sdk/io/aws/options/AwsModule.java#L303]
Explanation:
Protobuf 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:
{code:java}
(Integer) Double.valueOf(-1.0)
{code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)