[
https://issues.apache.org/jira/browse/AVRO-3161?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17762724#comment-17762724
]
Martin Mucha commented on AVRO-3161:
------------------------------------
That was more than 2 years ago, so hard to guess. I guess I was setting it
only in avro-maven-plugin, as shown in jira. Nowhere else.
Now not complaining, just saying: since this classcast problem, and after
several major showstopper bugs and incompatibilities between avro versions,
we refactored our code so that there is Charsequence everywhere around
avro, so that avro can do whatever it wants in given version, and use bare
required minimum of avro functionality. Because we accepted, that 'correct'
type is Charsequence, avro does not generate any incorrect classcasts.
Since then we don't have more problems and hopefully 1.11.0 works for all
our flows and tbh I'm not touching avro until it stops working.
čt 7. 9. 2023 v 14:51 odesílatel Andrei Leib (Jira) <[email protected]>
> 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)