This is an automated email from the ASF dual-hosted git repository.
rskraba pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/avro.git
The following commit(s) were added to refs/heads/main by this push:
new 7ac480016b AVRO-4123: Parsed named schemas always empty (#3361)
7ac480016b is described below
commit 7ac480016ba893d89eeeee95b7f68b2af892d451
Author: Oscar Westra van Holthe - Kind <[email protected]>
AuthorDate: Fri Apr 18 17:41:00 2025 +0200
AVRO-4123: Parsed named schemas always empty (#3361)
* AVRO-4123: fix missing parsed schemas
* AVRO-4123: Remove unnecessary private method
* AVRO-4123: Do not use List.getFirst() yet
* AVRO-4123: Fix tests for recent JDKs
Recent JDKs alter the requirements for using a security manager. This
affects Hadoop code. Also, misplaced javadoc affects tests.
When AVRO-4126 is merged, the change to TestSpecificCompiler.java can be
reverted.
---
.../avro/src/main/java/org/apache/avro/ParseContext.java | 3 +--
.../avro/src/test/java/org/apache/avro/TestSchemaParser.java | 9 +++++++--
.../apache/avro/compiler/specific/TestSpecificCompiler.java | 2 +-
.../idl/src/main/java/org/apache/avro/idl/IdlReader.java | 12 ++++--------
lang/java/mapred/pom.xml | 2 ++
lang/java/tools/pom.xml | 2 ++
lang/java/trevni/pom.xml | 2 ++
7 files changed, 19 insertions(+), 13 deletions(-)
diff --git a/lang/java/avro/src/main/java/org/apache/avro/ParseContext.java
b/lang/java/avro/src/main/java/org/apache/avro/ParseContext.java
index b7bc42b978..0c405dd640 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/ParseContext.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/ParseContext.java
@@ -21,7 +21,6 @@ import org.apache.avro.util.SchemaResolver;
import org.apache.avro.util.Schemas;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.LinkedHashMap;
@@ -253,7 +252,7 @@ public class ParseContext {
}
public SchemaParser.ParseResult commit(Schema mainSchema) {
- Collection<Schema> parsedNamedSchemas = newSchemas.values();
+ List<Schema> parsedNamedSchemas = new ArrayList<>(newSchemas.values());
SchemaParser.ParseResult parseResult = new SchemaParser.ParseResult() {
@Override
public Schema mainSchema() {
diff --git a/lang/java/avro/src/test/java/org/apache/avro/TestSchemaParser.java
b/lang/java/avro/src/test/java/org/apache/avro/TestSchemaParser.java
index 29c8f65be6..186579bb5d 100644
--- a/lang/java/avro/src/test/java/org/apache/avro/TestSchemaParser.java
+++ b/lang/java/avro/src/test/java/org/apache/avro/TestSchemaParser.java
@@ -27,6 +27,7 @@ import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
+import java.util.List;
import static java.util.Collections.singletonList;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -35,7 +36,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
class TestSchemaParser {
private static final Schema SCHEMA_REAL = Schema.createFixed("Real", null,
"tests", 42);
- private static final String SCHEMA_JSON = SCHEMA_REAL.toString(false);
+ private static final String SCHEMA_JSON =
SchemaFormatter.getInstance("json").format(SCHEMA_REAL);
private static final Charset[] UTF_CHARSETS = { StandardCharsets.UTF_8,
StandardCharsets.UTF_16LE,
StandardCharsets.UTF_16BE };
@@ -88,7 +89,11 @@ class TestSchemaParser {
@Test
void testParseByCustomParser() {
- Schema schema = new
SchemaParser().parse(DummySchemaParser.SCHEMA_TEXT_ONE).mainSchema();
+ SchemaParser.ParseResult parseResult = new
SchemaParser().parse(DummySchemaParser.SCHEMA_TEXT_ONE);
+ List<Schema> namedSchemas = parseResult.parsedNamedSchemas();
+ assertEquals(1, namedSchemas.size());
+ assertEquals(DummySchemaParser.FIXED_SCHEMA, namedSchemas.get(0));
+ Schema schema = parseResult.mainSchema();
assertEquals(DummySchemaParser.FIXED_SCHEMA, schema);
}
diff --git
a/lang/java/compiler/src/test/java/org/apache/avro/compiler/specific/TestSpecificCompiler.java
b/lang/java/compiler/src/test/java/org/apache/avro/compiler/specific/TestSpecificCompiler.java
index 19d63d033c..1916ab43c4 100644
---
a/lang/java/compiler/src/test/java/org/apache/avro/compiler/specific/TestSpecificCompiler.java
+++
b/lang/java/compiler/src/test/java/org/apache/avro/compiler/specific/TestSpecificCompiler.java
@@ -87,7 +87,7 @@ public class TestSpecificCompiler {
static void assertCompilesWithJavaCompiler(File dstDir,
Collection<SpecificCompiler.OutputFile> outputs)
throws IOException {
- assertCompilesWithJavaCompiler(dstDir, outputs, false);
+ assertCompilesWithJavaCompiler(dstDir, outputs, true);
}
/**
diff --git a/lang/java/idl/src/main/java/org/apache/avro/idl/IdlReader.java
b/lang/java/idl/src/main/java/org/apache/avro/idl/IdlReader.java
index 96d45ab6dc..f6d1fb49dc 100644
--- a/lang/java/idl/src/main/java/org/apache/avro/idl/IdlReader.java
+++ b/lang/java/idl/src/main/java/org/apache/avro/idl/IdlReader.java
@@ -164,10 +164,6 @@ public class IdlReader {
return parseContext.find(fullName, null);
}
- private void addSchema(Schema schema) {
- parseContext.put(schema);
- }
-
public IdlFile parse(Path location) throws IOException {
return parse(location.toUri());
}
@@ -437,7 +433,7 @@ public class IdlReader {
try (InputStream stream = importLocation.toURL().openStream()) {
Protocol importProtocol = Protocol.parse(stream);
for (Schema s : importProtocol.getTypes()) {
- addSchema(s);
+ parseContext.put(s);
}
if (protocol != null) {
protocol.getMessages().putAll(importProtocol.getMessages());
@@ -515,7 +511,7 @@ public class IdlReader {
Schema schema = Schema.createFixed(name, doc, space, size);
properties.copyAliases(schema::addAlias);
properties.copyProperties(schema);
- addSchema(schema);
+ parseContext.put(schema);
}
@Override
@@ -539,7 +535,7 @@ public class IdlReader {
enumSymbols.clear();
enumDefaultSymbol = null;
- addSchema(schema);
+ parseContext.put(schema);
}
@Override
@@ -590,7 +586,7 @@ public class IdlReader {
public void exitRecordDeclaration(RecordDeclarationContext ctx) {
schema.setFields(fields);
fields.clear();
- addSchema(schema);
+ parseContext.put(schema);
schema = null;
popNamespace();
diff --git a/lang/java/mapred/pom.xml b/lang/java/mapred/pom.xml
index 5c4d8733cf..91982cfd11 100644
--- a/lang/java/mapred/pom.xml
+++ b/lang/java/mapred/pom.xml
@@ -92,6 +92,8 @@
<forkCount>1</forkCount>
<reuseForks>false</reuseForks>
<parallel>none</parallel>
+ <!-- Required for recent JDKs (fixes "UnsupportedOperationException:
getSubject is supported only if a security manager is allowed") -->
+ <argLine>-Djava.security.manager=allow</argLine>
</configuration>
</plugin>
<plugin>
diff --git a/lang/java/tools/pom.xml b/lang/java/tools/pom.xml
index 1342458dd5..4ed8a5fa8d 100644
--- a/lang/java/tools/pom.xml
+++ b/lang/java/tools/pom.xml
@@ -158,6 +158,8 @@
<forkCount>1</forkCount>
<reuseForks>false</reuseForks>
<parallel>none</parallel>
+ <!-- Required for recent JDKs (fixes "UnsupportedOperationException:
getSubject is supported only if a security manager is allowed") -->
+ <argLine>-Djava.security.manager=allow</argLine>
</configuration>
</plugin>
<!-- Allow guava because hadoop brings it as a transitive dependency. -->
diff --git a/lang/java/trevni/pom.xml b/lang/java/trevni/pom.xml
index 1a1e8581ac..64fd16c10f 100644
--- a/lang/java/trevni/pom.xml
+++ b/lang/java/trevni/pom.xml
@@ -55,6 +55,8 @@
<forkCount>1</forkCount>
<reuseForks>false</reuseForks>
<parallel>none</parallel>
+ <!-- Required for recent JDKs (fixes
"UnsupportedOperationException: getSubject is supported only if a security
manager is allowed") -->
+ <argLine>-Djava.security.manager=allow</argLine>
</configuration>
</plugin>
</plugins>