You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@beam.apache.org by "Ismaël Mejía (Jira)" <ji...@apache.org> on 2021/04/01 07:10:00 UTC
[jira] [Updated] (BEAM-12081) Fix AwsOptions Jackson
(de)serialization of integer values
[ https://issues.apache.org/jira/browse/BEAM-12081?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Ismaël Mejía updated BEAM-12081:
--------------------------------
Summary: Fix AwsOptions Jackson (de)serialization of integer values (was: AwsOptions protobuf (de)serialization bug)
> Fix AwsOptions Jackson (de)serialization of integer values
> ----------------------------------------------------------
>
> Key: BEAM-12081
> URL: https://issues.apache.org/jira/browse/BEAM-12081
> Project: Beam
> Issue Type: Bug
> Components: io-java-aws
> Reporter: Bulat Shakirzyanov
> Assignee: Bulat Shakirzyanov
> Priority: P2
> Fix For: 2.28.0
>
> Time Spent: 20m
> Remaining Estimate: 0h
>
> 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)