From ddf5429efb91e43386d506061b196330cbaae473 Mon Sep 17 00:00:00 2001 From: Matteo Merli Date: Tue, 22 Oct 2019 20:34:18 -0700 Subject: [PATCH] Fixed StringSchema static initialization (#5445) --- .../client/impl/schema/StringSchema.java | 38 +++++++++++-------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/StringSchema.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/StringSchema.java index 3c7959fe892..7e813acf11d 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/StringSchema.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/StringSchema.java @@ -36,10 +36,22 @@ import java.nio.charset.StandardCharsets; */ public class StringSchema extends AbstractSchema { - static final String CHARSET_KEY = "__charset"; - - public static StringSchema utf8() { - return UTF8; + static final String CHARSET_KEY; + + private static final SchemaInfo DEFAULT_SCHEMA_INFO; + private static final Charset DEFAULT_CHARSET; + private static final StringSchema UTF8; + + static { + // Ensure the ordering of the static initialization + CHARSET_KEY = "__charset"; + DEFAULT_CHARSET = StandardCharsets.UTF_8; + DEFAULT_SCHEMA_INFO = new SchemaInfo() + .setName("String") + .setType(SchemaType.STRING) + .setSchema(new byte[0]); + + UTF8 = new StringSchema(StandardCharsets.UTF_8); } private static final FastThreadLocal tmpBuffer = new FastThreadLocal() { @@ -59,14 +71,10 @@ public class StringSchema extends AbstractSchema { } } - private static final SchemaInfo DEFAULT_SCHEMA_INFO = new SchemaInfo() - .setName("String") - .setType(SchemaType.STRING) - .setSchema(new byte[0]); - private static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8; + public static StringSchema utf8() { + return UTF8; + } - // make sure other static fields are initialized before this field - private static final StringSchema UTF8 = new StringSchema(StandardCharsets.UTF_8); private final Charset charset; private final SchemaInfo schemaInfo; @@ -80,10 +88,10 @@ public class StringSchema extends AbstractSchema { Map properties = new HashMap<>(); properties.put(CHARSET_KEY, charset.name()); this.schemaInfo = new SchemaInfo() - .setName(DEFAULT_SCHEMA_INFO.getName()) - .setType(SchemaType.STRING) - .setSchema(DEFAULT_SCHEMA_INFO.getSchema()) - .setProperties(properties); + .setName(DEFAULT_SCHEMA_INFO.getName()) + .setType(SchemaType.STRING) + .setSchema(DEFAULT_SCHEMA_INFO.getSchema()) + .setProperties(properties); } public byte[] encode(String message) { -- GitLab