[ 
https://issues.apache.org/jira/browse/AVRO-3161?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17840166#comment-17840166
 ] 

Etienne Hardy commented on AVRO-3161:
-------------------------------------

[~alfonz] When you say:

> I can confirm that this does not happen in 1.11.0

Do you mean the ClassCastException? If yes, then if you look at the GitHub repo 
I attached a few comments above, it does use Avro 1.11.0 and the exception 
happens. I even tried the latest 1.11.3 and it also happens.

I understand from a previous comment the recommendation around this would be 
the use CharSequence instead of String. It's definitely a possibility. Not 
complaining either, I would say it's not the most natural thing to do however. 
The intuitive expectation from a Java developer standpoint would be that an 
Avro string array maps to a list of Java String objects.

Now, knowing that specifying the avro.java.string field in the Avro schema 
avoids this issue altogether, it seems preferable to me rather than using the 
Java CharSequence type. That's what we have recommended internally.

> 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)

Reply via email to