This is an automated email from the ASF dual-hosted git repository.

olabusayo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/daffodil.git


The following commit(s) were added to refs/heads/main by this push:
     new c780dba73 Replace usage of java.util.Optional in api
c780dba73 is described below

commit c780dba7335fa77d7a53bddc56ec56c0a73b5b18
Author: olabusayoT <[email protected]>
AuthorDate: Fri Aug 8 12:06:33 2025 -0400

    Replace usage of java.util.Optional in api
    
    - use null instead to offer the same functionality ex, instead of 
Optional.of(tue), Optional.of(false) or Optional.empty(), we have just true, 
false or null.
    - update documentation/tests
    
    DAFFODIL-3019
---
 .../java/org/apache/daffodil/api/Compiler.java     | 99 ++++------------------
 .../daffodil/api/infoset/InfosetInputter.java      |  7 +-
 .../apache/daffodil/api/validation/Validators.java | 10 +--
 .../apache/daffodil/core/compiler/Compiler.scala   | 19 ++---
 .../runtime1/infoset/InfosetInputter.scala         |  4 +-
 .../runtime1/infoset/JDOMInfosetInputter.scala     | 13 ++-
 .../runtime1/infoset/JsonInfosetInputter.scala     |  9 +-
 .../runtime1/infoset/NullInfosetInputter.scala     |  8 +-
 .../runtime1/infoset/SAXInfosetInputter.scala      | 13 ++-
 .../runtime1/infoset/ScalaXMLInfosetInputter.scala | 13 ++-
 .../runtime1/infoset/W3CDOMInfosetInputter.scala   | 12 +--
 .../runtime1/infoset/XMLTextInfosetInputter.scala  | 13 ++-
 .../daffodil/jexample/TestInfosetInputter.java     |  7 +-
 .../lib/validation/TestValidatorsSPI.scala         |  6 +-
 .../org/apache/daffodil/sexample/TestAPI.scala     | 21 ++---
 .../sexample/TestInfosetInputterOutputter.scala    | 13 ++-
 .../processor/tdml/TDMLInfosetInputter.scala       |  2 +-
 17 files changed, 94 insertions(+), 175 deletions(-)

diff --git a/daffodil-core/src/main/java/org/apache/daffodil/api/Compiler.java 
b/daffodil-core/src/main/java/org/apache/daffodil/api/Compiler.java
index 0ee3026f5..6d3ab753e 100644
--- a/daffodil-core/src/main/java/org/apache/daffodil/api/Compiler.java
+++ b/daffodil-core/src/main/java/org/apache/daffodil/api/Compiler.java
@@ -24,7 +24,6 @@ import java.io.IOException;
 import java.net.URI;
 import java.nio.channels.ReadableByteChannel;
 import java.util.Map;
-import java.util.Optional;
 
 /**
  * Compile DFDL schemas into {@link ProcessorFactory}'s or
@@ -43,7 +42,7 @@ public interface Compiler {
    * @return {@link ProcessorFactory} used to create {@link DataProcessor}(s). 
Must check {@code ProcessorFactory.isError} before using it.
    */
   default ProcessorFactory compileFile(File schemaFile) {
-    return compileFile(schemaFile, Optional.empty(), Optional.empty());
+    return compileFile(schemaFile, null, null);
   }
 
   /**
@@ -57,22 +56,7 @@ public interface Compiler {
    * @return {@link ProcessorFactory} used to create {@link DataProcessor}(s). 
Must check {@code ProcessorFactory.isError} before using it.
    */
   default ProcessorFactory compileFile(File schemaFile, String rootName) {
-    return compileFile(schemaFile, Optional.ofNullable(rootName), 
Optional.empty());
-  }
-
-  /**
-   * Compile DFDL schema file into a {@link ProcessorFactory}
-   * <p>
-   * To allow jar-file packaging, (where schema files might be part of a jar),
-   * it is recommended to use {@code Compiler.compileSource} instead.
-   *
-   * @param schemaFile  DFDL schema file used to create a {@link 
ProcessorFactory}.
-   * @param optRootName Optional for name of root element, or Optional.empty() 
to choose automatically from first element of schema.
-   *                    Defaults to Optional.empty().
-   * @return {@link ProcessorFactory} used to create {@link DataProcessor}(s). 
Must check {@code ProcessorFactory.isError} before using it.
-   */
-  default ProcessorFactory compileFile(File schemaFile, Optional<String> 
optRootName) {
-    return compileFile(schemaFile, optRootName, Optional.empty());
+    return compileFile(schemaFile, rootName, null);
   }
 
   /**
@@ -88,24 +72,7 @@ public interface Compiler {
    *                      when unambiguous. Pass "" (empty string) for No 
Namespace.*
    * @return {@link ProcessorFactory} used to create {@link DataProcessor}(s). 
Must check {@code ProcessorFactory.isError} before using it.
    */
