[
https://issues.apache.org/jira/browse/AVRO-3161?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17755030#comment-17755030
]
Etienne Hardy commented on AVRO-3161:
-------------------------------------
We have also been bitten by this issue. We had to work around the
ClassCastExceptions by manually converting each Utf8 object to String, until we
found out about the avro.java.string property that can be set at the type level
in schema definitions, which will properly deserialize strings as
java.lang.String instead of Utf8. Still, it seems to me it would be safer if
the generated deserialization code in the put() method would make sure to
convert lists of possible Utf8 objects into java.lang.String in order to avoid
ClassCastExceptions in client code.
> bad classcast, avro-maven-plugin not respecing configured stringType for
> collections
> ------------------------------------------------------------------------------------
>
> Key: AVRO-3161
> URL: https://issues.apache.org/jira/browse/AVRO-3161
> Project: Apache Avro
> Issue Type: Bug
> Affects Versions: 1.9.2
> Reporter: Martin Mucha
> Priority: Major
>
> Using avro schema defining element as:
> {code:java}
> {
> "name": "field1",
> "type": "string"
> },{code}
> and
> {code:java}
> {
> "name": "field2",
> "type": ["null", {
> "type": "array",
> "name": "field2Array",
> "items": {
> "type": "string"
> }
> }],
> "default": null
> }{code}
>
> the avro-maven-plugin will generate put method, which will look like this:
>
> {code:java}
> public void put(int field$, java.lang.Object value$) {
> switch (field$) {
> case 1: field1 = value$ != null ? value$.toString() : null; break;
> case 19: field2 = (java.util.List<java.lang.String>)value$; break;
> default: throw new org.apache.avro.AvroRuntimeException("Bad index");
> }
> }{code}
>
> the problem is, that `value$.toString()` will correctly turn Utf8 to String,
> while unchecked cast of List<Utf8> to List<String> will successfully trick
> the compiller, but the items will still be of type Utf8.
> Plugin configuration:
> {code:java}
> <plugin>
> <groupId>org.apache.avro</groupId>
> <artifactId>avro-maven-plugin</artifactId>
> <version>1.9.2</version>
> <executions>
> <execution>
> <id>generateClassesFromTestSchemata</id>
> <phase>generate-sources</phase>
> <goals>
> <goal>schema</goal>
> </goals>
> <configuration>
> <stringType>String</stringType>
> <fieldVisibility>PRIVATE</fieldVisibility>
> <testSourceDirectory>...</testSourceDirectory>
> <testOutputDirectory>...</testOutputDirectory>
> </configuration>
> </execution>
> </executions>
> </plugin>{code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)