diff --git a/distribution/server/src/assemble/LICENSE.bin.txt b/distribution/server/src/assemble/LICENSE.bin.txt index a091bd3fcdc41..9a57a48791066 100644 --- a/distribution/server/src/assemble/LICENSE.bin.txt +++ b/distribution/server/src/assemble/LICENSE.bin.txt @@ -312,8 +312,6 @@ The Apache Software License, Version 2.0 * JCommander -- com.beust-jcommander-1.48.jar * High Performance Primitive Collections for Java -- com.carrotsearch-hppc-0.7.3.jar * Jackson - - org.codehaus.jackson-jackson-core-asl-1.9.13.jar - - org.codehaus.jackson-jackson-mapper-asl-1.9.13.jar - com.fasterxml.jackson.core-jackson-annotations-2.10.1.jar - com.fasterxml.jackson.core-jackson-core-2.10.1.jar - com.fasterxml.jackson.core-jackson-databind-2.10.1.jar @@ -454,13 +452,11 @@ The Apache Software License, Version 2.0 * OpenCensus - io.opencensus-opencensus-api-0.18.0.jar - io.opencensus-opencensus-contrib-grpc-metrics-0.18.0.jar - * Paranamer - - com.thoughtworks.paranamer-paranamer-2.7.jar * Jodah - net.jodah-typetools-0.5.0.jar * Apache Avro - - org.apache.avro-avro-1.8.2.jar - - org.apache.avro-avro-protobuf-1.8.2.jar + - org.apache.avro-avro-1.9.1.jar + - org.apache.avro-avro-protobuf-1.9.1.jar * Apache Curator - org.apache.curator-curator-client-4.0.1.jar - org.apache.curator-curator-framework-4.0.1.jar @@ -568,10 +564,6 @@ Eclipse Public License 1.0 -- licenses/LICENSE-AspectJ.txt - org.aspectj-aspectjrt-1.9.2.jar - org.aspectj-aspectjweaver-1.9.2.jar -Public Domain - * XZ for Java -- licenses/LICENSE-xz.txt - - org.tukaani-xz-1.5.jar - Public Domain (CC0) -- licenses/LICENSE-CC0.txt * Reactive Streams -- org.reactivestreams-reactive-streams-1.0.2.jar diff --git a/pom.xml b/pom.xml index 7768efb80057c..9b988ceed310d 100644 --- a/pom.xml +++ b/pom.xml @@ -183,7 +183,7 @@ flexible messaging model and an intuitive client API. 2.3.0 5.1.1 1.11.297 - 1.8.2 + 1.9.1 2.10.1 2.1.1 3.8.11.2 diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/AvroSchemaBasedCompatibilityCheck.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/AvroSchemaBasedCompatibilityCheck.java index 9b8d4a10d6a06..5249fc617b6e1 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/AvroSchemaBasedCompatibilityCheck.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/AvroSchemaBasedCompatibilityCheck.java @@ -52,9 +52,11 @@ public void checkCompatible(Iterable from, SchemaData to, SchemaComp try { for (SchemaData schemaData : from) { Schema.Parser parser = new Schema.Parser(); + parser.setValidateDefaults(false); fromList.addFirst(parser.parse(new String(schemaData.getData(), UTF_8))); } Schema.Parser parser = new Schema.Parser(); + parser.setValidateDefaults(false); Schema toSchema = parser.parse(new String(to.getData(), UTF_8)); SchemaValidator schemaValidator = createSchemaValidator(strategy); schemaValidator.validate(toSchema, fromList); diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/JsonSchemaCompatibilityCheck.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/JsonSchemaCompatibilityCheck.java index 8f4f1398446b2..0e9f839e211d8 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/JsonSchemaCompatibilityCheck.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/JsonSchemaCompatibilityCheck.java @@ -99,6 +99,7 @@ private boolean isAvroSchema(SchemaData schemaData) { try { Schema.Parser fromParser = new Schema.Parser(); + fromParser.setValidateDefaults(false); Schema fromSchema = fromParser.parse(new String(schemaData.getData(), UTF_8)); return true; } catch (SchemaParseException e) { diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/validator/StructSchemaDataValidator.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/validator/StructSchemaDataValidator.java index 1eeed83a00081..2212e50be176f 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/validator/StructSchemaDataValidator.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/schema/validator/StructSchemaDataValidator.java @@ -49,6 +49,7 @@ public void validate(SchemaData schemaData) throws InvalidSchemaDataException { try { Schema.Parser avroSchemaParser = new Schema.Parser(); + avroSchemaParser.setValidateDefaults(false); avroSchemaParser.parse(new String(data, UTF_8)); } catch (SchemaParseException e) { if (schemaData.getType() == SchemaType.JSON) { diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/schema/BaseAvroSchemaCompatibilityTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/schema/BaseAvroSchemaCompatibilityTest.java index 70881d69449d9..7b1987ad09fe4 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/schema/BaseAvroSchemaCompatibilityTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/schema/BaseAvroSchemaCompatibilityTest.java @@ -33,49 +33,49 @@ public abstract class BaseAvroSchemaCompatibilityTest { private static final String schemaJson1 = "{\"type\":\"record\",\"name\":\"DefaultTest\",\"namespace\":\"org.apache.pulsar.broker.service.schema" + - ".AvroSchemaCompatibilityCheckTest$\",\"fields\":[{\"name\":\"field1\",\"type\":\"string\"}]}"; + ".AvroSchemaCompatibilityCheckTest\",\"fields\":[{\"name\":\"field1\",\"type\":\"string\"}]}"; private static final SchemaData schemaData1 = getSchemaData(schemaJson1); private static final String schemaJson2 = "{\"type\":\"record\",\"name\":\"DefaultTest\",\"namespace\":\"org.apache.pulsar.broker.service.schema" + - ".AvroSchemaCompatibilityCheckTest$\",\"fields\":[{\"name\":\"field1\",\"type\":\"string\"}," + + ".AvroSchemaCompatibilityCheckTest\",\"fields\":[{\"name\":\"field1\",\"type\":\"string\"}," + "{\"name\":\"field2\",\"type\":\"string\",\"default\":\"foo\"}]}"; private static final SchemaData schemaData2 = getSchemaData(schemaJson2); private static final String schemaJson3 = "{\"type\":\"record\",\"name\":\"DefaultTest\",\"namespace\":\"org" + - ".apache.pulsar.broker.service.schema.AvroSchemaCompatibilityCheckTest$\"," + + ".apache.pulsar.broker.service.schema.AvroSchemaCompatibilityCheckTest\"," + "\"fields\":[{\"name\":\"field1\",\"type\":\"string\"},{\"name\":\"field2\",\"type\":\"string\"}]}"; private static final SchemaData schemaData3 = getSchemaData(schemaJson3); private static final String schemaJson4 = "{\"type\":\"record\",\"name\":\"DefaultTest\",\"namespace\":\"org.apache.pulsar.broker.service.schema" + - ".AvroSchemaCompatibilityCheckTest$\",\"fields\":[{\"name\":\"field1_v2\",\"type\":\"string\"," + + ".AvroSchemaCompatibilityCheckTest\",\"fields\":[{\"name\":\"field1_v2\",\"type\":\"string\"," + "\"aliases\":[\"field1\"]}]}"; private static final SchemaData schemaData4 = getSchemaData(schemaJson4); private static final String schemaJson5 = "{\"type\":\"record\",\"name\":\"DefaultTest\",\"namespace\":\"org.apache.pulsar.broker.service.schema" + - ".AvroSchemaCompatibilityCheckTest$\",\"fields\":[{\"name\":\"field1\",\"type\":[\"null\"," + + ".AvroSchemaCompatibilityCheckTest\",\"fields\":[{\"name\":\"field1\",\"type\":[\"null\"," + "\"string\"]}]}"; private static final SchemaData schemaData5 = getSchemaData(schemaJson5); private static final String schemaJson6 = "{\"type\":\"record\",\"name\":\"DefaultTest\",\"namespace\":\"org.apache.pulsar.broker.service.schema" + - ".AvroSchemaCompatibilityCheckTest$\",\"fields\":[{\"name\":\"field1\",\"type\":[\"null\"," + + ".AvroSchemaCompatibilityCheckTest\",\"fields\":[{\"name\":\"field1\",\"type\":[\"null\"," + "\"string\",\"int\"]}]}"; private static final SchemaData schemaData6 = getSchemaData(schemaJson6); private static final String schemaJson7 = "{\"type\":\"record\",\"name\":\"DefaultTest\",\"namespace\":\"org.apache.pulsar.broker.service.schema" + - ".AvroSchemaCompatibilityCheckTest$\",\"fields\":[{\"name\":\"field1\",\"type\":\"string\"}," + + ".AvroSchemaCompatibilityCheckTest\",\"fields\":[{\"name\":\"field1\",\"type\":\"string\"}," + "{\"name\":\"field2\",\"type\":\"string\",\"default\":\"foo\"},{\"name\":\"field3\"," + "\"type\":\"string\",\"default\":\"bar\"}]}"; private static final SchemaData schemaData7 = getSchemaData(schemaJson7); private static final String schemaJson8 = "{\"type\":\"record\",\"name\":\"DefaultTest\",\"namespace\":\"org.apache.pulsar.broker.service.schema" + - ".AvroSchemaCompatibilityCheckTest$\",\"fields\":[{\"name\":\"field1\",\"type\":\"string\"}," + + ".AvroSchemaCompatibilityCheckTest\",\"fields\":[{\"name\":\"field1\",\"type\":\"string\"}," + "{\"name\":\"field2\",\"type\":\"string\"}]}"; private static final SchemaData schemaData8 = getSchemaData(schemaJson8); @@ -96,10 +96,10 @@ public void testBackwardCompatibility() { Assert.assertFalse(schemaCompatibilityCheck.isCompatible(schemaData1, schemaData3, SchemaCompatibilityStrategy.BACKWARD), "adding a field without default is NOT backwards compatible"); - // Modifying a field name is not backwards compatible - Assert.assertFalse(schemaCompatibilityCheck.isCompatible(schemaData1, schemaData4, - SchemaCompatibilityStrategy.BACKWARD), - "Modifying a field name is not backwards compatible"); + // Modifying a field name with an alias is backwards compatible + Assert.assertTrue(schemaCompatibilityCheck.isCompatible(schemaData1, schemaData4, + SchemaCompatibilityStrategy.BACKWARD), + "Modifying a field name with an alias is backwards compatible"); // evolving field to a union is backwards compatible Assert.assertTrue(schemaCompatibilityCheck.isCompatible(schemaData1, schemaData5, SchemaCompatibilityStrategy.BACKWARD), diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/schema/SchemaServiceTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/schema/SchemaServiceTest.java index e18fa839dec7b..ab7e910b51146 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/schema/SchemaServiceTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/service/schema/SchemaServiceTest.java @@ -293,18 +293,18 @@ public void dontReAddExistingSchemaInMiddle() throws Exception { public void checkIsCompatible() throws Exception { String schemaJson1 = "{\"type\":\"record\",\"name\":\"DefaultTest\",\"namespace\":\"org.apache.pulsar.broker.service.schema" + - ".AvroSchemaCompatibilityCheckTest$\",\"fields\":[{\"name\":\"field1\",\"type\":\"string\"}]}"; + ".AvroSchemaCompatibilityCheckTest\",\"fields\":[{\"name\":\"field1\",\"type\":\"string\"}]}"; SchemaData schemaData1 = getSchemaData(schemaJson1); String schemaJson2 = "{\"type\":\"record\",\"name\":\"DefaultTest\",\"namespace\":\"org.apache.pulsar.broker.service.schema" + - ".AvroSchemaCompatibilityCheckTest$\",\"fields\":[{\"name\":\"field1\",\"type\":\"string\"}," + + ".AvroSchemaCompatibilityCheckTest\",\"fields\":[{\"name\":\"field1\",\"type\":\"string\"}," + "{\"name\":\"field2\",\"type\":\"string\",\"default\":\"foo\"}]}"; SchemaData schemaData2 = getSchemaData(schemaJson2); String schemaJson3 = "{\"type\":\"record\",\"name\":\"DefaultTest\",\"namespace\":\"org.apache.pulsar.broker.service.schema" + - ".AvroSchemaCompatibilityCheckTest$\",\"fields\":[{\"name\":\"field1\",\"type\":\"string\"}," + + ".AvroSchemaCompatibilityCheckTest\",\"fields\":[{\"name\":\"field1\",\"type\":\"string\"}," + "{\"name\":\"field2\",\"type\":\"string\"}]}"; SchemaData schemaData3 = getSchemaData(schemaJson3); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/MessageParserTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/MessageParserTest.java index f64a0a925e739..87278a4d0745b 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/MessageParserTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/MessageParserTest.java @@ -20,6 +20,7 @@ import static org.testng.Assert.assertEquals; +import com.google.common.collect.Lists; import com.google.common.collect.Sets; import io.netty.buffer.Unpooled; @@ -44,8 +45,6 @@ import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; -import avro.shaded.com.google.common.collect.Lists; - public class MessageParserTest extends MockedPulsarServiceBaseTest { @BeforeMethod diff --git a/pulsar-client-go/pulsar/schemaDef_test.go b/pulsar-client-go/pulsar/schemaDef_test.go index 5fb68032147a4..8a06080f99ff3 100644 --- a/pulsar-client-go/pulsar/schemaDef_test.go +++ b/pulsar-client-go/pulsar/schemaDef_test.go @@ -51,7 +51,7 @@ func TestSchemaDef(t *testing.T) { _, err = initAvroCodec(errSchemaDef4) assert.NotNil(t, err) - errSchemaDef5 := "{\"type\":\"record\",\"name\":\"Example\",\"namespace\":\"operation.createJsonConsumer$\"," + + errSchemaDef5 := "{\"type\":\"record\",\"name\":\"Example\",\"namespace\":\"operation.createJsonConsumer\"," + "\"fields\":[{\"name\":\"ID\",\"type\":\"byte\"},{\"name\":\"Name\",\"type\":\":[\"null\",\"string\"],\"default\":null\"}]}" _, err = initAvroCodec(errSchemaDef5) assert.NotNil(t, err) diff --git a/pulsar-client/pom.xml b/pulsar-client/pom.xml index 14cae6f896f59..e2f086ca53bdb 100644 --- a/pulsar-client/pom.xml +++ b/pulsar-client/pom.xml @@ -127,12 +127,6 @@ jackson-module-jsonSchema - - joda-time - joda-time - provided - - net.jcip jcip-annotations diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/AvroSchema.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/AvroSchema.java index 9eddee5a4bd3f..f4d130f5ba03b 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/AvroSchema.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/AvroSchema.java @@ -41,38 +41,27 @@ public class AvroSchema extends StructSchema { private static final Logger LOG = LoggerFactory.getLogger(AvroSchema.class); - // the aim to fix avro's bug -// https://issues.apache.org/jira/browse/AVRO-1891 bug address explain -// fix the avro logical type read and write + // the aim to fix avro's bug + // https://issues.apache.org/jira/browse/AVRO-1891 bug address explain + // fix the avro logical type read and write static { - try { - ReflectData reflectDataAllowNull = ReflectData.AllowNull.get(); + ReflectData reflectDataAllowNull = ReflectData.AllowNull.get(); - reflectDataAllowNull.addLogicalTypeConversion(new Conversions.DecimalConversion()); - reflectDataAllowNull.addLogicalTypeConversion(new TimeConversions.DateConversion()); - reflectDataAllowNull.addLogicalTypeConversion(new TimeConversions.LossyTimeMicrosConversion()); - reflectDataAllowNull.addLogicalTypeConversion(new TimeConversions.LossyTimestampMicrosConversion()); - reflectDataAllowNull.addLogicalTypeConversion(new TimeConversions.TimeMicrosConversion()); - reflectDataAllowNull.addLogicalTypeConversion(new TimeConversions.TimestampMicrosConversion()); - reflectDataAllowNull.addLogicalTypeConversion(new TimeConversions.TimestampConversion()); - reflectDataAllowNull.addLogicalTypeConversion(new TimeConversions.TimeConversion()); + reflectDataAllowNull.addLogicalTypeConversion(new Conversions.DecimalConversion()); + reflectDataAllowNull.addLogicalTypeConversion(new TimeConversions.DateConversion()); + reflectDataAllowNull.addLogicalTypeConversion(new TimeConversions.TimeMillisConversion()); + reflectDataAllowNull.addLogicalTypeConversion(new TimeConversions.TimeMicrosConversion()); + reflectDataAllowNull.addLogicalTypeConversion(new TimeConversions.TimestampMillisConversion()); + reflectDataAllowNull.addLogicalTypeConversion(new TimeConversions.TimestampMicrosConversion()); - ReflectData reflectDataNotAllowNull = ReflectData.get(); + ReflectData reflectDataNotAllowNull = ReflectData.get(); - reflectDataNotAllowNull.addLogicalTypeConversion(new Conversions.DecimalConversion()); - reflectDataNotAllowNull.addLogicalTypeConversion(new TimeConversions.DateConversion()); - reflectDataNotAllowNull.addLogicalTypeConversion(new TimeConversions.TimestampConversion()); - reflectDataNotAllowNull.addLogicalTypeConversion(new TimeConversions.LossyTimeMicrosConversion()); - reflectDataNotAllowNull.addLogicalTypeConversion(new TimeConversions.LossyTimestampMicrosConversion()); - reflectDataNotAllowNull.addLogicalTypeConversion(new TimeConversions.TimeMicrosConversion()); - reflectDataNotAllowNull.addLogicalTypeConversion(new TimeConversions.TimestampMicrosConversion()); - reflectDataNotAllowNull.addLogicalTypeConversion(new TimeConversions.TimeConversion()); - } catch (Throwable t) { - if (LOG.isDebugEnabled()) { - LOG.debug("Avro logical types are not available. If you are going to use avro logical types, " + - "you can include `joda-time` in your dependency."); - } - } + reflectDataNotAllowNull.addLogicalTypeConversion(new Conversions.DecimalConversion()); + reflectDataNotAllowNull.addLogicalTypeConversion(new TimeConversions.DateConversion()); + reflectDataNotAllowNull.addLogicalTypeConversion(new TimeConversions.TimeMillisConversion()); + reflectDataNotAllowNull.addLogicalTypeConversion(new TimeConversions.TimeMicrosConversion()); + reflectDataNotAllowNull.addLogicalTypeConversion(new TimeConversions.TimestampMillisConversion()); + reflectDataNotAllowNull.addLogicalTypeConversion(new TimeConversions.TimestampMicrosConversion()); } private AvroSchema(SchemaInfo schemaInfo) { diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/StructSchema.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/StructSchema.java index ede229cb74e63..1302d7c84985f 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/StructSchema.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/StructSchema.java @@ -20,6 +20,7 @@ import static java.nio.charset.StandardCharsets.UTF_8; +import java.lang.reflect.Field; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; @@ -29,6 +30,7 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufInputStream; import org.apache.avro.AvroTypeException; +import org.apache.avro.Schema; import org.apache.avro.Schema.Parser; import org.apache.avro.reflect.ReflectData; import org.apache.commons.codec.binary.Hex; @@ -133,7 +135,26 @@ protected static org.apache.avro.Schema createAvroSchema(SchemaDefinition schema if (StringUtils.isNotBlank(schemaDefinition.getJsonDef())) { return parseAvroSchema(schemaDefinition.getJsonDef()); } else if (pojo != null) { - return schemaDefinition.getAlwaysAllowNull() ? ReflectData.AllowNull.get().getSchema(pojo) : ReflectData.get().getSchema(pojo); + ThreadLocal validateDefaults = null; + + try { + Field validateDefaultsField = Schema.class.getDeclaredField("VALIDATE_DEFAULTS"); + validateDefaultsField.setAccessible(true); + validateDefaults = (ThreadLocal) validateDefaultsField.get(null); + } catch (NoSuchFieldException | IllegalAccessException e) { + throw new RuntimeException("Cannot disable validation of default values", e); + } + + final boolean savedValidateDefaults = validateDefaults.get(); + + try { + // Disable validation of default values for compatibility + validateDefaults.set(false); + return schemaDefinition.getAlwaysAllowNull() ? ReflectData.AllowNull.get().getSchema(pojo) + : ReflectData.get().getSchema(pojo); + } finally { + validateDefaults.set(savedValidateDefaults); + } } else { throw new RuntimeException("Schema definition must specify pojo class or schema json definition"); } @@ -141,6 +162,7 @@ protected static org.apache.avro.Schema createAvroSchema(SchemaDefinition schema protected static org.apache.avro.Schema parseAvroSchema(String schemaJson) { final Parser parser = new Parser(); + parser.setValidateDefaults(false); return parser.parse(schemaJson); } diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/AvroSchemaTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/AvroSchemaTest.java index 62acef4ea3d5a..caeb8ac8393a6 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/AvroSchemaTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/AvroSchemaTest.java @@ -27,8 +27,10 @@ import static org.testng.Assert.fail; import java.math.BigDecimal; +import java.time.Instant; +import java.time.LocalDate; +import java.time.LocalTime; import java.util.Arrays; -import java.util.Date; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; @@ -51,10 +53,6 @@ import org.apache.pulsar.client.impl.schema.SchemaTestUtils.Foo; import org.apache.pulsar.common.schema.SchemaInfo; import org.apache.pulsar.common.schema.SchemaType; -import org.joda.time.DateTime; -import org.joda.time.LocalDate; -import org.joda.time.LocalTime; -import org.joda.time.chrono.ISOChronology; import org.testng.Assert; import org.testng.annotations.Test; @@ -90,7 +88,7 @@ private static class SchemaLogicalType{ @org.apache.avro.reflect.AvroSchema("{\"type\":\"int\",\"logicalType\":\"date\"}") LocalDate date; @org.apache.avro.reflect.AvroSchema("{\"type\":\"long\",\"logicalType\":\"timestamp-millis\"}") - DateTime timestampMillis; + Instant timestampMillis; @org.apache.avro.reflect.AvroSchema("{\"type\":\"int\",\"logicalType\":\"time-millis\"}") LocalTime timeMillis; @org.apache.avro.reflect.AvroSchema("{\"type\":\"long\",\"logicalType\":\"timestamp-micros\"}") @@ -117,7 +115,7 @@ public void testSchemaDefinition() throws SchemaValidationException { validator.validate( schema1, Arrays.asList( - new Schema.Parser().parse(schemaDef2) + new Schema.Parser().setValidateDefaults(false).parse(schemaDef2) ) ); fail("Should fail on validating incompatible schemas"); @@ -171,6 +169,7 @@ public void testAllowNullSchema() { AvroSchema avroSchema = AvroSchema.of(SchemaDefinition.builder().withPojo(Foo.class).build()); assertEquals(avroSchema.getSchemaInfo().getType(), SchemaType.AVRO); Schema.Parser parser = new Schema.Parser(); + parser.setValidateDefaults(false); String schemaJson = new String(avroSchema.getSchemaInfo().getSchema()); assertEquals(schemaJson, SCHEMA_AVRO_ALLOW_NULL); Schema schema = parser.parse(schemaJson); @@ -250,7 +249,7 @@ public void testLogicalType() { SchemaLogicalType schemaLogicalType = new SchemaLogicalType(); schemaLogicalType.setTimestampMicros(System.currentTimeMillis()*1000); - schemaLogicalType.setTimestampMillis(new DateTime("2019-03-26T04:39:58.469Z", ISOChronology.getInstanceUTC())); + schemaLogicalType.setTimestampMillis(Instant.parse("2019-03-26T04:39:58.469Z")); schemaLogicalType.setDecimal(new BigDecimal("12.34")); schemaLogicalType.setDate(LocalDate.now()); schemaLogicalType.setTimeMicros(System.currentTimeMillis()*1000); @@ -292,9 +291,9 @@ public void testDateAndTimestamp() { NasaMission nasaMission = NasaMission.newBuilder() .setId(1001) .setName("one") - .setCreateYear(new LocalDate(new Date().getTime())) - .setCreateTime(new LocalTime(new Date().getTime())) - .setCreateTimestamp(new DateTime(new Date().getTime())) + .setCreateYear(LocalDate.now()) + .setCreateTime(LocalTime.now()) + .setCreateTimestamp(Instant.now()) .build(); byte[] bytes = avroSchema.encode(nasaMission); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/JSONSchemaTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/JSONSchemaTest.java index f28011324a84d..c303ce9293329 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/JSONSchemaTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/JSONSchemaTest.java @@ -71,6 +71,7 @@ public void testAllowNullSchema() { JSONSchema jsonSchema = JSONSchema.of(SchemaDefinition.builder().withPojo(Foo.class).build()); Assert.assertEquals(jsonSchema.getSchemaInfo().getType(), SchemaType.JSON); Schema.Parser parser = new Schema.Parser(); + parser.setValidateDefaults(false); String schemaJson = new String(jsonSchema.getSchemaInfo().getSchema()); Assert.assertEquals(schemaJson, SCHEMA_JSON_ALLOW_NULL); Schema schema = parser.parse(schemaJson); diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/ProtobufSchemaTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/ProtobufSchemaTest.java index fc03412d72d31..abcfaf2ce16e6 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/ProtobufSchemaTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/ProtobufSchemaTest.java @@ -38,7 +38,7 @@ public class ProtobufSchemaTest { private static final String NAME = "foo"; private static final String EXPECTED_SCHEMA_JSON = "{\"type\":\"record\",\"name\":\"TestMessage\"," + - "\"namespace\":\"org.apache.pulsar.client.schema.proto.Test$\",\"fields\":[{\"name\":\"stringField\"," + + "\"namespace\":\"org.apache.pulsar.client.schema.proto.Test\",\"fields\":[{\"name\":\"stringField\"," + "\"type\":{\"type\":\"string\",\"avro.java.string\":\"String\"},\"default\":\"\"}," + "{\"name\":\"doubleField\",\"type\":\"double\",\"default\":0},{\"name\":\"intField\",\"type\":\"int\"," + "\"default\":0},{\"name\":\"testEnum\",\"type\":{\"type\":\"enum\",\"name\":\"TestEnum\"," + diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/SchemaBuilderTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/SchemaBuilderTest.java index 9ce3d5c2f5d44..72e9eafe6b226 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/SchemaBuilderTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/SchemaBuilderTest.java @@ -85,7 +85,7 @@ private static class People2 { @Test public void testAllOptionalFieldsSchema() { RecordSchemaBuilder recordSchemaBuilder = - SchemaBuilder.record("org.apache.pulsar.client.impl.schema.SchemaBuilderTest$.AllOptionalFields"); + SchemaBuilder.record("org.apache.pulsar.client.impl.schema.SchemaBuilderTest.AllOptionalFields"); recordSchemaBuilder.field("intField") .type(SchemaType.INT32).optional(); recordSchemaBuilder.field("longField") @@ -118,7 +118,7 @@ public void testAllOptionalFieldsSchema() { @Test public void testAllPrimitiveFieldsSchema() { RecordSchemaBuilder recordSchemaBuilder = - SchemaBuilder.record("org.apache.pulsar.client.impl.schema.SchemaBuilderTest$.AllPrimitiveFields"); + SchemaBuilder.record("org.apache.pulsar.client.impl.schema.SchemaBuilderTest.AllPrimitiveFields"); recordSchemaBuilder.field("intField") .type(SchemaType.INT32); recordSchemaBuilder.field("longField") @@ -149,7 +149,7 @@ public void testAllPrimitiveFieldsSchema() { @Test public void testGenericRecordBuilderByFieldName() { RecordSchemaBuilder recordSchemaBuilder = - SchemaBuilder.record("org.apache.pulsar.client.impl.schema.SchemaBuilderTest$.AllPrimitiveFields"); + SchemaBuilder.record("org.apache.pulsar.client.impl.schema.SchemaBuilderTest.AllPrimitiveFields"); recordSchemaBuilder.field("intField") .type(SchemaType.INT32); recordSchemaBuilder.field("longField") @@ -188,7 +188,7 @@ public void testGenericRecordBuilderByFieldName() { @Test public void testGenericRecordBuilderByIndex() { RecordSchemaBuilder recordSchemaBuilder = - SchemaBuilder.record("org.apache.pulsar.client.impl.schema.SchemaBuilderTest$.AllPrimitiveFields"); + SchemaBuilder.record("org.apache.pulsar.client.impl.schema.SchemaBuilderTest.AllPrimitiveFields"); recordSchemaBuilder.field("intField") .type(SchemaType.INT32); recordSchemaBuilder.field("longField") diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/SchemaInfoTest.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/SchemaInfoTest.java index bacf22be99e44..f74b3c9075f4d 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/SchemaInfoTest.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/SchemaInfoTest.java @@ -50,7 +50,7 @@ public class SchemaInfoTest { + " \"schema\": {\n" + " \"type\": \"record\",\n" + " \"name\": \"Bar\",\n" - + " \"namespace\": \"org.apache.pulsar.client.impl.schema.SchemaTestUtils$\",\n" + + " \"namespace\": \"org.apache.pulsar.client.impl.schema.SchemaTestUtils\",\n" + " \"fields\": [\n" + " {\n" + " \"name\": \"field1\",\n" @@ -72,7 +72,7 @@ public class SchemaInfoTest { + " \"schema\": {\n" + " \"type\": \"record\",\n" + " \"name\": \"Foo\",\n" - + " \"namespace\": \"org.apache.pulsar.client.impl.schema.SchemaTestUtils$\",\n" + + " \"namespace\": \"org.apache.pulsar.client.impl.schema.SchemaTestUtils\",\n" + " \"fields\": [\n" + " {\n" + " \"name\": \"field1\",\n" @@ -146,7 +146,7 @@ public class SchemaInfoTest { + " \"schema\": {\n" + " \"type\": \"record\",\n" + " \"name\": \"Foo\",\n" - + " \"namespace\": \"org.apache.pulsar.client.impl.schema.SchemaTestUtils$\",\n" + + " \"namespace\": \"org.apache.pulsar.client.impl.schema.SchemaTestUtils\",\n" + " \"fields\": [\n" + " {\n" + " \"name\": \"field1\",\n" @@ -216,7 +216,7 @@ public class SchemaInfoTest { + " \"schema\": {\n" + " \"type\": \"record\",\n" + " \"name\": \"Bar\",\n" - + " \"namespace\": \"org.apache.pulsar.client.impl.schema.SchemaTestUtils$\",\n" + + " \"namespace\": \"org.apache.pulsar.client.impl.schema.SchemaTestUtils\",\n" + " \"fields\": [\n" + " {\n" + " \"name\": \"field1\",\n" diff --git a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/SchemaTestUtils.java b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/SchemaTestUtils.java index 9f7ed211cc2a5..478dc10e2bdc1 100644 --- a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/SchemaTestUtils.java +++ b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/SchemaTestUtils.java @@ -104,34 +104,34 @@ public static class DerivedDerivedFoo extends DerivedFoo { } public static final String SCHEMA_AVRO_NOT_ALLOW_NULL - = "{\"type\":\"record\",\"name\":\"Foo\",\"namespace\":\"org.apache.pulsar.client.impl.schema.SchemaTestUtils$\",\"fields\":[{\"name\":\"field1\",\"type\":[\"null\",\"string\"]," + + = "{\"type\":\"record\",\"name\":\"Foo\",\"namespace\":\"org.apache.pulsar.client.impl.schema.SchemaTestUtils\",\"fields\":[{\"name\":\"field1\",\"type\":[\"null\",\"string\"]," + "\"default\":null},{\"name\":\"field2\",\"type\":[\"null\",\"string\"],\"default\":null},{\"name\":\"field3\",\"type\":\"int\"},{\"name\":\"field4\",\"type\":[\"null\",{\"type\":" + "\"record\",\"name\":\"Bar\",\"fields\":[{\"name\":\"field1\",\"type\":\"boolean\"}]}],\"default\":null},{\"name\":\"color\",\"type\":[\"null\",{\"type\":\"enum\",\"name\":\"Color\"," + "\"symbols\":[\"RED\",\"BLUE\"]}],\"default\":null},{\"name\":\"fieldUnableNull\",\"type\":\"string\",\"default\":\"defaultValue\"}]}"; - public static final String SCHEMA_AVRO_ALLOW_NULL = "{\"type\":\"record\",\"name\":\"Foo\",\"namespace\":\"org.apache.pulsar.client.impl.schema.SchemaTestUtils$\",\"fields\":[{\"name\":\"field1\"," + + public static final String SCHEMA_AVRO_ALLOW_NULL = "{\"type\":\"record\",\"name\":\"Foo\",\"namespace\":\"org.apache.pulsar.client.impl.schema.SchemaTestUtils\",\"fields\":[{\"name\":\"field1\"," + "\"type\":[\"null\",\"string\"],\"default\":null},{\"name\":\"field2\",\"type\":[\"null\",\"string\"],\"default\":null},{\"name\":\"field3\",\"type\":\"int\"},{\"name\":\"field4\",\"type\":[\"" + "null\",{\"type\":\"record\",\"name\":\"Bar\",\"fields\":[{\"name\":\"field1\",\"type\":\"boolean\"}]}],\"default\":null},{\"name\":\"color\",\"type\":[\"null\",{\"type\":\"enum\",\"name\":\"Color\"" + ",\"symbols\":[\"RED\",\"BLUE\"]}],\"default\":null},{\"name\":\"fieldUnableNull\",\"type\":[\"null\",\"string\"],\"default\":\"defaultValue\"}]}"; public static final String SCHEMA_JSON_NOT_ALLOW_NULL - = "{\"type\":\"record\",\"name\":\"Foo\",\"namespace\":\"org.apache.pulsar.client.impl.schema.SchemaTestUtils$\",\"fields\":[{\"name\":\"field1\",\"type\":[\"null\",\"string\"],\"default\":null},{\"name\"" + + = "{\"type\":\"record\",\"name\":\"Foo\",\"namespace\":\"org.apache.pulsar.client.impl.schema.SchemaTestUtils\",\"fields\":[{\"name\":\"field1\",\"type\":[\"null\",\"string\"],\"default\":null},{\"name\"" + ":\"field2\",\"type\":[\"null\",\"string\"],\"default\":null},{\"name\":\"field3\",\"type\":\"int\"},{\"name\":\"field4\",\"type\":[\"null\",{\"type\":\"record\",\"name\":\"Bar\",\"fields\":[{\"name\":\"" + "field1\",\"type\":\"boolean\"}]}],\"default\":null},{\"name\":\"color\",\"type\":[\"null\",{\"type\":\"enum\",\"name\":\"Color\",\"symbols\":[\"RED\",\"BLUE\"]}],\"default\":null},{\"name\":\"fieldUnableNull\"," + "\"type\":\"string\",\"default\":\"defaultValue\"}]}"; public static final String SCHEMA_JSON_ALLOW_NULL - = "{\"type\":\"record\",\"name\":\"Foo\",\"namespace\":\"org.apache.pulsar.client.impl.schema.SchemaTestUtils$\",\"fields\":[{\"name\":\"field1\",\"type\":[\"null\",\"string\"],\"default\":null}," + + = "{\"type\":\"record\",\"name\":\"Foo\",\"namespace\":\"org.apache.pulsar.client.impl.schema.SchemaTestUtils\",\"fields\":[{\"name\":\"field1\",\"type\":[\"null\",\"string\"],\"default\":null}," + "{\"name\":\"field2\",\"type\":[\"null\",\"string\"],\"default\":null},{\"name\":\"field3\",\"type\":\"int\"},{\"name\":\"field4\",\"type\":[\"null\",{\"type\":\"record\",\"name\":\"Bar\",\"fields\":" + "[{\"name\":\"field1\",\"type\":\"boolean\"}]}],\"default\":null},{\"name\":\"color\",\"type\":[\"null\",{\"type\":\"enum\",\"name\":\"Color\",\"symbols\":[\"RED\",\"BLUE\"]}],\"default\":null},{\"name\":" + "\"fieldUnableNull\",\"type\":[\"null\",\"string\"],\"default\":\"defaultValue\"}]}"; - public static final String KEY_VALUE_SCHEMA_INFO_INCLUDE_PRIMITIVE = "{\"key\":{\"type\":\"record\",\"name\":\"Foo\",\"namespace\":\"org.apache.pulsar.client.impl.schema.SchemaTestUtils$\",\"fields\":[{\"name\":\"" + + public static final String KEY_VALUE_SCHEMA_INFO_INCLUDE_PRIMITIVE = "{\"key\":{\"type\":\"record\",\"name\":\"Foo\",\"namespace\":\"org.apache.pulsar.client.impl.schema.SchemaTestUtils\",\"fields\":[{\"name\":\"" + "field1\",\"type\":[\"null\",\"string\"],\"default\":null},{\"name\":\"field2\",\"type\":[\"null\",\"string\"],\"default\":null},{\"name\":\"field3\",\"type\":\"int\"},{\"name\":\"field4\",\"type\":[\"null\"," + "{\"type\":\"record\",\"name\":\"Bar\",\"fields\":[{\"name\":\"field1\",\"type\":\"boolean\"}]}],\"default\":null},{\"name\":\"color\",\"type\":[\"null\",{\"type\":\"enum\",\"name\":\"Color\",\"symbols\":[\"RED\"" + ",\"BLUE\"]}],\"default\":null},{\"name\":\"fieldUnableNull\",\"type\":[\"null\",\"string\"],\"default\":\"defaultValue\"}]},\"value\":\"\"}"; - public static final String KEY_VALUE_SCHEMA_INFO_NOT_INCLUDE_PRIMITIVE = "{\"key\":{\"type\":\"record\",\"name\":\"Foo\",\"namespace\":\"org.apache.pulsar.client.impl.schema.SchemaTestUtils$\",\"fields\":[{\"name\":\"field1\"" + + public static final String KEY_VALUE_SCHEMA_INFO_NOT_INCLUDE_PRIMITIVE = "{\"key\":{\"type\":\"record\",\"name\":\"Foo\",\"namespace\":\"org.apache.pulsar.client.impl.schema.SchemaTestUtils\",\"fields\":[{\"name\":\"field1\"" + ",\"type\":[\"null\",\"string\"],\"default\":null},{\"name\":\"field2\",\"type\":[\"null\",\"string\"],\"default\":null},{\"name\":\"field3\",\"type\":\"int\"},{\"name\":\"field4\",\"type\":[\"null\",{\"type\":\"record\"" + ",\"name\":\"Bar\",\"fields\":[{\"name\":\"field1\",\"type\":\"boolean\"}]}],\"default\":null},{\"name\":\"color\",\"type\":[\"null\",{\"type\":\"enum\",\"name\":\"Color\",\"symbols\":[\"RED\",\"BLUE\"]}],\"default\":null}," + - "{\"name\":\"fieldUnableNull\",\"type\":[\"null\",\"string\"],\"default\":\"defaultValue\"}]},\"value\":{\"type\":\"record\",\"name\":\"Foo\",\"namespace\":\"org.apache.pulsar.client.impl.schema.SchemaTestUtils$\",\"fields\":" + + "{\"name\":\"fieldUnableNull\",\"type\":[\"null\",\"string\"],\"default\":\"defaultValue\"}]},\"value\":{\"type\":\"record\",\"name\":\"Foo\",\"namespace\":\"org.apache.pulsar.client.impl.schema.SchemaTestUtils\",\"fields\":" + "[{\"name\":\"field1\",\"type\":[\"null\",\"string\"],\"default\":null},{\"name\":\"field2\",\"type\":[\"null\",\"string\"],\"default\":null},{\"name\":\"field3\",\"type\":\"int\"},{\"name\":\"field4\",\"type\":[\"null\"," + "{\"type\":\"record\",\"name\":\"Bar\",\"fields\":[{\"name\":\"field1\",\"type\":\"boolean\"}]}],\"default\":null},{\"name\":\"color\",\"type\":[\"null\",{\"type\":\"enum\",\"name\":\"Color\",\"symbols\":[\"RED\",\"BLUE\"]}]," + "\"default\":null},{\"name\":\"fieldUnableNull\",\"type\":[\"null\",\"string\"],\"default\":\"defaultValue\"}]}}"; diff --git a/pulsar-flink/pom.xml b/pulsar-flink/pom.xml index 75b7b5cd816f1..2fa81d369ef7a 100644 --- a/pulsar-flink/pom.xml +++ b/pulsar-flink/pom.xml @@ -61,6 +61,12 @@ ${flink.version} + + org.apache.avro + avro + ${avro.version} + + ${project.groupId} pulsar-client diff --git a/pulsar-proxy/pom.xml b/pulsar-proxy/pom.xml index 72ee09357c93b..3ff641ee0647b 100644 --- a/pulsar-proxy/pom.xml +++ b/pulsar-proxy/pom.xml @@ -89,6 +89,11 @@ jersey-media-json-jackson + + com.google.guava + guava + + com.fasterxml.jackson.jaxrs jackson-jaxrs-json-provider diff --git a/pulsar-proxy/src/main/java/org/apache/pulsar/proxy/server/ParserProxyHandler.java b/pulsar-proxy/src/main/java/org/apache/pulsar/proxy/server/ParserProxyHandler.java index 8b4fe64545347..cd04b8e62012e 100644 --- a/pulsar-proxy/src/main/java/org/apache/pulsar/proxy/server/ParserProxyHandler.java +++ b/pulsar-proxy/src/main/java/org/apache/pulsar/proxy/server/ParserProxyHandler.java @@ -19,8 +19,7 @@ package org.apache.pulsar.proxy.server; - -import avro.shaded.com.google.common.collect.Lists; +import com.google.common.collect.Lists; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufUtil; import io.netty.buffer.Unpooled; diff --git a/pulsar-sql/presto-distribution/LICENSE b/pulsar-sql/presto-distribution/LICENSE index 601dba5b50f92..d130836de8d0f 100644 --- a/pulsar-sql/presto-distribution/LICENSE +++ b/pulsar-sql/presto-distribution/LICENSE @@ -209,6 +209,7 @@ The Apache Software License, Version 2.0 * Jackson - jackson-annotations-2.8.11.jar + - jackson-core-2.8.11.jar - jackson-databind-2.8.11.4.jar - jackson-dataformat-smile-2.8.11.jar - jackson-datatype-guava-2.8.11.jar @@ -217,9 +218,6 @@ The Apache Software License, Version 2.0 - jackson-datatype-jdk8-2.8.11.jar - jackson-datatype-joda-2.8.11.jar - jackson-datatype-jsr310-2.8.11.jar - - jackson-core-2.8.11.jar - - jackson-core-asl-1.9.13.jar - - jackson-mapper-asl-1.9.13.jar - jackson-dataformat-yaml-2.8.11.jar * Guava - guava-25.1-jre.jar @@ -355,8 +353,8 @@ The Apache Software License, Version 2.0 * Apache XBean :: Reflect - xbean-reflect-3.4.jar * Avro - - avro-1.8.2.jar - - avro-protobuf-1.8.2.jar + - avro-1.9.1.jar + - avro-protobuf-1.9.1.jar * Javax - javax.inject-1.jar - javax.inject-1.jar @@ -475,8 +473,6 @@ BSD License - asm-util-6.0.jar * JLine - jline-2.14.6.jar - * ParaNamer Core - - paranamer-2.7.jar * Zstd-jni - zstd-jni-1.3.7-3.jar @@ -545,8 +541,6 @@ Public Domain (CC0) -- licenses/LICENSE-CC0.txt - HdrHistogram-2.1.9.jar * AOP Alliance - aopalliance-1.0.jar - * XZ For Java - - xz-1.5.jar * Reactive Streams - reactive-streams-1.0.2.jar diff --git a/pulsar-sql/presto-pulsar/src/main/java/org/apache/pulsar/sql/presto/PulsarConnectorUtils.java b/pulsar-sql/presto-pulsar/src/main/java/org/apache/pulsar/sql/presto/PulsarConnectorUtils.java index 58794c089b570..03a3a58b080a7 100644 --- a/pulsar-sql/presto-pulsar/src/main/java/org/apache/pulsar/sql/presto/PulsarConnectorUtils.java +++ b/pulsar-sql/presto-pulsar/src/main/java/org/apache/pulsar/sql/presto/PulsarConnectorUtils.java @@ -34,6 +34,7 @@ public class PulsarConnectorUtils { public static Schema parseSchema(String schemaJson) { Schema.Parser parser = new Schema.Parser(); + parser.setValidateDefaults(false); return parser.parse(schemaJson); } diff --git a/site2/docs/io-quickstart.md b/site2/docs/io-quickstart.md index eb2787e956aec..6fe87b03ed05d 100644 --- a/site2/docs/io-quickstart.md +++ b/site2/docs/io-quickstart.md @@ -504,7 +504,7 @@ In this section, you need to configure a JDBC sink connector. > #### Tip > - > For more information about AVRO, see [Apache Avro](https://avro.apache.org/docs/1.8.2/). + > For more information about AVRO, see [Apache Avro](https://avro.apache.org/docs/1.9.1/). 3. Upload a schema to a topic. diff --git a/tests/integration/pom.xml b/tests/integration/pom.xml index c43c10c5672f8..5f2a50feac6cc 100644 --- a/tests/integration/pom.xml +++ b/tests/integration/pom.xml @@ -131,12 +131,6 @@ elasticsearch-rest-high-level-client - - joda-time - joda-time - test - - com.facebook.presto presto-jdbc diff --git a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/schema/SchemaTest.java b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/schema/SchemaTest.java index 89e9291af0965..70a469290d848 100644 --- a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/schema/SchemaTest.java +++ b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/schema/SchemaTest.java @@ -35,14 +35,13 @@ import org.apache.pulsar.tests.integration.schema.Schemas.Student; import org.apache.pulsar.tests.integration.schema.Schemas.AvroLogicalType; import org.apache.pulsar.tests.integration.suites.PulsarTestSuite; -import org.joda.time.DateTime; -import org.joda.time.LocalDate; -import org.joda.time.LocalTime; -import org.joda.time.chrono.ISOChronology; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import java.math.BigDecimal; +import java.time.Instant; +import java.time.LocalDate; +import java.time.LocalTime; import java.util.ArrayList; import java.util.List; @@ -187,7 +186,7 @@ public void testAvroLogicalType() throws Exception { AvroLogicalType messageForSend = AvroLogicalType.builder() .decimal(new BigDecimal("12.34")) .timestampMicros(System.currentTimeMillis() * 1000) - .timestampMillis(new DateTime("2019-03-26T04:39:58.469Z", ISOChronology.getInstanceUTC())) + .timestampMillis(Instant.parse("2019-03-26T04:39:58.469Z")) .timeMillis(LocalTime.now()) .timeMicros(System.currentTimeMillis() * 1000) .date(LocalDate.now()) diff --git a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/schema/Schemas.java b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/schema/Schemas.java index 8158e107c6b33..9841bcfc9b6bb 100644 --- a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/schema/Schemas.java +++ b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/schema/Schemas.java @@ -42,11 +42,10 @@ import org.apache.avro.reflect.AvroDefault; -import org.joda.time.DateTime; -import org.joda.time.LocalDate; -import org.joda.time.LocalTime; - import java.math.BigDecimal; +import java.time.Instant; +import java.time.LocalDate; +import java.time.LocalTime; /** * Keep a list of schemas for testing. @@ -121,7 +120,7 @@ public static class AvroLogicalType{ @org.apache.avro.reflect.AvroSchema("{\"type\":\"int\",\"logicalType\":\"date\"}") LocalDate date; @org.apache.avro.reflect.AvroSchema("{\"type\":\"long\",\"logicalType\":\"timestamp-millis\"}") - DateTime timestampMillis; + Instant timestampMillis; @org.apache.avro.reflect.AvroSchema("{\"type\":\"int\",\"logicalType\":\"time-millis\"}") LocalTime timeMillis; @org.apache.avro.reflect.AvroSchema("{\"type\":\"long\",\"logicalType\":\"timestamp-micros\"}")