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

Andrei Leib commented on AVRO-3161:
-----------------------------------

[~alfonz] were you by any chance setting stringType = String in the avro 
compiler and then using the original schema to decode messages? When you set 
stringType to String in the Avro compiler you then have to decode messages 
through the Avro generated POJO; stringType = String is implemented by way of 
Java-specific annotation: avro.java.string and so the reader schema stored in 
the Avro generated POJO is different from the original schema. The original 
schema is missing this annotation, meaning it tells Avro to use Utf8 as the 
string type. 

> 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