Martin Mucha created AVRO-3161:
----------------------------------

             Summary: 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


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.3.4#803005)

Reply via email to