[ https://issues.apache.org/jira/browse/AVRO-3161?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17840682#comment-17840682 ]
Martin Mucha commented on AVRO-3161: ------------------------------------ [~ehardy] My apologies then, I checked only the case I reported originally and in that very specific case it seemed to be working. Since my last comment (5days ago :) ) I found out more avro problems, which will prevent me from using stringType configuration. On top of that I found serious problems with customConversions and logical types (especially enableDecimalLogicalType config option), BUT as you see, that is no effort in fixing any of there, so I'm not even reporting it. It's waste of time, and if you use lot of avro features it's becoming hard to find configuration, where all stuff works even if you are willing to change anything just so that avro won't fail on classcasts etc.. I'd say using avro extensively is huge decision mistake, which brings problems to project. > 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)