[
https://issues.apache.org/jira/browse/AVRO-3161?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17840682#comment-17840682
]
Martin Mucha commented on AVRO-3161:
------------------------------------
[~ehardy] My apologies then, I checked only the case I reported originally and
in that very specific case it seemed to be working. Since my last comment
(5days ago :) ) I found out more avro problems, which will prevent me from
using stringType configuration. On top of that I found serious problems with
customConversions and logical types (especially enableDecimalLogicalType config
option), BUT as you see, that is no effort in fixing any of there, so I'm not
even reporting it. It's waste of time, and if you use lot of avro features it's
becoming hard to find configuration, where all stuff works even if you are
willing to change anything just so that avro won't fail on classcasts etc.. I'd
say using avro extensively is huge decision mistake, which brings problems to
project.
> 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)