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)