-  default ProcessorFactory compileFile(File schemaFile, String rootName, 
String rootNamespace) {
-    return compileFile(schemaFile, Optional.ofNullable(rootName), 
Optional.ofNullable(rootNamespace));
-  }
-
-  /**
-   * Compile DFDL schema file into a {@link ProcessorFactory}
-   * <p>
-   * To allow jar-file packaging, (where schema files might be part of a jar),
-   * it is recommended to use {@code Compiler.compileSource} instead.
-   *
-   * @param schemaFile       DFDL schema file used to create a {@link 
ProcessorFactory}.
-   * @param optRootName      Optional for name of root element, or 
Optional.empty() to choose automatically from first element of schema.
-   *                         Defaults to Optional.empty().
-   * @param optRootNamespace Optional for string of namespace of the root 
element, or Optional.empty() to infer automatically when
-   *                         unambiguous. Pass Some("") (empty string) for No 
Namespace. Defaults to Optional.empty().
-   * @return {@link ProcessorFactory} used to create {@link DataProcessor}(s). 
Must check {@code ProcessorFactory.isError} before using it.
-   */
-  ProcessorFactory compileFile(File schemaFile, Optional<String> optRootName, 
Optional<String> optRootNamespace);
+  ProcessorFactory compileFile(File schemaFile, String rootName, String 
rootNamespace);
 
   /**
    * Compile DFDL schema source into a {@link ProcessorFactory}
@@ -114,7 +81,7 @@ public interface Compiler {
    * @return {@link ProcessorFactory} used to create {@link DataProcessor}(s). 
Must check {@code ProcessorFactory.isError} before using it.
    */
   default ProcessorFactory compileSource(URI uri) {
-    return compileSource(uri, Optional.empty(), Optional.empty());
+    return compileSource(uri, null, null);
   }
 
   /**
@@ -125,19 +92,7 @@ public interface Compiler {
    * @return {@link ProcessorFactory} used to create {@link DataProcessor}(s). 
Must check {@code ProcessorFactory.isError} before using it.
    */
   default ProcessorFactory compileSource(URI uri, String rootName) {
-    return compileSource(uri, Optional.ofNullable(rootName), Optional.empty());
-  }
-
-  /**
-   * Compile DFDL schema source into a {@link ProcessorFactory}
-   *
-   * @param uri         URI of DFDL schema file used to create a {@link 
ProcessorFactory}.
-   * @param optRootName Optional for name of root element, or Optional.empty() 
to choose automatically from first
-   *                    element of schema. Defaults to Optional.empty().
-   * @return {@link ProcessorFactory} used to create {@link DataProcessor}(s). 
Must check {@code ProcessorFactory.isError} before using it.
-   */
-  default ProcessorFactory compileSource(URI uri, Optional<String> 
optRootName) {
-    return compileSource(uri, optRootName, Optional.empty());
+    return compileSource(uri, rootName, null);
   }
 
   /**
@@ -149,22 +104,7 @@ public interface Compiler {
    *                      when unambiguous. Pass "" (empty string) for No 
Namespace.
    * @return {@link ProcessorFactory} used to create {@link DataProcessor}(s). 
Must check {@code ProcessorFactory.isError} before using it.
    */
-  default ProcessorFactory compileSource(URI uri, String rootName, String 
rootNamespace) {
-    return compileSource(uri, Optional.ofNullable(rootName), 
Optional.ofNullable(rootNamespace));
-  }
-
-  /**
-   * Compile DFDL schema source into a {@link ProcessorFactory}
-   *
-   * @param uri              URI of DFDL schema file used to create a {@link 
ProcessorFactory}.
-   * @param optRootName      Optional for name of root element, or 
Optional.empty() to choose automatically from first
-   *                         element of schema. Defaults to Optional.empty().
-   * @param optRootNamespace Optional for string of namespace of the root 
element, or Optional.empty() to infer
-   *                         automatically when unambiguous. Pass Some("") 
(empty string) for No Namespace.
-   *                         Defaults to Optional.empty().
-   * @return {@link ProcessorFactory} used to create {@link DataProcessor}(s). 
Must check {@code ProcessorFactory.isError} before using it.
-   */
-  ProcessorFactory compileSource(URI uri, Optional<String> optRootName, 
Optional<String> optRootNamespace);
+  ProcessorFactory compileSource(URI uri, String rootName, String 
rootNamespace);
 
   /**
    * Compile DFDL resource name into a {@link ProcessorFactory}
@@ -174,37 +114,34 @@ public interface Compiler {
    * @throws IOException if resource cannot be found
    */
   default ProcessorFactory compileResource(String name) throws IOException {
-    return compileResource(name, Optional.empty(), Optional.empty());
+    return compileResource(name, null, null);
   }
 
   /**
    * Compile DFDL resource name into a {@link ProcessorFactory}
    *
-   * @param name          Resource name of a DFDL schema used to create a 
{@link ProcessorFactory}.
-   * @param rootName      name of root element, or null to choose 
automatically from first element
-   *                      of schema.
-   * @param rootNamespace String of namespace of the root element, or null to 
infer automatically
-   *                      when unambiguous. Pass "" (empty string) for No 
Namespace.
+   * @param name     Resource name of a DFDL schema used to create a {@link 
ProcessorFactory}.
+   * @param rootName name of root element, or null to choose automatically 
from first element
+   *                 of schema.
    * @return {@link ProcessorFactory} used to create {@link DataProcessor}(s). 
Must check {@code ProcessorFactory.isError} before using it.
    * @throws IOException if resource cannot be found
    */
