[ https://issues.apache.org/jira/browse/AVRO-2493?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17117013#comment-17117013 ]
Hudson commented on AVRO-2493: ------------------------------ FAILURE: Integrated in Jenkins build AvroJava #892 (See [https://builds.apache.org/job/AvroJava/892/]) AVRO-2493: Add custom logical types support for avro-maven-plugin. (github: [https://github.com/apache/avro/commit/ccbbb8353fcc168563c567580cb773d5fe442704]) * (edit) lang/java/avro/src/test/java/org/apache/avro/TestCircularReferences.java * (add) lang/java/integration-test/test-custom-conversions/src/main/java/org/apache/avro/codegentest/FixedSizeString.java * (add) lang/java/integration-test/test-custom-conversions/src/main/java/org/apache/avro/codegentest/FixedSizeStringFactory.java * (edit) lang/java/integration-test/codegen-test/pom.xml * (edit) lang/java/integration-test/codegen-test/src/test/java/org/apache/avro/codegentest/TestCustomConversion.java * (edit) lang/java/integration-test/codegen-test/src/test/resources/avro/custom_conversion.avsc * (edit) lang/java/avro/src/main/java/org/apache/avro/LogicalTypes.java * (add) lang/java/integration-test/test-custom-conversions/src/main/java/org/apache/avro/codegentest/FixedSizeStringLogicalType.java * (edit) lang/java/avro/src/test/java/org/apache/avro/reflect/TestReflectLogicalTypes.java * (add) lang/java/integration-test/test-custom-conversions/src/main/java/org/apache/avro/codegentest/FixedSizeStringConversion.java * (edit) lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/AbstractAvroMojo.java > Unable to register Logical Type for custom Conversion class > ----------------------------------------------------------- > > Key: AVRO-2493 > URL: https://issues.apache.org/jira/browse/AVRO-2493 > Project: Apache Avro > Issue Type: Bug > Components: java, logical types > Affects Versions: 1.9.0 > Reporter: Travis Yocum > Priority: Major > Fix For: 1.10.0 > > > I have created a custom conversion class for Java's (1.8) > java.time.OffsetDateTime. > {code:java} > public class OffsetDateTimeConversion extends Conversion<OffsetDateTime> { > private static final DateTimeFormatter DATE_TIME_FORMATTER = > DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.nnnnnnZZZZZ"); > @Override > public Class<OffsetDateTime> getConvertedType() { > return OffsetDateTime.class; > } > @Override > public String getLogicalTypeName() { > return "offset-date-time"; > } > @Override > public OffsetDateTime fromCharSequence(CharSequence value, Schema schema, > LogicalType type) { > return OffsetDateTime.parse(value, DATE_TIME_FORMATTER); > } > @Override > public CharSequence toCharSequence(OffsetDateTime value, Schema schema, > LogicalType type) { > return value.format(DATE_TIME_FORMATTER); > } > } > {code} > And my simple schema to test (including a field that uses the built-in > "time-millis" converter in Avro 1.9 for testing purposes): > TimeTest.avsc > > {code:java} > { > "type": "record", > "name": "TimeTest", > "namespace": "time.test", > "fields": [ > { > "name": "createTime", > "type": { > "type": "int", > "logicalType": "time-millis" > } > }, > { > "name": "createDateTime", > "type": { > "type": "string", > "logicalType": "offset-date-time" > } > } > ] > } > {code} > > I've also created a LogicalType for my conversion field that I need to > register: > > {code:java} > public class OffsetDateTimeLogicalType extends LogicalType { > public static final String LOGICAL_DATE_TIME_NAME = "offset-date-time"; > public OffsetDateTimeLogicalType() { > super(LOGICAL_DATE_TIME_NAME); > } > @Override > public void validate(Schema schema) { > super.validate(schema); > if (schema.getType() != Schema.Type.STRING) { > throw new IllegalArgumentException("Logical type > 'offset-date-time' must be of type string"); > } > } > }{code} > > I've been debugging the avro-maven-plugin and have been able to pinpoint > where my issue is occurring while parsing the schema: > > {code:java} > // parse logical type if present > result.logicalType = LogicalTypes.fromSchemaIgnoreInvalid(result); > {code} > > The schema's "logicalType" property is being set to null because it's not a > registered logical type. > The code I need to execute is: > > {code:java} > LogicalTypes.register(getLogicalTypeName(), schema -> new > OffsetDateTimeLogicalType()); > {code} > Without modifying the plugin code, I see no way to execute this register so > that the Schema.parse method (which is called before the conversion class is > executed) will recognize this LogicalType. > > The plugin has a config property <enableDecimalLogicalType> to allow for > registering the Decimal logical types but nothing to enable other logical > types. > Am I missing something or is this a real issue? -- This message was sent by Atlassian Jira (v8.3.4#803005)