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>

Reply via email to