-  default ProcessorFactory compileResource(String name, String rootName, 
String rootNamespace) throws IOException {
-    return compileResource(name, Optional.ofNullable(rootName), 
Optional.ofNullable(rootNamespace));
+  default ProcessorFactory compileResource(String name, String rootName) 
throws IOException {
+    return compileResource(name, rootName, null);
   }
 
   /**
    * Compile DFDL resource name into a {@link ProcessorFactory}
    *
-   * @param name             Resource name of a DFDL schema used to create a 
{@link ProcessorFactory}.
-   * @param optRootName      Optional for name of root element, or 
Optional.empty() to choose automatically from first
-   *                         element of schema. Defaults to Optional.empty().
-   * @param optRootNamespace Optional for string of namespace of the root 
element, or Optional.empty() to infer
-   *                         automatically when unambiguous. Pass Some("") 
(empty string) for No Namespace.
-   *                         Defaults to Optional.empty().
+   * @param name          Resource name of a DFDL schema used to create a 
{@link ProcessorFactory}.
+   * @param rootName      name of root element, or null to choose 
automatically from first element
+   *                      of schema.
+   * @param rootNamespace String of namespace of the root element, or null to 
infer automatically
+   *                      when unambiguous. Pass "" (empty string) for No 
Namespace.
    * @return {@link ProcessorFactory} used to create {@link DataProcessor}(s). 
Must check {@code ProcessorFactory.isError} before using it.
    * @throws IOException if resource cannot be found
    */
-  ProcessorFactory compileResource(String name, Optional<String> optRootName, 
Optional<String> optRootNamespace) throws IOException;
+  ProcessorFactory compileResource(String name, String rootName, String 
rootNamespace) throws IOException;
 
   /**
    * Reload a saved parser from a file
diff --git 
a/daffodil-core/src/main/java/org/apache/daffodil/api/infoset/InfosetInputter.java
 
b/daffodil-core/src/main/java/org/apache/daffodil/api/infoset/InfosetInputter.java
index 1c43d5c98..6821090e3 100644
--- 
a/daffodil-core/src/main/java/org/apache/daffodil/api/infoset/InfosetInputter.java
+++ 
b/daffodil-core/src/main/java/org/apache/daffodil/api/infoset/InfosetInputter.java
@@ -20,7 +20,6 @@ package org.apache.daffodil.api.infoset;
 import org.apache.daffodil.runtime1.dpath.NodeInfo;
 
 import java.util.Map;
-import java.util.Optional;
 
 /**
  * Abstract class used to determine how the infoset representation should be
@@ -104,11 +103,11 @@ public abstract class InfosetInputter {
    * Determine if the current event is nilled. This will only be called when
    * the current event type is StartElement.
    *
-   * @return Optional.empty if no nil property is set, which implies the 
element is not nilled
-   * or Optional.of(false) if the nil property is set, but it is set to false 
or Optional.of(true)
+   * @return null if no nil property is set, which implies the element is not 
nilled
+   * or false if the nil property is set, but it is set to false or true
    * if the nil property is set to true.
    */
-  public abstract Optional<Boolean> isNilled();
+  public abstract Boolean isNilled();
 
   /**
    * @return true if there are remaining events. False otherwise.
diff --git 
a/daffodil-core/src/main/java/org/apache/daffodil/api/validation/Validators.java
 
b/daffodil-core/src/main/java/org/apache/daffodil/api/validation/Validators.java
index aa74ff136..e24b4246b 100644
--- 
a/daffodil-core/src/main/java/org/apache/daffodil/api/validation/Validators.java
+++ 
b/daffodil-core/src/main/java/org/apache/daffodil/api/validation/Validators.java
@@ -19,8 +19,6 @@ package org.apache.daffodil.api.validation;
 
 import org.apache.daffodil.lib.util.SimpleNamedServiceLoader;
 
-import java.util.Optional;
-
 /**
  * Access SPI registered {@link 
org.apache.daffodil.api.validation.ValidatorFactory} instances.
  * <p>
@@ -55,13 +53,13 @@ public class Validators {
   }
 
   /**
-   * Optionally find the factory
+   * Attempt to find the factory
    *
    * @param name registered name of the validator factory
-   * @return {@link org.apache.daffodil.api.validation.ValidatorFactory} 
optional factory instance
+   * @return {@link org.apache.daffodil.api.validation.ValidatorFactory} 
factory instance or null if not found
    */
-  public static Optional<ValidatorFactory> find(String name) {
-    return Optional.ofNullable(impls.get(name));
+  public static ValidatorFactory find(String name) {
+    return impls.get(name);
   }
 
   /**
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/core/compiler/Compiler.scala 
b/daffodil-core/src/main/scala/org/apache/daffodil/core/compiler/Compiler.scala
index c6d5de6bd..4a8cd3008 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/core/compiler/Compiler.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/core/compiler/Compiler.scala
@@ -29,7 +29,6 @@ import java.util.zip.GZIPInputStream
 import java.util.zip.ZipException
 import scala.collection.mutable.ArrayBuffer
 import scala.jdk.CollectionConverters.*
-import scala.jdk.OptionConverters.*
 import scala.util.Try
 import scala.xml.Node
 
@@ -428,24 +427,24 @@ class Compiler private (
 
   override def compileFile(
     schemaFile: File,
-    optRootName: java.util.Optional[String],
-    optRootNamespace: java.util.Optional[String]
+    rootName: String,
+    rootNamespace: String
   ): api.ProcessorFactory =
-    compileFile(schemaFile, optRootName.toScala, optRootNamespace.toScala)
+    compileFile(schemaFile, Option(rootName), Option(rootNamespace))
 
   override def compileSource(
     uri: URI,
-    optRootName: java.util.Optional[String],
-    optRootNamespace: java.util.Optional[String]
+    rootName: String,
+    rootNamespace: String
   ): api.ProcessorFactory =
-    compileSource(uri, optRootName.toScala, optRootNamespace.toScala)
+    compileSource(uri, Option(rootName), Option(rootNamespace))
 
   override def compileResource(
     name: String,
-    optRootName: java.util.Optional[String],
-    optRootNamespace: java.util.Optional[String]
+    rootName: String,
+    rootNamespace: String
   ): api.ProcessorFactory =
-    compileResource(name, optRootName.toScala, optRootNamespace.toScala)
+    compileResource(name, Option(rootName), Option(rootNamespace))
 
   override def withTunables(tunables: java.util.Map[String, String]): 
api.Compiler =
     withTunables(
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/infoset/InfosetInputter.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/infoset/InfosetInputter.scala
index 38ea748e6..125f88b2e 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/infoset/InfosetInputter.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/infoset/InfosetInputter.scala
@@ -17,8 +17,6 @@
 
 package org.apache.daffodil.runtime1.infoset
 
-import scala.jdk.OptionConverters.*
-
 import org.apache.daffodil.api
 import org.apache.daffodil.api.infoset.Infoset.InfosetInputterEventType
 import org.apache.daffodil.lib.exceptions.Assert
@@ -348,7 +346,7 @@ final class InfosetInputter(delegate: 
api.infoset.InfosetInputter)
   private def createElement(erd: ERD) = {
     val elem = if (erd.isSimpleType) new DISimple(erd) else new DIComplex(erd)
 
-    val optNilled = delegate.isNilled.toScala
+    val optNilled = Option(delegate.isNilled)
 
     if (optNilled.isDefined) {
       if (!erd.isNillable) {
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/infoset/JDOMInfosetInputter.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/infoset/JDOMInfosetInputter.scala
index 1469e0b65..80efc79d9 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/infoset/JDOMInfosetInputter.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/infoset/JDOMInfosetInputter.scala
@@ -19,7 +19,6 @@ package org.apache.daffodil.runtime1.infoset
 
 import java.lang.Boolean as JBoolean
 import java.util.Iterator
-import scala.jdk.OptionConverters.*
 
 import org.apache.daffodil.api
 import org.apache.daffodil.api.infoset.Infoset.InfosetInputterEventType
@@ -112,22 +111,22 @@ class JDOMInfosetInputter(doc: Document) extends 
api.infoset.InfosetInputter {
     text
   }
 
-  override def isNilled(): java.util.Optional[JBoolean] = {
+  override def isNilled(): JBoolean = {
     val elem = stack.top._1
     val nilAttrValue = elem.getAttributeValue("nil", 
JDOMInfosetInputter.JDOM_XSI_NAMESPACE)
-    val res: Option[JBoolean] =
+    val res: JBoolean =
       if (nilAttrValue == null) {
-        None
+        null
       } else if (nilAttrValue == "true" || nilAttrValue == "1") {
-        Some(true)
+        true
       } else if (nilAttrValue == "false" || nilAttrValue == "0") {
-        Some(false)
+        false
       } else {
         throw new InvalidInfosetException(
           "xsi:nil property is not a valid boolean: '" + nilAttrValue + "' for 
element " + elem.getQualifiedName
         )
       }
-    res.toJava
+    res
   }
 
   override def hasNext(): Boolean = {
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/infoset/JsonInfosetInputter.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/infoset/JsonInfosetInputter.scala
index fc6fa46ca..fc518b411 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/infoset/JsonInfosetInputter.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/infoset/JsonInfosetInputter.scala
@@ -18,7 +18,6 @@
 package org.apache.daffodil.runtime1.infoset
 
 import java.lang.Boolean as JBoolean
-import scala.jdk.OptionConverters.*
 
 import org.apache.daffodil.api
 import org.apache.daffodil.api.infoset.Infoset.InfosetInputterEventType
@@ -138,13 +137,13 @@ class JsonInfosetInputter(input: java.io.InputStream) 
extends api.infoset.Infose
     }
   }
 
-  override def isNilled(): java.util.Optional[JBoolean] = {
+  override def isNilled(): JBoolean = {
     val opt = if (jsp.getCurrentToken() == JsonToken.VALUE_NULL) {
-      Some(java.lang.Boolean.valueOf(true))
+      java.lang.Boolean.valueOf(true)
     } else {
-      None
+      null
     }
-    opt.toJava
+    opt
   }
 
   override def fini(): Unit = {
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/infoset/NullInfosetInputter.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/infoset/NullInfosetInputter.scala
index 5b51ad1a0..a2eee0ba8 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/infoset/NullInfosetInputter.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/infoset/NullInfosetInputter.scala
@@ -20,7 +20,6 @@ package org.apache.daffodil.runtime1.infoset
 import java.io.InputStream
 import java.lang.Boolean as JBoolean
 import scala.collection.mutable.ArrayBuffer
-import scala.jdk.OptionConverters.*
 import scala.xml.Elem
 import scala.xml.SAXParser
 import scala.xml.Text
@@ -40,7 +39,7 @@ object NullInfosetInputter {
     localName: String = null,
     namespaceURI: String = null,
     simpleText: String = null,
-    isNilled: Option[JBoolean] = None
+    isNilled: JBoolean = null
   )
 
   def toEvents(is: InputStream): Array[Event] = {
@@ -81,9 +80,10 @@ object NullInfosetInputter {
           val value = str == "true" || str == "1"
           value.asInstanceOf[JBoolean]
         }
+        .orNull
       (text, isNilled)
     } else {
-      (null, None)
+      (null, null)
     }
 
     events += Event(StartElement, localName, namespaceURI, simpleText, 
isNilled)
@@ -114,7 +114,7 @@ class NullInfosetInputter(events: 
Array[NullInfosetInputter.Event])
     primType: NodeInfo.Kind,
     runtimeProperties: java.util.Map[String, String]
   ): String = curEvent.simpleText
-  def isNilled(): java.util.Optional[JBoolean] = curEvent.isNilled.toJava
+  def isNilled(): JBoolean = curEvent.isNilled
 
   def hasNext(): Boolean = curIndex + 1 < events.length
   def next(): Unit = {
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/infoset/SAXInfosetInputter.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/infoset/SAXInfosetInputter.scala
index c089df033..5bf6c36e6 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/infoset/SAXInfosetInputter.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/infoset/SAXInfosetInputter.scala
@@ -20,7 +20,6 @@ package org.apache.daffodil.runtime1.infoset
 import java.lang.Boolean as JBoolean
 import java.net.URI
 import java.net.URISyntaxException
-import scala.jdk.OptionConverters.*
 
 import org.apache.daffodil.api
 import org.apache.daffodil.api.infoset.Infoset.InfosetInputterEventType
@@ -107,13 +106,13 @@ class SAXInfosetInputter(
     }
   }
 
-  override def isNilled(): java.util.Optional[JBoolean] = {
-    val _isNilled: Option[JBoolean] = if (currentEvent.nilValue.isDefined) {
+  override def isNilled(): JBoolean = {
+    val _isNilled: JBoolean = if (currentEvent.nilValue.isDefined) {
       val nilValue = currentEvent.nilValue.get
       if (nilValue == "true" || nilValue == "1") {
-        Some(true)
+        true
       } else if (nilValue == "false" || nilValue == "0") {
-        Some(false)
+        false
       } else {
         throw new InvalidInfosetException(
           "xsi:nil property is not a valid boolean: '" + nilValue +
@@ -121,9 +120,9 @@ class SAXInfosetInputter(
         )
       }
     } else {
-      None
+      null
     }
-    _isNilled.toJava
+    _isNilled
   }
 
   override def hasNext(): Boolean = {
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/infoset/ScalaXMLInfosetInputter.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/infoset/ScalaXMLInfosetInputter.scala
index abdc26640..f60ed4c0a 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/infoset/ScalaXMLInfosetInputter.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/infoset/ScalaXMLInfosetInputter.scala
@@ -18,7 +18,6 @@
 package org.apache.daffodil.runtime1.infoset
 
 import java.lang.Boolean as JBoolean
-import scala.jdk.OptionConverters.*
 import scala.xml.Comment
 import scala.xml.Elem
 import scala.xml.Node
@@ -119,12 +118,12 @@ class ScalaXMLInfosetInputter(rootNode: Node) extends 
api.infoset.InfosetInputte
     result
   }
 
-  override def isNilled(): java.util.Optional[JBoolean] = {
+  override def isNilled(): JBoolean = {
     val elem = stack.top._1
     val nilAttrValueOpt = elem.attribute(XMLUtils.XSI_NAMESPACE, "nil")
-    val res: Option[JBoolean] =
+    val res: JBoolean =
       if (nilAttrValueOpt.isEmpty) {
-        None
+        null
       } else {
         val nilAttrValueSeq = nilAttrValueOpt.get
         if (nilAttrValueSeq.length > 1) {
@@ -134,16 +133,16 @@ class ScalaXMLInfosetInputter(rootNode: Node) extends 
api.infoset.InfosetInputte
         }
         val nilAttrValue = nilAttrValueSeq.head.toString
         if (nilAttrValue == "true" || nilAttrValue == "1") {
-          Some(true)
+          true
         } else if (nilAttrValue == "false" || nilAttrValue == "0") {
-          Some(false)
+          false
         } else {
           throw new InvalidInfosetException(
             "xsi:nil property is not a valid boolean: '" + nilAttrValue + "' 
for element " + elem.label
           )
         }
       }
-    res.toJava
+    res
   }
 
   override def hasNext(): Boolean = {
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/infoset/W3CDOMInfosetInputter.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/infoset/W3CDOMInfosetInputter.scala
index d926e3273..d3b6c0423 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/infoset/W3CDOMInfosetInputter.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/infoset/W3CDOMInfosetInputter.scala
@@ -114,22 +114,22 @@ class W3CDOMInfosetInputter(doc: Document) extends 
api.infoset.InfosetInputter {
     text
   }
 
-  override def isNilled(): java.util.Optional[JBoolean] = {
+  override def isNilled(): JBoolean = {
     val elem = stack.top._1
     val nilAttrValue = 
elem.getAttributeNS(XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI, "nil")
-    val res: Option[JBoolean] =
+    val res: JBoolean =
       if (nilAttrValue == "") {
-        None
+        null
       } else if (nilAttrValue == "true" || nilAttrValue == "1") {
-        Some(true)
+        true
       } else if (nilAttrValue == "false" || nilAttrValue == "0") {
-        Some(false)
+        false
       } else {
         throw new InvalidInfosetException(
           "xsi:nil property is not a valid boolean: '" + nilAttrValue + "' for 
element " + elem.getNodeName
         )
       }
-    res.toJava
+    res
   }
 
   override def hasNext(): Boolean = {
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/infoset/XMLTextInfosetInputter.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/infoset/XMLTextInfosetInputter.scala
index f3cea603c..18640b4fa 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/infoset/XMLTextInfosetInputter.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/infoset/XMLTextInfosetInputter.scala
@@ -27,7 +27,6 @@ import javax.xml.stream.XMLStreamException
 import javax.xml.stream.XMLStreamReader
 import javax.xml.stream.XMLStreamWriter
 import javax.xml.stream.util.XMLEventAllocator
-import scala.jdk.OptionConverters.*
 
 import org.apache.daffodil.api
 import org.apache.daffodil.api.infoset.Infoset.InfosetInputterEventType
@@ -342,17 +341,17 @@ class XMLTextInfosetInputter(input: java.io.InputStream) 
extends api.infoset.Inf
     txt
   }
 
-  override def isNilled(): java.util.Optional[JBoolean] = {
+  override def isNilled(): JBoolean = {
     Assert.invariant(xsr.getEventType() == START_ELEMENT)
     // this should use a fast hash lookup
     val nilAttrValue = 
xsr.getAttributeValue(XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI, "nil")
-    val res: Option[JBoolean] =
+    val res: JBoolean =
       if (nilAttrValue == null) {
-        None
+        null
       } else if (nilAttrValue == "true" || nilAttrValue == "1") {
-        Some(true)
+        true
       } else if (nilAttrValue == "false" || nilAttrValue == "0") {
-        Some(false)
+        false
       } else {
         throw new InvalidInfosetException(
           "xsi:nil property is not a valid boolean: '" + nilAttrValue + "' on 
line " + evAlloc
@@ -361,7 +360,7 @@ class XMLTextInfosetInputter(input: java.io.InputStream) 
extends api.infoset.Inf
             .getLineNumber
         )
       }
-    res.toJava
+    res
   }
 
   override def fini(): Unit = {
diff --git 
a/daffodil-core/src/test/java/org/apache/daffodil/jexample/TestInfosetInputter.java
 
b/daffodil-core/src/test/java/org/apache/daffodil/jexample/TestInfosetInputter.java
index aad4c1e0c..1edafd213 100644
--- 
a/daffodil-core/src/test/java/org/apache/daffodil/jexample/TestInfosetInputter.java
+++ 
b/daffodil-core/src/test/java/org/apache/daffodil/jexample/TestInfosetInputter.java
@@ -22,8 +22,6 @@ import org.apache.daffodil.api.infoset.InfosetInputter;
 import org.apache.daffodil.runtime1.dpath.NodeInfo;
 
 import java.util.Map;
-import java.util.Optional;
-
 
 public class TestInfosetInputter extends InfosetInputter {
 
@@ -56,9 +54,8 @@ public class TestInfosetInputter extends InfosetInputter {
   }
 
   @Override
-  public Optional<Boolean> isNilled() {
-    Boolean isNilled = events[curEventIndex].isNilled;
-    return Optional.ofNullable(isNilled);
+  public Boolean isNilled() {
+    return events[curEventIndex].isNilled;
   }
 
   @Override
diff --git 
a/daffodil-core/src/test/scala/org/apache/daffodil/lib/validation/TestValidatorsSPI.scala
 
b/daffodil-core/src/test/scala/org/apache/daffodil/lib/validation/TestValidatorsSPI.scala
index b3a72a8cf..085b41e27 100644
--- 
a/daffodil-core/src/test/scala/org/apache/daffodil/lib/validation/TestValidatorsSPI.scala
+++ 
b/daffodil-core/src/test/scala/org/apache/daffodil/lib/validation/TestValidatorsSPI.scala
@@ -25,6 +25,8 @@ import org.apache.daffodil.validation.XercesValidator
 
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertFalse
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertNull
 import org.junit.Assert.assertThrows
 import org.junit.Assert.assertTrue
 import org.junit.Test
@@ -38,7 +40,7 @@ class TestValidatorsSPI {
   }
 
   @Test def testValidatorFindNotFoundNone(): Unit = {
-    assertFalse(Validators.find("dont exist").isPresent)
+    assertNull(Validators.find("dont exist"))
   }
 
   @Test def testValidatorNonExists(): Unit = {
@@ -50,7 +52,7 @@ class TestValidatorsSPI {
     val defaultF = Validators.get(defaultName)
 
     assertEquals(defaultName, defaultF.name())
-    assertTrue(Validators.find(defaultName).isPresent)
+    assertNotNull(Validators.find(defaultName))
     assertTrue(Validators.isRegistered(defaultName))
   }
 
diff --git 
a/daffodil-core/src/test/scala/org/apache/daffodil/sexample/TestAPI.scala 
b/daffodil-core/src/test/scala/org/apache/daffodil/sexample/TestAPI.scala
index 5c76962e6..3b238461e 100644
--- a/daffodil-core/src/test/scala/org/apache/daffodil/sexample/TestAPI.scala
+++ b/daffodil-core/src/test/scala/org/apache/daffodil/sexample/TestAPI.scala
@@ -28,7 +28,6 @@ import java.nio.channels.Channels
 import java.nio.charset.StandardCharsets
 import java.nio.file.Files
 import java.nio.file.Paths
-import java.util.Optional
 import javax.xml.XMLConstants
 import scala.collection.immutable.ArraySeq
 import scala.jdk.CollectionConverters.*
@@ -347,7 +346,7 @@ class TestAPI {
     val c = Daffodil.compiler()
 
     val schemaFileName = getResource("/test/api/mySchema3.dfdl.xsd")
-    val pf = c.compileFile(schemaFileName, Optional.of("e4"), 
Optional.empty[String]())
+    val pf = c.compileFile(schemaFileName, "e4")
     val dp1 = pf.onPath("/")
     val dp = reserializeDataProcessor(dp1)
 
@@ -376,11 +375,7 @@ class TestAPI {
 
     val schemaFileName = getResource("/test/api/mySchema3.dfdl.xsd")
     // element
-    val pf = c.compileFile(
-      schemaFileName,
-      Optional.of("e4"),
-      Optional.empty[String]()
-    ) // e4 is a 4-byte long string
+    val pf = c.compileFile(schemaFileName, "e4") // e4 is a 4-byte long string
     val dp1 = pf.onPath("/")
     val dp = reserializeDataProcessor(dp1)
 
@@ -440,7 +435,7 @@ class TestAPI {
     val c = Daffodil.compiler()
 
     val schemaFile = getResource("/test/api/TopLevel.dfdl.xsd")
-    val pf = c.compileFile(schemaFile, Optional.of("TopLevel"), 
Optional.empty[String]())
+    val pf = c.compileFile(schemaFile, "TopLevel")
     val dp1 = pf.onPath("/")
     val dp = reserializeDataProcessor(dp1)
 
@@ -475,7 +470,7 @@ class TestAPI {
     val c = Daffodil.compiler()
 
     val schemaFile = getResource("/test/api/TopLevel.dfdl.xsd")
-    val pf = c.compileFile(schemaFile, Optional.of("TopLevel2"), 
Optional.empty[String]())
+    val pf = c.compileFile(schemaFile, "TopLevel2")
     val dp1 = pf.onPath("/")
     val dp = reserializeDataProcessor(dp1)
 
@@ -506,7 +501,7 @@ class TestAPI {
     val c = Daffodil.compiler()
 
     val schemaFile = getResource("/test/api/TopLevel.dfdl.xsd")
-    val pf = c.compileFile(schemaFile, Optional.of("TopLevel2"), 
Optional.empty[String]())
+    val pf = c.compileFile(schemaFile, "TopLevel2")
     val dp1 = pf.onPath("/")
     val dp = reserializeDataProcessor(dp1)
 
@@ -822,7 +817,7 @@ class TestAPI {
     val c = Daffodil.compiler()
 
     val schemaFile = getResource("/test/api/mySchema3.dfdl.xsd")
-    val pf = c.compileFile(schemaFile, Optional.of("e4"), 
Optional.empty[String]())
+    val pf = c.compileFile(schemaFile, "e4")
     val dp1 = pf.onPath("/")
     val dp = reserializeDataProcessor(dp1)
 
@@ -862,7 +857,7 @@ class TestAPI {
     val c = Daffodil.compiler()
 
     val schemaFile = getResource("/test/api/ambig_elt.dfdl.xsd")
-    val pf = c.compileFile(schemaFile, Optional.of("root"), 
Optional.empty[String]())
+    val pf = c.compileFile(schemaFile, "root")
     val dp1 = pf.onPath("/")
     val dp = reserializeDataProcessor(dp1)
 
@@ -1275,7 +1270,7 @@ class TestAPI {
   def doXMLTextEscapeStyleTest(expect: String, data: String, schemaType: 
String): Unit = {
     val c = Daffodil.compiler()
     val schemaFile = getResource("/test/api/mySchemaCDATA.dfdl.xsd")
-    val pf = c.compileFile(schemaFile, Optional.of(schemaType), 
Optional.empty[String]())
+    val pf = c.compileFile(schemaFile, schemaType)
     var dp = pf.onPath("/")
 
     val is = new ByteArrayInputStream(data.getBytes(StandardCharsets.UTF_8))
diff --git 
a/daffodil-core/src/test/scala/org/apache/daffodil/sexample/TestInfosetInputterOutputter.scala
 
b/daffodil-core/src/test/scala/org/apache/daffodil/sexample/TestInfosetInputterOutputter.scala
index 88449994b..521d90983 100644
--- 
a/daffodil-core/src/test/scala/org/apache/daffodil/sexample/TestInfosetInputterOutputter.scala
+++ 
b/daffodil-core/src/test/scala/org/apache/daffodil/sexample/TestInfosetInputterOutputter.scala
@@ -19,7 +19,6 @@ package org.apache.daffodil.sexample
 
 import java.lang.Boolean as JBoolean
 import scala.collection.mutable.ArrayBuffer
-import scala.jdk.OptionConverters.*
 
 import org.apache.daffodil.api.infoset.Infoset.InfosetInputterEventType
 import org.apache.daffodil.api.infoset.Infoset.InfosetInputterEventType.*
@@ -35,7 +34,7 @@ case class TestInfosetEvent(
   localName: String = null,
   namespaceURI: String = null,
   simpleText: String = null,
-  isNilled: Option[JBoolean] = None
+  isNilled: JBoolean = null
 )
 
 object TestInfosetEvent {
@@ -46,7 +45,7 @@ object TestInfosetEvent {
   def startComplex(
     name: String,
     namespace: String,
-    isNilled: Option[JBoolean] = None
+    isNilled: JBoolean = null
   ) =
     TestInfosetEvent(StartElement, name, namespace, null, isNilled)
 
@@ -54,7 +53,7 @@ object TestInfosetEvent {
     name: String,
     namespace: String,
     text: String,
-    isNilled: Option[JBoolean] = None
+    isNilled: JBoolean = null
   ) =
     TestInfosetEvent(StartElement, name, namespace, text, isNilled)
 
@@ -79,7 +78,7 @@ case class TestInfosetInputter(events: TestInfosetEvent*) 
extends InfosetInputte
     primType: NodeInfo.Kind,
     runtimeProperties: java.util.Map[String, String]
   ) = events(curEventIndex).simpleText
-  override def isNilled(): java.util.Optional[JBoolean] = 
events(curEventIndex).isNilled.toJava
+  override def isNilled(): JBoolean = events(curEventIndex).isNilled
 
   override def hasNext(): Boolean = curEventIndex + 1 < events.length
   override def next(): Unit = curEventIndex += 1
@@ -111,7 +110,7 @@ case class TestInfosetOutputter() extends InfosetOutputter {
         simple.metadata.name,
         simple.metadata.namespace,
         simple.getText,
-        if (simple.metadata.isNillable) Some(simple.isNilled) else None
+        if (simple.metadata.isNillable) simple.isNilled else null
       )
     )
   }
@@ -127,7 +126,7 @@ case class TestInfosetOutputter() extends InfosetOutputter {
       TestInfosetEvent.startComplex(
         complex.metadata.name,
         complex.metadata.namespace,
-        if (complex.metadata.isNillable) Some(complex.isNilled) else None
+        if (complex.metadata.isNillable) complex.isNilled else null
       )
     )
   }
diff --git 
a/daffodil-tdml-processor/src/main/scala/org/apache/daffodil/processor/tdml/TDMLInfosetInputter.scala
 
b/daffodil-tdml-processor/src/main/scala/org/apache/daffodil/processor/tdml/TDMLInfosetInputter.scala
index edec207b8..75a356170 100644
--- 
a/daffodil-tdml-processor/src/main/scala/org/apache/daffodil/processor/tdml/TDMLInfosetInputter.scala
+++ 
b/daffodil-tdml-processor/src/main/scala/org/apache/daffodil/processor/tdml/TDMLInfosetInputter.scala
@@ -125,7 +125,7 @@ class TDMLInfosetInputter(
     }
   }
 
-  override def isNilled(): java.util.Optional[JBoolean] = {
+  override def isNilled(): JBoolean = {
     val res = scalaInputter.isNilled()
     if (!others.forall(_.isNilled() == res))
       throw TDMLException("isNilled does not match", Some(implString))


Reply via email to