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 db1a4910f Move layers/udf packages to o.a.d.api package
db1a4910f is described below

commit db1a4910f54e575134a6970ab2bb66d58c9a4b31
Author: olabusayoT <[email protected]>
AuthorDate: Wed Aug 6 12:04:06 2025 -0400

    Move layers/udf packages to o.a.d.api package
    
    - move java files in src/main/java
    - ensure only java members of org.apache.daffodil.api is part of public api
    - recreate LineFoldMode.java as a scala enum
    - update documentation
    
    DAFFODIL-3020
    
    Deprecation/Compatibility
    META-INF/services filenames have changed for Layers and UDF APIs. They now 
have ".api" in front of the original package name i.e api.layers and api.udf.
---
 build.sbt                                          |  6 ++-
 .../main/scala/org/apache/daffodil/cli/Main.scala  |  2 +-
 ....Layer => org.apache.daffodil.api.layers.Layer} |  0
 .../org/apache/daffodil/layers/BuggyLayer.scala    |  2 +-
 .../layers/api => api/layers}/ChecksumLayer.java   |  2 +-
 .../{runtime1/layers/api => api/layers}/Layer.java |  4 +-
 .../api/layers/exceptions/LayerFatalException.java | 36 ++++++++-------
 .../exceptions}/LayerNotEnoughDataException.java   | 29 ++++++++++--
 .../layers/api => api/layers}/package-info.java    | 24 ++++++----
 .../apache/daffodil/layers/runtime1/GZipLayer.java | 12 +++--
 ....Layer => org.apache.daffodil.api.layers.Layer} |  0
 .../daffodil/layers/runtime1/Base64MimeLayer.scala |  2 +-
 .../layers/runtime1/BoundaryMarkLayer.scala        |  2 +-
 .../daffodil/layers/runtime1/ByteSwapLayer.scala   |  2 +-
 .../layers/runtime1/FixedLengthLayer.scala         |  4 +-
 .../daffodil/layers/runtime1/LineFoldMode.java     | 32 -------------
 .../runtime1/LineFoldMode.scala}                   | 12 +++--
 .../layers/runtime1/LineFoldedLayerBase.scala      |  2 +-
 .../runtime1/dpath/UserDefinedFunctionBase.scala   |  4 +-
 .../runtime1/layers/ChecksumLayerBase.scala        |  3 +-
 .../daffodil/runtime1/layers/LayerDriver.scala     | 27 +----------
 .../runtime1/layers/LayerProcessingException.java  | 44 ------------------
 .../runtime1/layers/LayerRuntimeCompiler.scala     |  2 +-
 .../runtime1/layers/LayerVarsRuntime.scala         |  2 +-
 .../runtime1/layers/ScalaLayerHelper.scala         |  2 +-
 .../runtime1/processors/DataProcessor.scala        |  2 +-
 .../runtime1/udf/UserDefinedFunctionService.scala  |  2 +-
 daffodil-layers/README.md                          | 21 +++++++++
 .../org/apache/daffodil/cliTest/TestCLIUdfs.scala  | 10 ++--
 ....Layer => org.apache.daffodil.api.layers.Layer} |  0
 ...e.daffodil.api.udf.UserDefinedFunctionProvider} |  0
 .../runtime1/layers/AISPayloadArmoringLayer.scala  |  2 +-
 .../daffodil/runtime1/layers/AllTypesLayer.scala   |  2 +-
 .../daffodil/runtime1/layers/CheckDigitLayer.scala |  2 +-
 .../runtime1/layers/SimpleBombOutLayer.scala       |  2 +-
 .../daffodil/runtime1/layers/SimpleTestLayer.scala |  2 +-
 .../runtime1/layers/ipv4/IPv4ChecksumLayer.scala   |  2 +-
 .../apache/daffodil/udf/TestUdfsInSchemas.scala    |  2 +-
 daffodil-udf/README.md                             | 53 ++++++++++++++++------
 .../{ => api}/udf/UserDefinedFunction.java         |  9 ++--
 .../udf/UserDefinedFunctionIdentification.java     |  8 ++--
 .../{ => api}/udf/UserDefinedFunctionProvider.java | 30 +++++-------
 .../UserDefinedFunctionFatalException.java         |  2 +-
 .../UserDefinedFunctionProcessingError.java        |  4 +-
 .../annotations/StringFunctions/Compare.java       |  6 +--
 .../badudfs/annotations/StringFunctions/FuncB.java |  4 +-
 ...e.daffodil.api.udf.UserDefinedFunctionProvider} |  0
 .../annotations/StringFunctions/Replace.java       |  6 +--
 .../StringFunctions/StringFunctionsProvider.java   | 26 +++++------
 .../badudfs/evaluate/StringFunctions/FuncA.java    |  6 +--
 .../badudfs/evaluate/StringFunctions/FuncB.java    |  6 +--
 .../badudfs/evaluate/StringFunctions/FuncC.java    |  6 +--
 .../badudfs/evaluate/StringFunctions/FuncD.java    |  6 +--
 .../badudfs/evaluate/StringFunctions/FuncE.java    |  8 ++--
 ...e.daffodil.api.udf.UserDefinedFunctionProvider} |  0
 .../badudfs/evaluate/StringFunctions/Replace.java  |  6 +--
 .../StringFunctions/StringFunctionsProvider.java   |  8 ++--
 .../functionclasses1/StringFunctions/FuncA.java    |  4 +-
 ...e.daffodil.api.udf.UserDefinedFunctionProvider} |  0
 .../functionclasses1/StringFunctions/Replace.java  |  4 +-
 .../StringFunctions/StringFunctionsProvider.java   |  4 +-
 .../functionclasses2/StringFunctions/FuncA.java    |  4 +-
 ...e.daffodil.api.udf.UserDefinedFunctionProvider} |  0
 .../functionclasses2/StringFunctions/Replace.java  |  4 +-
 .../StringFunctions/StringFunctionsProvider.java   |  6 +--
 .../org/badudfs/nonUDF/StringFunctions/FuncA.java  |  4 +-
 ...e.daffodil.api.udf.UserDefinedFunctionProvider} |  0
 .../badudfs/nonUDF/StringFunctions/Replace.java    |  4 +-
 .../StringFunctions/StringFunctionsProvider.java   | 20 ++++----
 .../jgoodudfs/example/StringFunctions/Compare.java |  5 +-
 .../jgoodudfs/example/StringFunctions/Replace.java |  5 +-
 .../StringFunctions/StringFunctionsProvider.java   |  5 +-
 ...e.daffodil.api.udf.UserDefinedFunctionProvider} |  0
 ...e.daffodil.api.udf.UserDefinedFunctionProvider} |  0
 ...e.daffodil.api.udf.UserDefinedFunctionProvider} |  0
 ...e.daffodil.api.udf.UserDefinedFunctionProvider} |  0
 .../StringFunctions/StringFunctionsProvider.scala  |  6 +--
 ...e.daffodil.api.udf.UserDefinedFunctionProvider} |  0
 .../StringFunctions/StringFunctionsProvider.scala  |  6 +--
 ...e.daffodil.api.udf.UserDefinedFunctionProvider} |  0
 .../StringFunctions/StringFunctionsProvider.scala  |  8 ++--
 ...e.daffodil.api.udf.UserDefinedFunctionProvider} |  0
 .../StringFunctions/StringFunctionsProvider.scala  |  6 +--
 ...e.daffodil.api.udf.UserDefinedFunctionProvider} |  0
 .../StringFunctions/StringFunctionsProvider.scala  |  6 +--
 ...e.daffodil.api.udf.UserDefinedFunctionProvider} |  0
 .../StringFunctions/StringFunctionsProvider.scala  |  6 +--
 .../IntegerFunctionsProvider.scala                 |  6 +--
 .../StringFunctions/StringFunctionsProvider.scala  |  6 +--
 .../SupportedTypesFunctionsProvider.scala          |  6 +--
 90 files changed, 302 insertions(+), 323 deletions(-)

diff --git a/build.sbt b/build.sbt
index 0d4f4fc2e..f3ce75145 100644
--- a/build.sbt
+++ b/build.sbt
@@ -432,7 +432,11 @@ lazy val unidocSettings =
         scopedSources
       }
       .value
-      .map(_.filter(_.getName.endsWith(".java")))
+      .map(
+        _.filter(fn =>
+          fn.getName.endsWith(".java") && 
fn.getPath.contains("org/apache/daffodil/api")
+        )
+      )
   )
 
 lazy val genTunablesDocSettings = Seq(
diff --git a/daffodil-cli/src/main/scala/org/apache/daffodil/cli/Main.scala 
b/daffodil-cli/src/main/scala/org/apache/daffodil/cli/Main.scala
index 8d0ed1d7b..ad4e9bdcc 100644
--- a/daffodil-cli/src/main/scala/org/apache/daffodil/cli/Main.scala
+++ b/daffodil-cli/src/main/scala/org/apache/daffodil/cli/Main.scala
@@ -47,6 +47,7 @@ import scala.util.matching.Regex
 import org.apache.daffodil.api
 import org.apache.daffodil.api.debugger.InteractiveDebuggerRunnerFactory
 import org.apache.daffodil.api.exceptions.InvalidParserException
+import org.apache.daffodil.api.layers.exceptions.LayerFatalException
 import org.apache.daffodil.api.validation.ValidatorInitializationException
 import org.apache.daffodil.api.validation.ValidatorNotRegisteredException
 import org.apache.daffodil.cli.debugger.CLIDebuggerRunner
@@ -76,7 +77,6 @@ import 
org.apache.daffodil.runtime1.debugger.DebuggerExitException
 import org.apache.daffodil.runtime1.debugger.InteractiveDebugger
 import org.apache.daffodil.runtime1.externalvars.ExternalVariablesLoader
 import org.apache.daffodil.runtime1.iapi.DFDL
-import org.apache.daffodil.runtime1.layers.LayerFatalException
 import org.apache.daffodil.runtime1.processors.DataLoc
 import org.apache.daffodil.runtime1.processors.DataProcessor
 import org.apache.daffodil.runtime1.processors.ExternalVariableException
diff --git 
a/daffodil-cli/src/test/resources/META-INF/services/org.apache.daffodil.runtime1.layers.api.Layer
 
b/daffodil-cli/src/test/resources/META-INF/services/org.apache.daffodil.api.layers.Layer
similarity index 100%
rename from 
daffodil-cli/src/test/resources/META-INF/services/org.apache.daffodil.runtime1.layers.api.Layer
rename to 
daffodil-cli/src/test/resources/META-INF/services/org.apache.daffodil.api.layers.Layer
diff --git 
a/daffodil-cli/src/test/scala/org/apache/daffodil/layers/BuggyLayer.scala 
b/daffodil-cli/src/test/scala/org/apache/daffodil/layers/BuggyLayer.scala
index 677f689b4..8acf86444 100644
--- a/daffodil-cli/src/test/scala/org/apache/daffodil/layers/BuggyLayer.scala
+++ b/daffodil-cli/src/test/scala/org/apache/daffodil/layers/BuggyLayer.scala
@@ -21,7 +21,7 @@ import java.io.IOException
 import java.io.InputStream
 import java.io.OutputStream
 
-import org.apache.daffodil.runtime1.layers.api.Layer
+import org.apache.daffodil.api.layers.Layer
 
 final class BuggyLayer extends Layer("buggy", 
"urn:org.apache.daffodil.layers.buggy") {
 
diff --git 
a/daffodil-core/src/main/java/org/apache/daffodil/runtime1/layers/api/ChecksumLayer.java
 b/daffodil-core/src/main/java/org/apache/daffodil/api/layers/ChecksumLayer.java
similarity index 98%
rename from 
daffodil-core/src/main/java/org/apache/daffodil/runtime1/layers/api/ChecksumLayer.java
rename to 
daffodil-core/src/main/java/org/apache/daffodil/api/layers/ChecksumLayer.java
index 07906ab7c..858f71db1 100644
--- 
a/daffodil-core/src/main/java/org/apache/daffodil/runtime1/layers/api/ChecksumLayer.java
+++ 
b/daffodil-core/src/main/java/org/apache/daffodil/api/layers/ChecksumLayer.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.daffodil.runtime1.layers.api;
+package org.apache.daffodil.api.layers;
 
 import org.apache.daffodil.runtime1.layers.ChecksumLayerBase;
 
diff --git 
a/daffodil-core/src/main/java/org/apache/daffodil/runtime1/layers/api/Layer.java
 b/daffodil-core/src/main/java/org/apache/daffodil/api/layers/Layer.java
similarity index 99%
rename from 
daffodil-core/src/main/java/org/apache/daffodil/runtime1/layers/api/Layer.java
rename to daffodil-core/src/main/java/org/apache/daffodil/api/layers/Layer.java
index fdf7ff217..d652a4a38 100644
--- 
a/daffodil-core/src/main/java/org/apache/daffodil/runtime1/layers/api/Layer.java
+++ b/daffodil-core/src/main/java/org/apache/daffodil/api/layers/Layer.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.daffodil.runtime1.layers.api;
+package org.apache.daffodil.api.layers;
 
 import org.apache.daffodil.lib.util.SimpleNamedLoadableService;
 import org.apache.daffodil.runtime1.layers.LayerRuntime;
@@ -42,7 +42,7 @@ import java.util.List;
  * The names of concrete classes derived from Layer are listed in
  * a metadata resource file
  * named for this class (that is, the file name is the fully-qualified class 
name of this class:
- * {@code 
resources/META-INF/services/org.apache.daffodil.runtime1.layers.api.Layer}).
+ * {@code resources/META-INF/services/org.apache.daffodil.api.layers.Layer}).
  * This file contains lines where each line contains one fully qualified class 
name of a derived
  * layer class.
  * More than one line in the file denotes that the Jar file contains the 
definitions of more than one derived layer
diff --git 
a/daffodil-udf/src/main/java/org/apache/daffodil/udf/exceptions/UserDefinedFunctionFatalException.java
 
b/daffodil-core/src/main/java/org/apache/daffodil/api/layers/exceptions/LayerFatalException.java
similarity index 50%
copy from 
daffodil-udf/src/main/java/org/apache/daffodil/udf/exceptions/UserDefinedFunctionFatalException.java
copy to 
daffodil-core/src/main/java/org/apache/daffodil/api/layers/exceptions/LayerFatalException.java
index 4aa0ac810..374c5ddf7 100644
--- 
a/daffodil-udf/src/main/java/org/apache/daffodil/udf/exceptions/UserDefinedFunctionFatalException.java
+++ 
b/daffodil-core/src/main/java/org/apache/daffodil/api/layers/exceptions/LayerFatalException.java
@@ -15,29 +15,31 @@
  * limitations under the License.
  */
 
-package org.apache.daffodil.udf.exceptions;
+package org.apache.daffodil.api.layers.exceptions;
+
+import org.apache.daffodil.lib.util.Misc;
 
 /**
- * Exception to throw to abort parsing/unparsing.
+ * This is used to encapsulate runtime exceptions that are thrown out of layer 
code.
  */
-@SuppressWarnings("serial")
-public class UserDefinedFunctionFatalException extends Exception {
-
+public class LayerFatalException extends RuntimeException {
   /**
-   * Constructs a new exception with a specified detail message
-   *
-   * @param errorMessage the detail message
+   * @param message String for exception
    */
-  public UserDefinedFunctionFatalException(String errorMessage) {
-    super(errorMessage);
+  public LayerFatalException(String message) {
+    this(message, null);
   }
-
   /**
-   * Constructs a new exception with a specified cause
-   *
-   * @param cause the cause of the exception
+   * When constructed with just a cause, we also pass a message if the cause 
provides one
+   * because the SLF4J logging system doesn't synthesize a message from the 
cause if only
+   * a cause is provided.
+   * @param cause throwable for exception
    */
-  public UserDefinedFunctionFatalException(Throwable cause) {
-    super(cause);
+  public LayerFatalException(Throwable cause) {
+    this(cause.getMessage() == null ? Misc.getNameFromClass(cause) : 
cause.getMessage(), cause);
+  }
+
+  public LayerFatalException(String message, Throwable cause) {
+    super(message, cause);
   }
-}
+}
\ No newline at end of file
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/layers/LayerNotEnoughDataException.java
 
b/daffodil-core/src/main/java/org/apache/daffodil/api/layers/exceptions/LayerNotEnoughDataException.java
similarity index 55%
rename from 
daffodil-core/src/main/scala/org/apache/daffodil/runtime1/layers/LayerNotEnoughDataException.java
rename to 
daffodil-core/src/main/java/org/apache/daffodil/api/layers/exceptions/LayerNotEnoughDataException.java
index de55ef799..f3c211ae2 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/layers/LayerNotEnoughDataException.java
+++ 
b/daffodil-core/src/main/java/org/apache/daffodil/api/layers/exceptions/LayerNotEnoughDataException.java
@@ -14,13 +14,17 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.daffodil.runtime1.layers;
+package org.apache.daffodil.api.layers.exceptions;
+
+import org.apache.daffodil.lib.util.Misc;
+
+import java.util.Objects;
 
 /**
  * LayerNotEnoughDataException is a custom exception class that represents an 
exception that occurs
  * when there is insufficient data for a layer in a program.
  */
-public class LayerNotEnoughDataException extends LayerProcessingException {
+public class LayerNotEnoughDataException extends Exception {
 
     /**
      * Creates a new instance of LayerNotEnoughDataException with the specified
@@ -30,7 +34,24 @@ public class LayerNotEnoughDataException extends 
LayerProcessingException {
      * @param numAvailableBytes the number of bytes available for the layer
      */
     public LayerNotEnoughDataException(int numNeededBytes, int 
numAvailableBytes) {
-        super("Insufficient data. Needed " + numNeededBytes +
-                " bytes, but only " + numAvailableBytes + " were available.");
+       this("Insufficient data. Needed " + numNeededBytes +
+           " bytes, but only " + numAvailableBytes + " were available.");
+    }
+
+    public LayerNotEnoughDataException(String msg, Throwable cause) {
+        super(msg, cause);
+        if (Objects.isNull(msg)) Objects.requireNonNull(cause);
+        if (Objects.isNull(cause)) Objects.requireNonNull(msg);
     }
+
+    public LayerNotEnoughDataException(String msg) { this(msg, null); }
+
+    /**
+     * When creating an exception with just a cause, we also synthesize some 
sort of
+     * message, because otherwise SLF4J doesn't do so, and you get out errors 
like
+     * '[error] null' because you didn't supply a message.
+     * @param cause the cause of this processing exception
+     */
+    public LayerNotEnoughDataException(Throwable cause) {
+        this((cause.getMessage()) == null ? Misc.getNameFromClass(cause) : 
cause.getMessage(), cause); }
 }
diff --git 
a/daffodil-core/src/main/java/org/apache/daffodil/runtime1/layers/api/package-info.java
 b/daffodil-core/src/main/java/org/apache/daffodil/api/layers/package-info.java
similarity index 75%
rename from 
daffodil-core/src/main/java/org/apache/daffodil/runtime1/layers/api/package-info.java
rename to 
daffodil-core/src/main/java/org/apache/daffodil/api/layers/package-info.java
index ea14d7066..e3d4e8e51 100644
--- 
a/daffodil-core/src/main/java/org/apache/daffodil/runtime1/layers/api/package-info.java
+++ 
b/daffodil-core/src/main/java/org/apache/daffodil/api/layers/package-info.java
@@ -16,7 +16,7 @@
  */
 
 /**
- * <h2>Daffodil Runtime1 Layers API Package</h2>
+ * <h2>Daffodil Layers API Package</h2>
  * <p>
  * This package provides base classes for creating Layers, which provide a 
means of
  * algorithmic operations on the data stream that cannot be expressed using
@@ -37,23 +37,29 @@
  * This API documentation is focused on the programming required to create a 
new layer implementation
  * as a custom plug-in for Daffodil.
  * <p>
- * {@link org.apache.daffodil.runtime1.layers.api.Layer} is the general 
abstract base class
+ * {@link org.apache.daffodil.api.layers.Layer} is the general abstract base 
class
  * used to define any layer, but most commonly it is used for transforming 
layers.
  * <p>
- * {@link org.apache.daffodil.runtime1.layers.api.ChecksumLayer} is an 
abstract base class
- * derived from {@link org.apache.daffodil.runtime1.layers.api.Layer}, and 
further specialized for defining
+ * {@link org.apache.daffodil.api.layers.ChecksumLayer} is an abstract base 
class
+ * derived from {@link org.apache.daffodil.api.layers.Layer}, and further 
specialized for defining
  * checksum layers.
  *
  * <h3> About Testing </h3>
  * <p>
  * The Daffodil test code base includes tests for many ways that
  * an API user can goof up the definition of a layer class.
- * For example there are tests for calling {@code processingError}, {@code 
runtimeSchemaDefinitionError}, and throwing
+ * For example, there are tests for calling {@code processingError}, {@code 
runtimeSchemaDefinitionError}, and throwing
  * an {@code Exception} from every place a custom-defined Layer could cause 
these.
  * Processing errors cause the parser to backtrack in all sensible cases.
- * That is to say that if a layer is parsing data, and the data it encounters 
is not a match for that layer, then
- * a properly written layer will issue a processing error, and the parser will 
backtrack, allowing the format to try
- * other alternatives for parsing that data.
+ * That is to say that if a layer is parsing data, and the data it encounters 
is not
+ * a match for that layer, then a properly written layer will issue a 
processing error,
+ * and the parser will backtrack, allowing the format to try other 
alternatives for
+ * parsing that data.
+ *
+ * <h4>Custom Plug-In Layers</h4>
+ * Custom Plug-in layers must extend the {@link 
org.apache.daffodil.api.layers.Layer} class, and be
+ * referenced in a {@code META-INF/services} file with the same class 
reference as the name. This
+ * path has changed in Daffodil 4.0.0.
  *
  * <h3>Compatibility with Daffodil 3.7.0 and prior versions of Apache 
Daffodil</h3>
  * <p>
@@ -67,4 +73,4 @@
  * It is our intention that this Layer API (introduced in Daffodil 3.8.0) will 
prove to be stable
  * and supportable long term.
  */
-package org.apache.daffodil.runtime1.layers.api;
+package org.apache.daffodil.api.layers;
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/layers/runtime1/GZipLayer.java
 
b/daffodil-core/src/main/java/org/apache/daffodil/layers/runtime1/GZipLayer.java
similarity index 96%
rename from 
daffodil-core/src/main/scala/org/apache/daffodil/layers/runtime1/GZipLayer.java
rename to 
daffodil-core/src/main/java/org/apache/daffodil/layers/runtime1/GZipLayer.java
index 0b8d03c45..df37f95ff 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/layers/runtime1/GZipLayer.java
+++ 
b/daffodil-core/src/main/java/org/apache/daffodil/layers/runtime1/GZipLayer.java
@@ -17,7 +17,7 @@
 
 package org.apache.daffodil.layers.runtime1;
 
-import org.apache.daffodil.runtime1.layers.api.Layer;
+import org.apache.daffodil.api.layers.Layer;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -41,7 +41,7 @@ public final class GZipLayer extends Layer {
         majorVersion = 8;
       } else {
         String[] parts = versionString.split("\\.");
-        assert(parts.length > 0);
+        assert (parts.length > 0);
         majorVersion = Integer.parseInt(parts[0]);
       }
       fixNeeded = (majorVersion < 16);
@@ -99,10 +99,14 @@ class GZIPFixedOutputStream extends OutputStream {
   private int bytePosition = 0;
 
   @Override
-  public void close() throws IOException { os.close(); }
+  public void close() throws IOException {
+    os.close();
+  }
 
   @Override
-  public void flush() throws IOException { os.flush(); }
+  public void flush() throws IOException {
+    os.flush();
+  }
 
   @Override
   public void write(byte[] b, int off, int len) throws IOException {
diff --git 
a/daffodil-core/src/main/resources/META-INF/services/org.apache.daffodil.runtime1.layers.api.Layer
 
b/daffodil-core/src/main/resources/META-INF/services/org.apache.daffodil.api.layers.Layer
similarity index 100%
rename from 
daffodil-core/src/main/resources/META-INF/services/org.apache.daffodil.runtime1.layers.api.Layer
rename to 
daffodil-core/src/main/resources/META-INF/services/org.apache.daffodil.api.layers.Layer
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/layers/runtime1/Base64MimeLayer.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/layers/runtime1/Base64MimeLayer.scala
index dddff7490..7ee4e208c 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/layers/runtime1/Base64MimeLayer.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/layers/runtime1/Base64MimeLayer.scala
@@ -20,7 +20,7 @@ package org.apache.daffodil.layers.runtime1
 import java.io.InputStream
 import java.io.OutputStream
 
-import org.apache.daffodil.runtime1.layers.api.Layer
+import org.apache.daffodil.api.layers.Layer
 
 final class Base64MimeLayer
   extends Layer("base64_MIME", "urn:org.apache.daffodil.layers.base64_MIME") {
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/layers/runtime1/BoundaryMarkLayer.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/layers/runtime1/BoundaryMarkLayer.scala
index f629b3f42..59046585f 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/layers/runtime1/BoundaryMarkLayer.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/layers/runtime1/BoundaryMarkLayer.scala
@@ -22,10 +22,10 @@ import java.nio.charset.Charset
 import java.nio.charset.IllegalCharsetNameException
 import java.nio.charset.UnsupportedCharsetException
 
+import org.apache.daffodil.api.layers.Layer
 import org.apache.daffodil.io.BoundaryMarkInsertingJavaOutputStream
 import org.apache.daffodil.io.BoundaryMarkLimitingInputStream
 import org.apache.daffodil.runtime1.layers.ScalaLayerHelper
-import org.apache.daffodil.runtime1.layers.api.Layer
 
 /**
  * A layer which isolates text data by way of a boundary mark string.
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/layers/runtime1/ByteSwapLayer.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/layers/runtime1/ByteSwapLayer.scala
index 1296531ee..d775a9113 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/layers/runtime1/ByteSwapLayer.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/layers/runtime1/ByteSwapLayer.scala
@@ -22,8 +22,8 @@ import java.io.OutputStream
 import java.util.ArrayDeque
 import java.util.Deque
 
+import org.apache.daffodil.api.layers.Layer
 import org.apache.daffodil.lib.exceptions.Assert
-import org.apache.daffodil.runtime1.layers.api.Layer
 
 final class TwoByteSwapLayer extends ByteSwap("twobyteswap", 2)
 
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/layers/runtime1/FixedLengthLayer.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/layers/runtime1/FixedLengthLayer.scala
index 45ca8bb75..a74b4f892 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/layers/runtime1/FixedLengthLayer.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/layers/runtime1/FixedLengthLayer.scala
@@ -22,9 +22,9 @@ import java.io.InputStream
 import java.io.OutputStream
 import java.nio.ByteBuffer
 
+import org.apache.daffodil.api.layers.Layer
+import org.apache.daffodil.api.layers.exceptions.LayerNotEnoughDataException
 import org.apache.daffodil.lib.exceptions.Assert
-import org.apache.daffodil.runtime1.layers.LayerNotEnoughDataException
-import org.apache.daffodil.runtime1.layers.api.Layer
 
 import org.apache.commons.io.IOUtils
 
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/layers/runtime1/LineFoldMode.java
 
b/daffodil-core/src/main/scala/org/apache/daffodil/layers/runtime1/LineFoldMode.java
deleted file mode 100644
index 98b82e1ed..000000000
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/layers/runtime1/LineFoldMode.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.daffodil.layers.runtime1;
-
-public enum LineFoldMode {
-    /**
-     * IMF - Internet Mail Format
-     */
-    IMF("lineFolded_IMF"),
-    /**
-     * iCalendar
-     */
-    iCalendar("lineFolded_iCalendar");
-
-    public final String dfdlName;
-    private LineFoldMode(final String dfdlName) { this.dfdlName = dfdlName; }
-
-}
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/layers/LayerUnexpectedException.java
 
b/daffodil-core/src/main/scala/org/apache/daffodil/layers/runtime1/LineFoldMode.scala
similarity index 73%
rename from 
daffodil-core/src/main/scala/org/apache/daffodil/runtime1/layers/LayerUnexpectedException.java
rename to 
daffodil-core/src/main/scala/org/apache/daffodil/layers/runtime1/LineFoldMode.scala
index 9622384aa..0f64b025b 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/layers/LayerUnexpectedException.java
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/layers/runtime1/LineFoldMode.scala
@@ -14,10 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.daffodil.runtime1.layers;
 
+package org.apache.daffodil.layers.runtime1
 
-public class LayerUnexpectedException extends LayerProcessingException {
-
-    public LayerUnexpectedException(Throwable cause) { super(cause); }
+/**
+ * To obtain enum use LineFoldMode.valueOf(dfdlName)
+ * @param dfdlName name of enum
+ */
+enum LineFoldMode(val dfdlName: String) {
+  case IMF extends LineFoldMode("lineFolded_IMF")
+  case iCalendar extends LineFoldMode("lineFolded_iCalendar")
 }
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/layers/runtime1/LineFoldedLayerBase.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/layers/runtime1/LineFoldedLayerBase.scala
index 7cc022c1d..2862df186 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/layers/runtime1/LineFoldedLayerBase.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/layers/runtime1/LineFoldedLayerBase.scala
@@ -20,8 +20,8 @@ package org.apache.daffodil.layers.runtime1
 import java.io.InputStream
 import java.io.OutputStream
 
+import org.apache.daffodil.api.layers.Layer
 import org.apache.daffodil.lib.exceptions.Assert
-import org.apache.daffodil.runtime1.layers.api.Layer
 /*
  * This and related classes implement so called "line folding" from
  * IETF RFC 2822 Internet Message Format (IMF), and IETF RFC 5545 iCalendar.
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/dpath/UserDefinedFunctionBase.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/dpath/UserDefinedFunctionBase.scala
index 0649a9e8c..872239849 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/dpath/UserDefinedFunctionBase.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/dpath/UserDefinedFunctionBase.scala
@@ -19,14 +19,14 @@ package org.apache.daffodil.runtime1.dpath
 
 import java.lang.reflect.InvocationTargetException
 
+import org.apache.daffodil.api.udf.UserDefinedFunction
+import 
org.apache.daffodil.api.udf.exceptions.UserDefinedFunctionProcessingError
 import org.apache.daffodil.lib.util.Maybe
 import org.apache.daffodil.runtime1.infoset.DataValue
 import org.apache.daffodil.runtime1.infoset.DataValue.DataValuePrimitive
 import org.apache.daffodil.runtime1.udf.UserDefinedFunctionFatalErrorException
 import 
org.apache.daffodil.runtime1.udf.UserDefinedFunctionProcessingErrorException
 import 
org.apache.daffodil.runtime1.udf.UserDefinedFunctionService.UserDefinedFunctionMethod
-import org.apache.daffodil.udf.UserDefinedFunction
-import org.apache.daffodil.udf.exceptions.UserDefinedFunctionProcessingError
 
 /**
  * Both the serializable evaluate method and the User Defined Function 
instance are passed in,
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/layers/ChecksumLayerBase.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/layers/ChecksumLayerBase.scala
index aabaa5d26..1bb9ac406 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/layers/ChecksumLayerBase.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/layers/ChecksumLayerBase.scala
@@ -22,8 +22,9 @@ import java.io.InputStream
 import java.io.OutputStream
 import java.nio.ByteBuffer
 
+import org.apache.daffodil.api.layers.Layer
+import org.apache.daffodil.api.layers.exceptions.LayerNotEnoughDataException
 import org.apache.daffodil.lib.exceptions.Assert
-import org.apache.daffodil.runtime1.layers.api.Layer
 
 import org.apache.commons.io.IOUtils
 
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/layers/LayerDriver.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/layers/LayerDriver.scala
index 43eb448b3..ca26426a9 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/layers/LayerDriver.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/layers/LayerDriver.scala
@@ -22,6 +22,8 @@ import java.io.InputStream
 import java.io.OutputStream
 import scala.jdk.CollectionConverters.*
 
+import org.apache.daffodil.api.layers.Layer
+import org.apache.daffodil.api.layers.exceptions.*
 import org.apache.daffodil.io.DataInputStream.Mark
 import org.apache.daffodil.io.DataOutputStream
 import org.apache.daffodil.io.DirectOrBufferedDataOutputStream
@@ -34,7 +36,6 @@ import org.apache.daffodil.lib.util.Maybe.Nope
 import org.apache.daffodil.lib.util.Maybe.One
 import org.apache.daffodil.lib.util.Misc
 import org.apache.daffodil.runtime1.dsom.RuntimeSchemaDefinitionError
-import org.apache.daffodil.runtime1.layers.api.Layer
 import org.apache.daffodil.runtime1.processors.ParseOrUnparseState
 import org.apache.daffodil.runtime1.processors.ProcessingError
 
@@ -315,30 +316,6 @@ class LayerDriver private (val layer: Layer) {
 
 }
 
-/**
- * This is used to encapsulate runtime exceptions that are thrown out of layer 
code.
- */
-class LayerFatalException(msg: String, cause: Throwable) extends 
RuntimeException(msg, cause) {
-  def this(msg: String) = this(msg, null)
-
-  /**
-   * When constructed with just a cause, we also pass a message if the cause 
provides one
-   * because the SLF4J logging system doesn't synthesize a message from the 
cause if only
-   * a cause is provided.
-   * @param cause
-   */
-  def this(cause: Throwable) =
-    this(
-      {
-        if (cause.getMessage == null)
-          Misc.getNameFromClass(cause)
-        else
-          cause.getMessage
-      },
-      cause
-    )
-}
-
 /**
  * Turns Daffodil's bits-capable InputSourceDataInputStream objects into 
ordinary
  * java InputStream API for byte-oriented reads.
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/layers/LayerProcessingException.java
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/layers/LayerProcessingException.java
deleted file mode 100644
index c3b72ab90..000000000
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/layers/LayerProcessingException.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.daffodil.runtime1.layers;
-
-import org.apache.daffodil.lib.util.Misc;
-
-import java.util.Objects;
-
-/**
- * LayerProcessingException represents an exception that can occur during the 
usage of layers in a program.
- */
-public class LayerProcessingException extends Exception {
-
-  public LayerProcessingException(String msg, Throwable cause) {
-    super(msg, cause);
-    if (Objects.isNull(msg)) Objects.requireNonNull(cause);
-    if (Objects.isNull(cause)) Objects.requireNonNull(msg);
-  }
-
-  public LayerProcessingException(String msg) { this(msg, null); }
-
-  /**
-   * When creating an exception with just a cause, we also synthesize some 
sort of
-   * message, because otherwise SLF4J doesn't do so, and you get out errors 
like
-   * '[error] null' because you didn't supply a message.
-   * @param cause the cause of this processing exception
-   */
-  public LayerProcessingException(Throwable cause) {
-    this((cause.getMessage()) == null ? Misc.getNameFromClass(cause) : 
cause.getMessage(), cause); }
-}
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/layers/LayerRuntimeCompiler.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/layers/LayerRuntimeCompiler.scala
index 647b3b0d4..d8abcb3ca 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/layers/LayerRuntimeCompiler.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/layers/LayerRuntimeCompiler.scala
@@ -27,10 +27,10 @@ import java.lang.reflect.Method
 import scala.collection.immutable.ListSet
 import scala.collection.mutable
 
+import org.apache.daffodil.api.layers.Layer
 import org.apache.daffodil.lib.exceptions.Assert
 import org.apache.daffodil.lib.util.SimpleNamedServiceLoader
 import org.apache.daffodil.runtime1.dpath.NodeInfo.PrimType
-import org.apache.daffodil.runtime1.layers.api.Layer
 import org.apache.daffodil.runtime1.processors.VariableRuntimeData
 
 class LayerRuntimeCompiler {
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/layers/LayerVarsRuntime.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/layers/LayerVarsRuntime.scala
index 280903f7d..29cb3675c 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/layers/LayerVarsRuntime.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/layers/LayerVarsRuntime.scala
@@ -20,12 +20,12 @@ import java.lang.reflect.Constructor
 import java.lang.reflect.InvocationTargetException
 import java.lang.reflect.Method
 
+import org.apache.daffodil.api.layers.Layer
 import org.apache.daffodil.lib.calendar.DFDLDate
 import org.apache.daffodil.lib.calendar.DFDLDateTime
 import org.apache.daffodil.lib.calendar.DFDLTime
 import org.apache.daffodil.runtime1.dpath.NodeInfo.PrimType
 import org.apache.daffodil.runtime1.infoset.DataValue
-import org.apache.daffodil.runtime1.layers.api.Layer
 import org.apache.daffodil.runtime1.processors.VariableRuntimeData
 
 import com.ibm.icu.util.Calendar
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/layers/ScalaLayerHelper.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/layers/ScalaLayerHelper.scala
index 31e431178..0b1143aa9 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/layers/ScalaLayerHelper.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/layers/ScalaLayerHelper.scala
@@ -16,7 +16,7 @@
  */
 package org.apache.daffodil.runtime1.layers
 
-import org.apache.daffodil.runtime1.layers.api.Layer
+import org.apache.daffodil.api.layers.Layer
 
 /**
  * The Layer API is defined in Java. This gives the things that throw more
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/DataProcessor.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/DataProcessor.scala
index 9cc2e0ab5..57c9570c1 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/DataProcessor.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/processors/DataProcessor.scala
@@ -33,6 +33,7 @@ import scala.jdk.CollectionConverters.*
 
 import org.apache.daffodil.api
 import org.apache.daffodil.api.debugger.Debugger
+import org.apache.daffodil.api.layers.exceptions.LayerFatalException
 import org.apache.daffodil.api.metadata.MetadataHandler
 import org.apache.daffodil.api.validation.ValidatorInitializationException
 import org.apache.daffodil.api.validation.Validators
@@ -41,7 +42,6 @@ import org.apache.daffodil.lib.iapi.DaffodilTunables
 import org.apache.daffodil.lib.iapi.WithDiagnostics
 import org.apache.daffodil.runtime1.dsom.*
 import org.apache.daffodil.runtime1.iapi.DFDL
-import org.apache.daffodil.runtime1.layers.LayerFatalException
 import org.apache.daffodil.validation.DaffodilLimitedValidator
 import org.apache.daffodil.validation.NoValidator
 object EqualityNoWarn3 {
diff --git 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/udf/UserDefinedFunctionService.scala
 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/udf/UserDefinedFunctionService.scala
index 1ed673f0d..c9880fd10 100644
--- 
a/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/udf/UserDefinedFunctionService.scala
+++ 
b/daffodil-core/src/main/scala/org/apache/daffodil/runtime1/udf/UserDefinedFunctionService.scala
@@ -30,11 +30,11 @@ import java.util.ServiceLoader
 import scala.collection.immutable.ArraySeq as IArraySeq
 import scala.collection.mutable.*
 
+import org.apache.daffodil.api.udf.*
 import org.apache.daffodil.lib.exceptions.Assert
 import org.apache.daffodil.lib.util.Logger
 import org.apache.daffodil.lib.util.Misc
 import org.apache.daffodil.runtime1.dpath.NodeInfo
-import org.apache.daffodil.udf.*
 
 /**
  * Loads, validates and caches (for use at schema compile time) all User 
Defined Functions
diff --git a/daffodil-layers/README.md b/daffodil-layers/README.md
new file mode 100644
index 000000000..a6679f41e
--- /dev/null
+++ b/daffodil-layers/README.md
@@ -0,0 +1,21 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+# Daffodil Layers
+
+See the <a href="http://daffodil.apache.org/layers";>Layer Usage 
Documentation</a> for how a layer is
+used from a Daffodil DFDL schema.
\ No newline at end of file
diff --git 
a/daffodil-test-integration/src/test/scala/org/apache/daffodil/cliTest/TestCLIUdfs.scala
 
b/daffodil-test-integration/src/test/scala/org/apache/daffodil/cliTest/TestCLIUdfs.scala
index cb393ecbc..b5d31a901 100644
--- 
a/daffodil-test-integration/src/test/scala/org/apache/daffodil/cliTest/TestCLIUdfs.scala
+++ 
b/daffodil-test-integration/src/test/scala/org/apache/daffodil/cliTest/TestCLIUdfs.scala
@@ -89,7 +89,7 @@ class TestCLIUdfs {
     runCLI(args"-v parse -s $schema -r user_func1", classpath) { cli =>
       cli.send("strng", inputDone = true)
       cli.expectErr(
-        "[warn] User Defined Function Provider failed to load: 
org.apache.daffodil.udf.UserDefinedFunctionProvider:"
+        "[warn] User Defined Function Provider failed to load: 
org.apache.daffodil.api.udf.UserDefinedFunctionProvider:"
       )
       cli.expectErr(
         "Provider 
org.nonexistentclass.example.StringFunctions.StringFunctionsProvider not found"
@@ -174,12 +174,12 @@ class TestCLIUdfs {
       cli.expectErr(
         "[warn] User Defined Function ignored:" +
           " org.badudfs.nonUDF.StringFunctions.FuncA." +
-          " Doesn't implement org.apache.daffodil.udf.UserDefinedFunction"
+          " Doesn't implement org.apache.daffodil.api.udf.UserDefinedFunction"
       )
       cli.expectErr(
         "[warn] User Defined Function ignored:" +
           " org.badudfs.nonUDF.StringFunctions.Replace." +
-          " Doesn't implement org.apache.daffodil.udf.UserDefinedFunction"
+          " Doesn't implement org.apache.daffodil.api.udf.UserDefinedFunction"
       )
       cli.expectErr("[error] Schema Definition Error: Unsupported function: 
jsudf:replace")
     }(ExitCode.UnableToCreateProcessor)
@@ -201,7 +201,7 @@ class TestCLIUdfs {
       cli.expectErr(
         "[warn] User Defined Function ignored:" +
           " org.badudfs.annotations.StringFunctions.FuncB." +
-          " Missing org.apache.daffodil.udf.UserDefinedFunctionIdentification 
annotation"
+          " Missing 
org.apache.daffodil.api.udf.UserDefinedFunctionIdentification annotation"
       )
       cli.expectErr(
         "[warn] User Defined Function ignored:" +
@@ -371,7 +371,7 @@ class TestCLIUdfs {
 
     runCLI(args"-vv parse -s $schema -r user_func3", classpath) { cli =>
       cli.expectErr(
-        "[warn] User Defined Function Provider failed to load: 
org.apache.daffodil.udf.UserDefinedFunctionProvider"
+        "[warn] User Defined Function Provider failed to load: 
org.apache.daffodil.api.udf.UserDefinedFunctionProvider"
       )
       cli.expectErr(
         "Provider 
org.sbadudfs.udfpexceptions2.StringFunctions.StringFunctionsProvider could not 
be instantiated"
diff --git 
a/daffodil-test/src/test/resources/META-INF/services/org.apache.daffodil.runtime1.layers.api.Layer
 
b/daffodil-test/src/test/resources/META-INF/services/org.apache.daffodil.api.layers.Layer
similarity index 100%
rename from 
daffodil-test/src/test/resources/META-INF/services/org.apache.daffodil.runtime1.layers.api.Layer
rename to 
daffodil-test/src/test/resources/META-INF/services/org.apache.daffodil.api.layers.Layer
diff --git 
a/daffodil-test/src/test/resources/META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider
 
b/daffodil-test/src/test/resources/META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider
similarity index 100%
rename from 
daffodil-test/src/test/resources/META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider
rename to 
daffodil-test/src/test/resources/META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider
diff --git 
a/daffodil-test/src/test/scala/org/apache/daffodil/runtime1/layers/AISPayloadArmoringLayer.scala
 
b/daffodil-test/src/test/scala/org/apache/daffodil/runtime1/layers/AISPayloadArmoringLayer.scala
index 1d13c7234..4cda6de4c 100644
--- 
a/daffodil-test/src/test/scala/org/apache/daffodil/runtime1/layers/AISPayloadArmoringLayer.scala
+++ 
b/daffodil-test/src/test/scala/org/apache/daffodil/runtime1/layers/AISPayloadArmoringLayer.scala
@@ -22,6 +22,7 @@ import java.nio.*
 import java.nio.charset.*
 import scala.util.Using
 
+import org.apache.daffodil.api.layers.Layer
 import org.apache.daffodil.io.FormatInfo
 import org.apache.daffodil.io.InputSourceDataInputStream
 import org.apache.daffodil.io.processors.charset.BitsCharsetDecoder
@@ -37,7 +38,6 @@ import 
org.apache.daffodil.lib.schema.annotation.props.gen.EncodingErrorPolicy
 import org.apache.daffodil.lib.schema.annotation.props.gen.UTF16Width
 import org.apache.daffodil.lib.util.Maybe
 import org.apache.daffodil.lib.util.MaybeInt
-import org.apache.daffodil.runtime1.layers.api.Layer
 
 import org.apache.commons.io.IOUtils
 
diff --git 
a/daffodil-test/src/test/scala/org/apache/daffodil/runtime1/layers/AllTypesLayer.scala
 
b/daffodil-test/src/test/scala/org/apache/daffodil/runtime1/layers/AllTypesLayer.scala
index 9ddb979eb..d7ce567c9 100644
--- 
a/daffodil-test/src/test/scala/org/apache/daffodil/runtime1/layers/AllTypesLayer.scala
+++ 
b/daffodil-test/src/test/scala/org/apache/daffodil/runtime1/layers/AllTypesLayer.scala
@@ -21,7 +21,7 @@ package org.apache.daffodil.runtime1.layers
 import java.io.InputStream
 import java.io.OutputStream
 
-import org.apache.daffodil.runtime1.layers.api.Layer
+import org.apache.daffodil.api.layers.Layer
 
 import com.ibm.icu.util.Calendar
 
diff --git 
a/daffodil-test/src/test/scala/org/apache/daffodil/runtime1/layers/CheckDigitLayer.scala
 
b/daffodil-test/src/test/scala/org/apache/daffodil/runtime1/layers/CheckDigitLayer.scala
index 28d201270..6a78dbdcf 100644
--- 
a/daffodil-test/src/test/scala/org/apache/daffodil/runtime1/layers/CheckDigitLayer.scala
+++ 
b/daffodil-test/src/test/scala/org/apache/daffodil/runtime1/layers/CheckDigitLayer.scala
@@ -22,8 +22,8 @@ import java.nio.charset.Charset
 import java.nio.charset.IllegalCharsetNameException
 import java.nio.charset.UnsupportedCharsetException
 
+import org.apache.daffodil.api.layers.ChecksumLayer
 import org.apache.daffodil.lib.util.Logger
-import org.apache.daffodil.runtime1.layers.api.ChecksumLayer
 
 /** Check digit example layer
  *
diff --git 
a/daffodil-test/src/test/scala/org/apache/daffodil/runtime1/layers/SimpleBombOutLayer.scala
 
b/daffodil-test/src/test/scala/org/apache/daffodil/runtime1/layers/SimpleBombOutLayer.scala
index e36587646..22a6b9087 100644
--- 
a/daffodil-test/src/test/scala/org/apache/daffodil/runtime1/layers/SimpleBombOutLayer.scala
+++ 
b/daffodil-test/src/test/scala/org/apache/daffodil/runtime1/layers/SimpleBombOutLayer.scala
@@ -21,11 +21,11 @@ package org.apache.daffodil.runtime1.layers
 import java.io.InputStream
 import java.io.OutputStream
 
+import org.apache.daffodil.api.layers.Layer
 import org.apache.daffodil.lib.exceptions.Assert
 import org.apache.daffodil.lib.exceptions.ThrowsSDE
 import org.apache.daffodil.lib.schema.annotation.props.Enum
 import org.apache.daffodil.lib.schema.annotation.props.EnumValue
-import org.apache.daffodil.runtime1.layers.api.Layer
 
 /**
  * This layer has bombWhere and bombHow variables to enable
diff --git 
a/daffodil-test/src/test/scala/org/apache/daffodil/runtime1/layers/SimpleTestLayer.scala
 
b/daffodil-test/src/test/scala/org/apache/daffodil/runtime1/layers/SimpleTestLayer.scala
index 491b4074c..83cc036c3 100644
--- 
a/daffodil-test/src/test/scala/org/apache/daffodil/runtime1/layers/SimpleTestLayer.scala
+++ 
b/daffodil-test/src/test/scala/org/apache/daffodil/runtime1/layers/SimpleTestLayer.scala
@@ -21,7 +21,7 @@ package org.apache.daffodil.runtime1.layers
 import java.io.InputStream
 import java.io.OutputStream
 
-import org.apache.daffodil.runtime1.layers.api.Layer
+import org.apache.daffodil.api.layers.Layer
 
 abstract class TLayer(n: String, ns: String) extends Layer(n, ns) {
   protected var intVar: Int = 0
diff --git 
a/daffodil-test/src/test/scala/org/apache/daffodil/runtime1/layers/ipv4/IPv4ChecksumLayer.scala
 
b/daffodil-test/src/test/scala/org/apache/daffodil/runtime1/layers/ipv4/IPv4ChecksumLayer.scala
index 763c19275..3d72ff863 100644
--- 
a/daffodil-test/src/test/scala/org/apache/daffodil/runtime1/layers/ipv4/IPv4ChecksumLayer.scala
+++ 
b/daffodil-test/src/test/scala/org/apache/daffodil/runtime1/layers/ipv4/IPv4ChecksumLayer.scala
@@ -19,8 +19,8 @@ package org.apache.daffodil.runtime1.layers.ipv4 // different 
subpackage on purp
 
 import java.nio.ByteBuffer
 
+import org.apache.daffodil.api.layers.ChecksumLayer
 import org.apache.daffodil.lib.exceptions.Assert
-import org.apache.daffodil.runtime1.layers.api.ChecksumLayer
 
 import passera.unsigned.UShort
 
diff --git 
a/daffodil-test/src/test/scala/org/apache/daffodil/udf/TestUdfsInSchemas.scala 
b/daffodil-test/src/test/scala/org/apache/daffodil/udf/TestUdfsInSchemas.scala
index aaeea2293..fc1f29b8c 100644
--- 
a/daffodil-test/src/test/scala/org/apache/daffodil/udf/TestUdfsInSchemas.scala
+++ 
b/daffodil-test/src/test/scala/org/apache/daffodil/udf/TestUdfsInSchemas.scala
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.daffodil.udf
+package org.apache.daffodil.api.udf
 
 import org.apache.daffodil.junit.tdml.TdmlSuite
 import org.apache.daffodil.junit.tdml.TdmlTests
diff --git a/daffodil-udf/README.md b/daffodil-udf/README.md
index 585d33720..f4dad15c4 100644
--- a/daffodil-udf/README.md
+++ b/daffodil-udf/README.md
@@ -23,34 +23,53 @@ Apache Daffodil allows execution of Java/Scala 
external/user defined functions i
 
 ## Getting Started
 
-The implementer will be expected to provide a JAR via the classpath or 
Daffodil classpath containing at least 2 classes: a provider class and its 
associated function class(es).
+The implementer will be expected to provide a JAR via the classpath or 
Daffodil classpath containing at least two
+classes:
+a provider class and its associated function class(es).
 
-All providers must be registered in the 
*META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider* file, 
regardless of how many are provided.
+All providers must be registered in the 
*META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider*
+file, regardless of how many are provided.
 
 ### UDF Implementation
 
 #### User Defined Function Provider Classes
 
-The provider class must extend Daffodil's `UserDefinedFuntionProvider` class. 
This class must implement the `getUserDefinedFunctionClasses` abstract method, 
and ensure it returns all the User Defined Functions this class is providing. 
The `UserDefinedFunctionProvider` class provides a `createUserDefinedFunction` 
to lookup and initialize User Defined Functions that have no-argument 
constructors, based on a supplied name and namespaceURI. If the User Defined 
Function has a constructor that [...]
+The provider class must extend Daffodil's `UserDefinedFuntionProvider` class. 
This class must implement the
+`getUserDefinedFunctionClasses` abstract method, and ensure it returns all the 
User Defined Functions this class is
+providing. The `UserDefinedFunctionProvider` class provides a 
`createUserDefinedFunction` to lookup and initialize User
+Defined Functions that have no-argument constructors, based on a supplied name 
and namespaceURI. If the User Defined
+Function has a constructor that takes arguments, then the default lookup 
function cannot be used, and the class must
+override the look up function with its own implementation for such UDFs.
 
-This class will act as a traditional service provider as explained in the 
ServiceLoader API, and must have a 
*META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider* file in 
its project. This file must contain the fully qualified name(s) of the 
**provider class(es)** in the JAR. Without that file, neither this class nor 
any of the User Defined Function classes it provides will be visible to 
Daffodil.
+This class will act as a traditional service provider as explained in the 
ServiceLoader API, and must have a
+*META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider* 
file in its project. This file must contain
+the fully qualified name(s) of the **provider class(es)** in the JAR. Without 
that file, neither this class nor any of
+the User Defined Function classes it provides will be visible to Daffodil.
 
-The class can provide as many User Defined Function classes as it wishes, as 
long as they are made available by the `getUserDefinedFunctionClasses` function.
+The class can provide as many User Defined Function classes as it wishes, as 
long as they are made available by the
+`getUserDefinedFunctionClasses` function.
 
 #### User Defined Function Classes
 
-The User Defined Function class must extend Daffodil's `UserDefinedFunction` 
class. This class will contain the actual functionality implementers wish to 
add to DFDL Expressions. It must be annotated with the 
`UserDefinedFunctionIdentification` annotation class, with the name and 
namespaceURI fields filled in with how the UDF will be called from the schema. 
It must also implement a function named *evaluate* that Daffodil will call to 
execute the desired UDF functionality. *There is no su [...]
+The User Defined Function class must extend Daffodil's `UserDefinedFunction` 
class. This class will contain the actual
+functionality implementers wish to add to DFDL Expressions. It must be 
annotated with the
+`UserDefinedFunctionIdentification` annotation class, with the name and 
namespaceURI fields filled in with how the UDF
+will be called from the schema. It must also implement a function named 
*evaluate* that Daffodil will call to execute
+the desired UDF functionality. *There is no support for overloaded or void 
evaluate functions*.
 
 #### User Defined Function Exceptions
 
 Daffodil proves two exception classes for users that wish to throw an error 
from within their UDFs.
+
 * `UserDefinedFunctionProcessingError` can be thrown when the implementer 
wishes to cause backtracking during parsing
 * `UserDefinedFunctionFatalException` can be thrown when the implementer 
wishes processing to be aborted all together
 
 All other exceptions are treated as `UserDefinedFunctionFatalException`.
 
 ### UDF Registration
+
 Once implemented, a UDF can be expected to have one of the following structures
+
 ```
 // sample scala UDF with sbt structure
 // based on sample UDF in daffodil-udf/src/test/scala
@@ -65,9 +84,11 @@ src/
     resources/
       META-INF/
         services/
-          org.apache.daffodil.udf.UserDefinedFunctionProvider
+          org.apache.daffodil.api.udf.UserDefinedFunctionProvider
 ```
+
 or
+
 ```
 // sample java UDF with generic structure
 // based on sample UDF in daffodil-udf/src/test/java
@@ -81,13 +102,18 @@ src/
             Replace.java //UDF class
   META-INF/
     services/
-      org.apache.daffodil.udf.UserDefinedFunctionProvider
+      org.apache.daffodil.api.udf.UserDefinedFunctionProvider
 ```
-Each UDF is registered by including the fully qualified name of its provider 
in a text file named 
`META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider`. The 
META-INF folder must be accessible from the root of whatever paths are on the 
classpath, otherwise it won't be picked up by ServiceLoader.
+
+Each UDF is registered by including the fully qualified name of its provider 
in a text file named
+`META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider`. 
The META-INF folder must be accessible from
+the root of whatever paths are on the classpath, otherwise it won't be picked 
up by ServiceLoader.
 
 ### UDF Usage
 
-To use within a DFDL expression, you will need to either define an xsd 
namespace or set as your default namespace a value that matches the 
namespaceURI of the UDF's annotation. Then you can call the function with the 
name field of the function class's annotation. For example:
+To use within a DFDL expression, you will need to either define an xsd 
namespace or set as your default namespace a
+value that matches the namespaceURI of the UDF's annotation. Then you can call 
the function with the name field of the
+function class's annotation. For example:
 
 ```xml
 <!--
@@ -98,13 +124,14 @@ For a UDF with the following annotation
 -->
 
 <!-- within the schema tag -->
-xmlns:sdf="http://example.com/ext/stringfunctions";
+  xmlns:sdf="http://example.com/ext/stringfunctions";
 
-<!-- within the DFDL expression -->
-..."{ sdf:replace(., ' ', '_') }"...
+  <!-- within the DFDL expression -->
+  ..."{ sdf:replace(., ' ', '_') }"...
 ```
 
 ## Supported Types
+
 * BigDecimal: Java
 * BigInteger: Java
 * Boolean: Boxed and Primitive
diff --git 
a/daffodil-udf/src/main/java/org/apache/daffodil/udf/UserDefinedFunction.java 
b/daffodil-udf/src/main/java/org/apache/daffodil/api/udf/UserDefinedFunction.java
similarity index 96%
rename from 
daffodil-udf/src/main/java/org/apache/daffodil/udf/UserDefinedFunction.java
rename to 
daffodil-udf/src/main/java/org/apache/daffodil/api/udf/UserDefinedFunction.java
index 8ddf8b059..69304b285 100644
--- 
a/daffodil-udf/src/main/java/org/apache/daffodil/udf/UserDefinedFunction.java
+++ 
b/daffodil-udf/src/main/java/org/apache/daffodil/api/udf/UserDefinedFunction.java
@@ -15,23 +15,22 @@
  * limitations under the License.
  */
 
-package org.apache.daffodil.udf;
+package org.apache.daffodil.api.udf;
 
 import java.io.Serializable;
 
 /**
  * Interface that all User Defined Functions classes must implement.
- *
+ * <p>
  * It implements the java.io.Serializable class and must have the
  * UserDefinedFunctionIdentification annotation applied and filled in with the
  * values to be used in the schema.
- *
+ * <p>
  * It must also have an evaluate method that contains the functionality it is
  * offering
- *
+ * <p>
  * Any "state" variables should be passed in during overloaded
  * UserDefinedFunctionProvider initialization
- *
  */
 @UserDefinedFunctionIdentification(
     name = "replace.me",
diff --git 
a/daffodil-udf/src/main/java/org/apache/daffodil/udf/UserDefinedFunctionIdentification.java
 
b/daffodil-udf/src/main/java/org/apache/daffodil/api/udf/UserDefinedFunctionIdentification.java
similarity index 96%
rename from 
daffodil-udf/src/main/java/org/apache/daffodil/udf/UserDefinedFunctionIdentification.java
rename to 
daffodil-udf/src/main/java/org/apache/daffodil/api/udf/UserDefinedFunctionIdentification.java
index 30b967cf8..0de779ff1 100644
--- 
a/daffodil-udf/src/main/java/org/apache/daffodil/udf/UserDefinedFunctionIdentification.java
+++ 
b/daffodil-udf/src/main/java/org/apache/daffodil/api/udf/UserDefinedFunctionIdentification.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.daffodil.udf;
+package org.apache.daffodil.api.udf;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
@@ -25,7 +25,7 @@ import java.lang.annotation.Target;
 /**
  * Annotation that must be applied to every UDF in order for it to be 
considered
  * valid.
- *
+ * <p>
  * It must have the name and namespaceURI fields initialized with the namespace
  * and name callers would be expected to use in the schema.
  */
@@ -35,7 +35,7 @@ public @interface UserDefinedFunctionIdentification {
 
   /**
    * Get the local name that identifies the user defined function
-   *
+   * <p>
    * This value must be a valid XML NCName. It should not include a namespace 
or namespace prefix.
    *
    * @return the value
@@ -44,7 +44,7 @@ public @interface UserDefinedFunctionIdentification {
 
   /**
    * Get the namespace URI that identifies the user defined function
-   *
+   * <p>
    * This value must be a valid XML anyURI.
    *
    * @return the value
diff --git 
a/daffodil-udf/src/main/java/org/apache/daffodil/udf/UserDefinedFunctionProvider.java
 
b/daffodil-udf/src/main/java/org/apache/daffodil/api/udf/UserDefinedFunctionProvider.java
similarity index 78%
rename from 
daffodil-udf/src/main/java/org/apache/daffodil/udf/UserDefinedFunctionProvider.java
rename to 
daffodil-udf/src/main/java/org/apache/daffodil/api/udf/UserDefinedFunctionProvider.java
index 213e54b05..a50652978 100644
--- 
a/daffodil-udf/src/main/java/org/apache/daffodil/udf/UserDefinedFunctionProvider.java
+++ 
b/daffodil-udf/src/main/java/org/apache/daffodil/api/udf/UserDefinedFunctionProvider.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.daffodil.udf;
+package org.apache.daffodil.api.udf;
 
 /**
  * Abstract class used by ServiceLoader to poll for UDF providers on classpath.
@@ -31,9 +31,8 @@ package org.apache.daffodil.udf;
  * initialized function class object based on the supplied namespace and name.
  * <p>
  * Subclasses must also supply a
- * src/META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider
+ * 
src/META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider
  * file in their JAVA project in order to be discoverable by Daffodil.
- *
  */
 
 public abstract class UserDefinedFunctionProvider {
@@ -50,26 +49,19 @@ public abstract class UserDefinedFunctionProvider {
    * provided. The UserDefinedFunctionIdentification annotation applied to the
    * function class must match name and namespaceURI field passed in from the
    * schema.
-   *
+   * <p>
    * Must be overloaded if the function class's constructor takes arguments.
    * Otherwise it will throw exceptions.
    *
-   * @param namespaceURI
-   *          XML namespace associated with schema function call
-   * @param fName
-   *          function name called in schema
+   * @param namespaceURI XML namespace associated with schema function call
+   * @param fName        function name called in schema
    * @return initialized UserDefinedFunction object that must contain evaluate
-   *         function with desired functionality
-   *
-   * @throws java.lang.SecurityException
-   *           if security manager exists and disallows access
-   * @throws java.lang.IllegalArgumentException
-   *           if the UDF doesn't have a no-argument constructor
-   * @throws java.lang.ExceptionInInitializerError
-   *           if there is an issue initializing the UDF object
-   * @throws java.lang.ReflectiveOperationException
-   *           if the UDF doesn't have a no-argument constructor or if there 
is an
-   *           issue initializing the UDF object
+   * function with desired functionality
+   * @throws java.lang.SecurityException            if security manager exists 
and disallows access
+   * @throws java.lang.IllegalArgumentException     if the UDF doesn't have a 
no-argument constructor
+   * @throws java.lang.ExceptionInInitializerError  if there is an issue 
initializing the UDF object
+   * @throws java.lang.ReflectiveOperationException if the UDF doesn't have a 
no-argument constructor or if there is an
+   *                                                issue initializing the UDF 
object
    */
   public UserDefinedFunction createUserDefinedFunction(String namespaceURI, 
String fName)
       throws IllegalArgumentException, SecurityException, 
ExceptionInInitializerError,
diff --git 
a/daffodil-udf/src/main/java/org/apache/daffodil/udf/exceptions/UserDefinedFunctionFatalException.java
 
b/daffodil-udf/src/main/java/org/apache/daffodil/api/udf/exceptions/UserDefinedFunctionFatalException.java
similarity index 96%
rename from 
daffodil-udf/src/main/java/org/apache/daffodil/udf/exceptions/UserDefinedFunctionFatalException.java
rename to 
daffodil-udf/src/main/java/org/apache/daffodil/api/udf/exceptions/UserDefinedFunctionFatalException.java
index 4aa0ac810..987d97b30 100644
--- 
a/daffodil-udf/src/main/java/org/apache/daffodil/udf/exceptions/UserDefinedFunctionFatalException.java
+++ 
b/daffodil-udf/src/main/java/org/apache/daffodil/api/udf/exceptions/UserDefinedFunctionFatalException.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.daffodil.udf.exceptions;
+package org.apache.daffodil.api.udf.exceptions;
 
 /**
  * Exception to throw to abort parsing/unparsing.
diff --git 
a/daffodil-udf/src/main/java/org/apache/daffodil/udf/exceptions/UserDefinedFunctionProcessingError.java
 
b/daffodil-udf/src/main/java/org/apache/daffodil/api/udf/exceptions/UserDefinedFunctionProcessingError.java
similarity index 94%
rename from 
daffodil-udf/src/main/java/org/apache/daffodil/udf/exceptions/UserDefinedFunctionProcessingError.java
rename to 
daffodil-udf/src/main/java/org/apache/daffodil/api/udf/exceptions/UserDefinedFunctionProcessingError.java
index 411e22603..d5093c05d 100644
--- 
a/daffodil-udf/src/main/java/org/apache/daffodil/udf/exceptions/UserDefinedFunctionProcessingError.java
+++ 
b/daffodil-udf/src/main/java/org/apache/daffodil/api/udf/exceptions/UserDefinedFunctionProcessingError.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.daffodil.udf.exceptions;
+package org.apache.daffodil.api.udf.exceptions;
 
 /**
  * Exception to throw to cause backtracking during parsing/unparsing.
@@ -45,7 +45,7 @@ public class UserDefinedFunctionProcessingError extends 
Exception {
    * Constructs a new exception with a specified detail message and cause
    *
    * @param errorMessage the detail message
-   * @param cause the cause of the exception
+   * @param cause        the cause of the exception
    */
   public UserDefinedFunctionProcessingError(String errorMessage, Throwable 
cause) {
     super(errorMessage, cause);
diff --git 
a/daffodil-udf/src/test/java/org/badudfs/annotations/StringFunctions/Compare.java
 
b/daffodil-udf/src/test/java/org/badudfs/annotations/StringFunctions/Compare.java
index f9d492078..ae9723e2c 100644
--- 
a/daffodil-udf/src/test/java/org/badudfs/annotations/StringFunctions/Compare.java
+++ 
b/daffodil-udf/src/test/java/org/badudfs/annotations/StringFunctions/Compare.java
@@ -16,12 +16,12 @@
  */
 package org.badudfs.annotations.StringFunctions;
 
-import org.apache.daffodil.udf.UserDefinedFunction;
-import org.apache.daffodil.udf.UserDefinedFunctionIdentification;
+import org.apache.daffodil.api.udf.UserDefinedFunction;
+import org.apache.daffodil.api.udf.UserDefinedFunctionIdentification;
 
 /**
  * UDF for Annotations Negative Unit test
- *
+ * <p>
  * Contains annotation with blank fields
  */
 @SuppressWarnings("serial")
diff --git 
a/daffodil-udf/src/test/java/org/badudfs/annotations/StringFunctions/FuncB.java 
b/daffodil-udf/src/test/java/org/badudfs/annotations/StringFunctions/FuncB.java
index 536c0a1af..9444dbbda 100644
--- 
a/daffodil-udf/src/test/java/org/badudfs/annotations/StringFunctions/FuncB.java
+++ 
b/daffodil-udf/src/test/java/org/badudfs/annotations/StringFunctions/FuncB.java
@@ -16,11 +16,11 @@
  */
 package org.badudfs.annotations.StringFunctions;
 
-import org.apache.daffodil.udf.UserDefinedFunction;
+import org.apache.daffodil.api.udf.UserDefinedFunction;
 
 /**
  * UDF for Annotations Negative Unit test
- *
+ * <p>
  * Missing @UserDefinedFunctionIdentification annotation
  */
 @SuppressWarnings("serial")
diff --git 
a/daffodil-udf/src/test/java/org/badudfs/annotations/StringFunctions/META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider
 
b/daffodil-udf/src/test/java/org/badudfs/annotations/StringFunctions/META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider
similarity index 100%
rename from 
daffodil-udf/src/test/java/org/badudfs/annotations/StringFunctions/META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider
rename to 
daffodil-udf/src/test/java/org/badudfs/annotations/StringFunctions/META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider
diff --git 
a/daffodil-udf/src/test/java/org/badudfs/annotations/StringFunctions/Replace.java
 
b/daffodil-udf/src/test/java/org/badudfs/annotations/StringFunctions/Replace.java
index 7637b11ee..a5ff6cc1b 100644
--- 
a/daffodil-udf/src/test/java/org/badudfs/annotations/StringFunctions/Replace.java
+++ 
b/daffodil-udf/src/test/java/org/badudfs/annotations/StringFunctions/Replace.java
@@ -16,12 +16,12 @@
  */
 package org.badudfs.annotations.StringFunctions;
 
-import org.apache.daffodil.udf.UserDefinedFunction;
-import org.apache.daffodil.udf.UserDefinedFunctionIdentification;
+import org.apache.daffodil.api.udf.UserDefinedFunction;
+import org.apache.daffodil.api.udf.UserDefinedFunctionIdentification;
 
 /**
  * UDF for Annotations Negative Unit test
- *
+ * <p>
  * Contains annotation with blank name field
  */
 @SuppressWarnings("serial")
diff --git 
a/daffodil-udf/src/test/java/org/badudfs/annotations/StringFunctions/StringFunctionsProvider.java
 
b/daffodil-udf/src/test/java/org/badudfs/annotations/StringFunctions/StringFunctionsProvider.java
index 9b413bc27..add5eca60 100644
--- 
a/daffodil-udf/src/test/java/org/badudfs/annotations/StringFunctions/StringFunctionsProvider.java
+++ 
b/daffodil-udf/src/test/java/org/badudfs/annotations/StringFunctions/StringFunctionsProvider.java
@@ -16,12 +16,12 @@
  */
 package org.badudfs.annotations.StringFunctions;
 
-import org.apache.daffodil.udf.UserDefinedFunction;
-import org.apache.daffodil.udf.UserDefinedFunctionProvider;
+import org.apache.daffodil.api.udf.UserDefinedFunction;
+import org.apache.daffodil.api.udf.UserDefinedFunctionProvider;
 
 /**
  * UDF Provider for Negative Unit test
- *
+ * <p>
  * Contains classes with invalid or missing annotations
  */
 public class StringFunctionsProvider extends UserDefinedFunctionProvider {
@@ -32,21 +32,21 @@ public class StringFunctionsProvider extends 
UserDefinedFunctionProvider {
     String nn = String.join("_", namespace, name);
 
     switch (nn) {
-    case "http://example.com/ext/badudfs/stringfunctions_":
-      functionClass = new Replace();
-      break;
-    case "":
-      functionClass = new Compare();
-      break;
-    default:
-      functionClass = new FuncB();
-      break;
+      case "http://example.com/ext/badudfs/stringfunctions_":
+        functionClass = new Replace();
+        break;
+      case "":
+        functionClass = new Compare();
+        break;
+      default:
+        functionClass = new FuncB();
+        break;
     }
     return functionClass;
   }
 
   @Override
   public Class<?>[] getUserDefinedFunctionClasses() {
-    return new Class<?>[] { Compare.class, FuncB.class, Replace.class };
+    return new Class<?>[]{Compare.class, FuncB.class, Replace.class};
   }
 }
diff --git 
a/daffodil-udf/src/test/java/org/badudfs/evaluate/StringFunctions/FuncA.java 
b/daffodil-udf/src/test/java/org/badudfs/evaluate/StringFunctions/FuncA.java
index 12bda0ee8..817811e2e 100644
--- a/daffodil-udf/src/test/java/org/badudfs/evaluate/StringFunctions/FuncA.java
+++ b/daffodil-udf/src/test/java/org/badudfs/evaluate/StringFunctions/FuncA.java
@@ -16,12 +16,12 @@
  */
 package org.badudfs.evaluate.StringFunctions;
 
-import org.apache.daffodil.udf.UserDefinedFunction;
-import org.apache.daffodil.udf.UserDefinedFunctionIdentification;
+import org.apache.daffodil.api.udf.UserDefinedFunction;
+import org.apache.daffodil.api.udf.UserDefinedFunctionIdentification;
 
 /**
  * UDF for Evaluate Function Negative Unit test
- *
+ * <p>
  * Contains overloaded evaluate function
  */
 @SuppressWarnings("serial")
diff --git 
a/daffodil-udf/src/test/java/org/badudfs/evaluate/StringFunctions/FuncB.java 
b/daffodil-udf/src/test/java/org/badudfs/evaluate/StringFunctions/FuncB.java
index b877f500c..b3d1e9a73 100644
--- a/daffodil-udf/src/test/java/org/badudfs/evaluate/StringFunctions/FuncB.java
+++ b/daffodil-udf/src/test/java/org/badudfs/evaluate/StringFunctions/FuncB.java
@@ -16,12 +16,12 @@
  */
 package org.badudfs.evaluate.StringFunctions;
 
-import org.apache.daffodil.udf.UserDefinedFunction;
-import org.apache.daffodil.udf.UserDefinedFunctionIdentification;
+import org.apache.daffodil.api.udf.UserDefinedFunction;
+import org.apache.daffodil.api.udf.UserDefinedFunctionIdentification;
 
 /**
  * UDF for Evaluate Function Negative Unit test
- *
+ * <p>
  * Contains void evaluate function
  */
 @SuppressWarnings("serial")
diff --git 
a/daffodil-udf/src/test/java/org/badudfs/evaluate/StringFunctions/FuncC.java 
b/daffodil-udf/src/test/java/org/badudfs/evaluate/StringFunctions/FuncC.java
index 7c9768e05..9878dae56 100644
--- a/daffodil-udf/src/test/java/org/badudfs/evaluate/StringFunctions/FuncC.java
+++ b/daffodil-udf/src/test/java/org/badudfs/evaluate/StringFunctions/FuncC.java
@@ -18,12 +18,12 @@ package org.badudfs.evaluate.StringFunctions;
 
 import java.util.Arrays;
 
-import org.apache.daffodil.udf.UserDefinedFunction;
-import org.apache.daffodil.udf.UserDefinedFunctionIdentification;
+import org.apache.daffodil.api.udf.UserDefinedFunction;
+import org.apache.daffodil.api.udf.UserDefinedFunctionIdentification;
 
 /**
  * UDF for Evaluate Function Negative Unit test
- *
+ * <p>
  * Contains evaluate function with multiple unsupported parameter types
  */
 @SuppressWarnings("serial")
diff --git 
a/daffodil-udf/src/test/java/org/badudfs/evaluate/StringFunctions/FuncD.java 
b/daffodil-udf/src/test/java/org/badudfs/evaluate/StringFunctions/FuncD.java
index 698b977cd..1a8cc2e06 100644
--- a/daffodil-udf/src/test/java/org/badudfs/evaluate/StringFunctions/FuncD.java
+++ b/daffodil-udf/src/test/java/org/badudfs/evaluate/StringFunctions/FuncD.java
@@ -16,12 +16,12 @@
  */
 package org.badudfs.evaluate.StringFunctions;
 
-import org.apache.daffodil.udf.UserDefinedFunction;
-import org.apache.daffodil.udf.UserDefinedFunctionIdentification;
+import org.apache.daffodil.api.udf.UserDefinedFunction;
+import org.apache.daffodil.api.udf.UserDefinedFunctionIdentification;
 
 /**
  * UDF for Evaluate Function Negative Unit test
- *
+ * <p>
  * Contains evaluate function with unsupported parameter type
  */
 @SuppressWarnings("serial")
diff --git 
a/daffodil-udf/src/test/java/org/badudfs/evaluate/StringFunctions/FuncE.java 
b/daffodil-udf/src/test/java/org/badudfs/evaluate/StringFunctions/FuncE.java
index 251c6e82c..6c45de2bd 100644
--- a/daffodil-udf/src/test/java/org/badudfs/evaluate/StringFunctions/FuncE.java
+++ b/daffodil-udf/src/test/java/org/badudfs/evaluate/StringFunctions/FuncE.java
@@ -16,12 +16,12 @@
  */
 package org.badudfs.evaluate.StringFunctions;
 
-import org.apache.daffodil.udf.UserDefinedFunction;
-import org.apache.daffodil.udf.UserDefinedFunctionIdentification;
+import org.apache.daffodil.api.udf.UserDefinedFunction;
+import org.apache.daffodil.api.udf.UserDefinedFunctionIdentification;
 
 /**
  * UDF for Evaluate Function Negative Unit test
- *
+ * <p>
  * Contains evaluate function with unsupported return type
  */
 @SuppressWarnings("serial")
@@ -31,7 +31,7 @@ import 
org.apache.daffodil.udf.UserDefinedFunctionIdentification;
 public class FuncE implements UserDefinedFunction {
 
   public String[] evaluate(String first, String second) {
-    String[] ret = new String[] { first, second };
+    String[] ret = new String[]{first, second};
     return ret;
   }
 }
diff --git 
a/daffodil-udf/src/test/java/org/badudfs/evaluate/StringFunctions/META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider
 
b/daffodil-udf/src/test/java/org/badudfs/evaluate/StringFunctions/META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider
similarity index 100%
rename from 
daffodil-udf/src/test/java/org/badudfs/evaluate/StringFunctions/META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider
rename to 
daffodil-udf/src/test/java/org/badudfs/evaluate/StringFunctions/META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider
diff --git 
a/daffodil-udf/src/test/java/org/badudfs/evaluate/StringFunctions/Replace.java 
b/daffodil-udf/src/test/java/org/badudfs/evaluate/StringFunctions/Replace.java
index e1a822a23..ef256dbc2 100644
--- 
a/daffodil-udf/src/test/java/org/badudfs/evaluate/StringFunctions/Replace.java
+++ 
b/daffodil-udf/src/test/java/org/badudfs/evaluate/StringFunctions/Replace.java
@@ -16,12 +16,12 @@
  */
 package org.badudfs.evaluate.StringFunctions;
 
-import org.apache.daffodil.udf.UserDefinedFunction;
-import org.apache.daffodil.udf.UserDefinedFunctionIdentification;
+import org.apache.daffodil.api.udf.UserDefinedFunction;
+import org.apache.daffodil.api.udf.UserDefinedFunctionIdentification;
 
 /**
  * UDF for Evaluate Function Negative Unit test
- *
+ * <p>
  * Missing evaluate function
  */
 @UserDefinedFunctionIdentification(
diff --git 
a/daffodil-udf/src/test/java/org/badudfs/evaluate/StringFunctions/StringFunctionsProvider.java
 
b/daffodil-udf/src/test/java/org/badudfs/evaluate/StringFunctions/StringFunctionsProvider.java
index cfa8a54ce..2855c7be6 100644
--- 
a/daffodil-udf/src/test/java/org/badudfs/evaluate/StringFunctions/StringFunctionsProvider.java
+++ 
b/daffodil-udf/src/test/java/org/badudfs/evaluate/StringFunctions/StringFunctionsProvider.java
@@ -16,17 +16,17 @@
  */
 package org.badudfs.evaluate.StringFunctions;
 
-import org.apache.daffodil.udf.UserDefinedFunctionProvider;
+import org.apache.daffodil.api.udf.UserDefinedFunctionProvider;
 
 /**
  * UDF Provider for Negative Unit test
- *
+ * <p>
  * Contains classes with invalid or missing evaluate functions
  */
 public class StringFunctionsProvider extends UserDefinedFunctionProvider {
   @Override
   public Class<?>[] getUserDefinedFunctionClasses() {
-    return new Class<?>[] { Replace.class, FuncA.class, FuncB.class, 
FuncC.class, FuncD.class,
-      FuncE.class };
+    return new Class<?>[]{Replace.class, FuncA.class, FuncB.class, 
FuncC.class, FuncD.class,
+        FuncE.class};
   }
 }
diff --git 
a/daffodil-udf/src/test/java/org/badudfs/functionclasses1/StringFunctions/FuncA.java
 
b/daffodil-udf/src/test/java/org/badudfs/functionclasses1/StringFunctions/FuncA.java
index fd88179aa..99f1c647d 100644
--- 
a/daffodil-udf/src/test/java/org/badudfs/functionclasses1/StringFunctions/FuncA.java
+++ 
b/daffodil-udf/src/test/java/org/badudfs/functionclasses1/StringFunctions/FuncA.java
@@ -16,8 +16,8 @@
  */
 package org.badudfs.functionclasses1.StringFunctions;
 
-import org.apache.daffodil.udf.UserDefinedFunction;
-import org.apache.daffodil.udf.UserDefinedFunctionIdentification;
+import org.apache.daffodil.api.udf.UserDefinedFunction;
+import org.apache.daffodil.api.udf.UserDefinedFunctionIdentification;
 
 /**
  * UDF for userDefinedFunctionClasses array on Negative Unit test
diff --git 
a/daffodil-udf/src/test/java/org/badudfs/functionclasses1/StringFunctions/META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider
 
b/daffodil-udf/src/test/java/org/badudfs/functionclasses1/StringFunctions/META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider
similarity index 100%
rename from 
daffodil-udf/src/test/java/org/badudfs/functionclasses1/StringFunctions/META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider
rename to 
daffodil-udf/src/test/java/org/badudfs/functionclasses1/StringFunctions/META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider
diff --git 
a/daffodil-udf/src/test/java/org/badudfs/functionclasses1/StringFunctions/Replace.java
 
b/daffodil-udf/src/test/java/org/badudfs/functionclasses1/StringFunctions/Replace.java
index 0ab990cc7..b69668591 100644
--- 
a/daffodil-udf/src/test/java/org/badudfs/functionclasses1/StringFunctions/Replace.java
+++ 
b/daffodil-udf/src/test/java/org/badudfs/functionclasses1/StringFunctions/Replace.java
@@ -16,8 +16,8 @@
  */
 package org.badudfs.functionclasses1.StringFunctions;
 
-import org.apache.daffodil.udf.UserDefinedFunction;
-import org.apache.daffodil.udf.UserDefinedFunctionIdentification;
+import org.apache.daffodil.api.udf.UserDefinedFunction;
+import org.apache.daffodil.api.udf.UserDefinedFunctionIdentification;
 
 /**
  * UDF for userDefinedFunctionClasses array on Negative Unit test
diff --git 
a/daffodil-udf/src/test/java/org/badudfs/functionclasses1/StringFunctions/StringFunctionsProvider.java
 
b/daffodil-udf/src/test/java/org/badudfs/functionclasses1/StringFunctions/StringFunctionsProvider.java
index 96d903378..63c68291e 100644
--- 
a/daffodil-udf/src/test/java/org/badudfs/functionclasses1/StringFunctions/StringFunctionsProvider.java
+++ 
b/daffodil-udf/src/test/java/org/badudfs/functionclasses1/StringFunctions/StringFunctionsProvider.java
@@ -16,11 +16,11 @@
  */
 package org.badudfs.functionclasses1.StringFunctions;
 
-import org.apache.daffodil.udf.UserDefinedFunctionProvider;
+import org.apache.daffodil.api.udf.UserDefinedFunctionProvider;
 
 /**
  * UDF Provider for Negative Unit test
- *
+ * <p>
  * userDefinedFunctionClasses array isn't initialized
  */
 public class StringFunctionsProvider extends UserDefinedFunctionProvider {
diff --git 
a/daffodil-udf/src/test/java/org/badudfs/functionclasses2/StringFunctions/FuncA.java
 
b/daffodil-udf/src/test/java/org/badudfs/functionclasses2/StringFunctions/FuncA.java
index 446c450f0..e2d543e38 100644
--- 
a/daffodil-udf/src/test/java/org/badudfs/functionclasses2/StringFunctions/FuncA.java
+++ 
b/daffodil-udf/src/test/java/org/badudfs/functionclasses2/StringFunctions/FuncA.java
@@ -16,8 +16,8 @@
  */
 package org.badudfs.functionclasses2.StringFunctions;
 
-import org.apache.daffodil.udf.UserDefinedFunction;
-import org.apache.daffodil.udf.UserDefinedFunctionIdentification;
+import org.apache.daffodil.api.udf.UserDefinedFunction;
+import org.apache.daffodil.api.udf.UserDefinedFunctionIdentification;
 
 /**
  * UDF for userDefinedFunctionClasses array on Negative Unit test
diff --git 
a/daffodil-udf/src/test/java/org/badudfs/functionclasses2/StringFunctions/META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider
 
b/daffodil-udf/src/test/java/org/badudfs/functionclasses2/StringFunctions/META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider
similarity index 100%
rename from 
daffodil-udf/src/test/java/org/badudfs/functionclasses2/StringFunctions/META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider
rename to 
daffodil-udf/src/test/java/org/badudfs/functionclasses2/StringFunctions/META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider
diff --git 
a/daffodil-udf/src/test/java/org/badudfs/functionclasses2/StringFunctions/Replace.java
 
b/daffodil-udf/src/test/java/org/badudfs/functionclasses2/StringFunctions/Replace.java
index 1de0c4c26..188900d2d 100644
--- 
a/daffodil-udf/src/test/java/org/badudfs/functionclasses2/StringFunctions/Replace.java
+++ 
b/daffodil-udf/src/test/java/org/badudfs/functionclasses2/StringFunctions/Replace.java
@@ -16,8 +16,8 @@
  */
 package org.badudfs.functionclasses2.StringFunctions;
 
-import org.apache.daffodil.udf.UserDefinedFunction;
-import org.apache.daffodil.udf.UserDefinedFunctionIdentification;
+import org.apache.daffodil.api.udf.UserDefinedFunction;
+import org.apache.daffodil.api.udf.UserDefinedFunctionIdentification;
 
 /**
  * UDF for userDefinedFunctionClasses array on Negative Unit test
diff --git 
a/daffodil-udf/src/test/java/org/badudfs/functionclasses2/StringFunctions/StringFunctionsProvider.java
 
b/daffodil-udf/src/test/java/org/badudfs/functionclasses2/StringFunctions/StringFunctionsProvider.java
index 984dbdfbc..29f64f524 100644
--- 
a/daffodil-udf/src/test/java/org/badudfs/functionclasses2/StringFunctions/StringFunctionsProvider.java
+++ 
b/daffodil-udf/src/test/java/org/badudfs/functionclasses2/StringFunctions/StringFunctionsProvider.java
@@ -16,16 +16,16 @@
  */
 package org.badudfs.functionclasses2.StringFunctions;
 
-import org.apache.daffodil.udf.UserDefinedFunctionProvider;
+import org.apache.daffodil.api.udf.UserDefinedFunctionProvider;
 
 /**
  * UDF Provider for Negative Unit test
- *
+ * <p>
  * userDefinedFunctionClasses array is empty
  */
 public class StringFunctionsProvider extends UserDefinedFunctionProvider {
   @Override
   public Class<?>[] getUserDefinedFunctionClasses() {
-    return new Class<?>[] {};
+    return new Class<?>[]{};
   }
 }
diff --git 
a/daffodil-udf/src/test/java/org/badudfs/nonUDF/StringFunctions/FuncA.java 
b/daffodil-udf/src/test/java/org/badudfs/nonUDF/StringFunctions/FuncA.java
index d997c7166..1dc21fef5 100644
--- a/daffodil-udf/src/test/java/org/badudfs/nonUDF/StringFunctions/FuncA.java
+++ b/daffodil-udf/src/test/java/org/badudfs/nonUDF/StringFunctions/FuncA.java
@@ -16,11 +16,11 @@
  */
 package org.badudfs.nonUDF.StringFunctions;
 
-import org.apache.daffodil.udf.UserDefinedFunctionIdentification;
+import org.apache.daffodil.api.udf.UserDefinedFunctionIdentification;
 
 /**
  * UDF for implementing UserDefinedFunction Negative Unit test
- *
+ * <p>
  * Does not implement UserDefinedFunction or Serializable interface
  */
 @UserDefinedFunctionIdentification(
diff --git 
a/daffodil-udf/src/test/java/org/badudfs/nonUDF/StringFunctions/META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider
 
b/daffodil-udf/src/test/java/org/badudfs/nonUDF/StringFunctions/META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider
similarity index 100%
rename from 
daffodil-udf/src/test/java/org/badudfs/nonUDF/StringFunctions/META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider
rename to 
daffodil-udf/src/test/java/org/badudfs/nonUDF/StringFunctions/META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider
diff --git 
a/daffodil-udf/src/test/java/org/badudfs/nonUDF/StringFunctions/Replace.java 
b/daffodil-udf/src/test/java/org/badudfs/nonUDF/StringFunctions/Replace.java
index 46f548400..8aa6731b2 100644
--- a/daffodil-udf/src/test/java/org/badudfs/nonUDF/StringFunctions/Replace.java
+++ b/daffodil-udf/src/test/java/org/badudfs/nonUDF/StringFunctions/Replace.java
@@ -18,11 +18,11 @@ package org.badudfs.nonUDF.StringFunctions;
 
 import java.io.Serializable;
 
-import org.apache.daffodil.udf.UserDefinedFunctionIdentification;
+import org.apache.daffodil.api.udf.UserDefinedFunctionIdentification;
 
 /**
  * UDF for implementing UserDefinedFunction Negative Unit test
- *
+ * <p>
  * Does not implement UserDefinedFunction interface but implements Serializable
  */
 @UserDefinedFunctionIdentification(
diff --git 
a/daffodil-udf/src/test/java/org/badudfs/nonUDF/StringFunctions/StringFunctionsProvider.java
 
b/daffodil-udf/src/test/java/org/badudfs/nonUDF/StringFunctions/StringFunctionsProvider.java
index a2631d27e..b43387595 100644
--- 
a/daffodil-udf/src/test/java/org/badudfs/nonUDF/StringFunctions/StringFunctionsProvider.java
+++ 
b/daffodil-udf/src/test/java/org/badudfs/nonUDF/StringFunctions/StringFunctionsProvider.java
@@ -16,12 +16,12 @@
  */
 package org.badudfs.nonUDF.StringFunctions;
 
-import org.apache.daffodil.udf.UserDefinedFunction;
-import org.apache.daffodil.udf.UserDefinedFunctionProvider;
+import org.apache.daffodil.api.udf.UserDefinedFunction;
+import org.apache.daffodil.api.udf.UserDefinedFunctionProvider;
 
 /**
  * UDF Provider for Negative Unit test
- *
+ * <p>
  * Contains classes that don't implement UserDefinedFunction interface
  */
 public class StringFunctionsProvider extends UserDefinedFunctionProvider {
@@ -32,18 +32,18 @@ public class StringFunctionsProvider extends 
UserDefinedFunctionProvider {
     String nn = String.join("_", namespace, name);
 
     switch (nn) {
-    case "http://example.com/badudfs/StringFunctions_replace":
-      functionClass = (UserDefinedFunction) new Replace();
-      break;
-    case "http://example.com/badudfs/StringFunctions_funcA":
-      functionClass = (UserDefinedFunction) new FuncA();
-      break;
+      case "http://example.com/badudfs/StringFunctions_replace":
+        functionClass = (UserDefinedFunction) new Replace();
+        break;
+      case "http://example.com/badudfs/StringFunctions_funcA":
+        functionClass = (UserDefinedFunction) new FuncA();
+        break;
     }
     return functionClass;
   }
 
   @Override
   public Class<?>[] getUserDefinedFunctionClasses() {
-    return new Class<?>[] { FuncA.class, Replace.class };
+    return new Class<?>[]{FuncA.class, Replace.class};
   }
 }
diff --git 
a/daffodil-udf/src/test/java/org/jgoodudfs/example/StringFunctions/Compare.java 
b/daffodil-udf/src/test/java/org/jgoodudfs/example/StringFunctions/Compare.java
index d55d7b83f..e56588116 100644
--- 
a/daffodil-udf/src/test/java/org/jgoodudfs/example/StringFunctions/Compare.java
+++ 
b/daffodil-udf/src/test/java/org/jgoodudfs/example/StringFunctions/Compare.java
@@ -16,12 +16,11 @@
  */
 package org.jgoodudfs.example.StringFunctions;
 
-import org.apache.daffodil.udf.UserDefinedFunction;
-import org.apache.daffodil.udf.UserDefinedFunctionIdentification;
+import org.apache.daffodil.api.udf.UserDefinedFunction;
+import org.apache.daffodil.api.udf.UserDefinedFunctionIdentification;
 
 /**
  * Example User Defined Function in Java
- *
  */
 @SuppressWarnings("serial")
 @UserDefinedFunctionIdentification(
diff --git 
a/daffodil-udf/src/test/java/org/jgoodudfs/example/StringFunctions/Replace.java 
b/daffodil-udf/src/test/java/org/jgoodudfs/example/StringFunctions/Replace.java
index 1115fa6b7..e4b85afe4 100644
--- 
a/daffodil-udf/src/test/java/org/jgoodudfs/example/StringFunctions/Replace.java
+++ 
b/daffodil-udf/src/test/java/org/jgoodudfs/example/StringFunctions/Replace.java
@@ -16,12 +16,11 @@
  */
 package org.jgoodudfs.example.StringFunctions;
 
-import org.apache.daffodil.udf.UserDefinedFunction;
-import org.apache.daffodil.udf.UserDefinedFunctionIdentification;
+import org.apache.daffodil.api.udf.UserDefinedFunction;
+import org.apache.daffodil.api.udf.UserDefinedFunctionIdentification;
 
 /**
  * Example User Defined Function in Java
- *
  */
 @SuppressWarnings("serial")
 @UserDefinedFunctionIdentification(
diff --git 
a/daffodil-udf/src/test/java/org/jgoodudfs/example/StringFunctions/StringFunctionsProvider.java
 
b/daffodil-udf/src/test/java/org/jgoodudfs/example/StringFunctions/StringFunctionsProvider.java
index 98e38c9f1..d1c60a4f6 100644
--- 
a/daffodil-udf/src/test/java/org/jgoodudfs/example/StringFunctions/StringFunctionsProvider.java
+++ 
b/daffodil-udf/src/test/java/org/jgoodudfs/example/StringFunctions/StringFunctionsProvider.java
@@ -16,16 +16,15 @@
  */
 package org.jgoodudfs.example.StringFunctions;
 
-import org.apache.daffodil.udf.UserDefinedFunctionProvider;
+import org.apache.daffodil.api.udf.UserDefinedFunctionProvider;
 
 /**
  * Example User Defined Function Provider in Java
- *
  */
 public class StringFunctionsProvider extends UserDefinedFunctionProvider {
 
   @Override
   public Class<?>[] getUserDefinedFunctionClasses() {
-    return new Class<?>[] { Replace.class, Compare.class };
+    return new Class<?>[]{Replace.class, Compare.class};
   }
 }
diff --git 
a/daffodil-udf/src/test/resources/org/badmetainf/nonexistentclass/META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider
 
b/daffodil-udf/src/test/resources/org/badmetainf/nonexistentclass/META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider
similarity index 100%
rename from 
daffodil-udf/src/test/resources/org/badmetainf/nonexistentclass/META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider
rename to 
daffodil-udf/src/test/resources/org/badmetainf/nonexistentclass/META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider
diff --git 
a/daffodil-udf/src/test/resources/org/goodmetainf/IntegerFunctions/META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider
 
b/daffodil-udf/src/test/resources/org/goodmetainf/IntegerFunctions/META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider
similarity index 100%
rename from 
daffodil-udf/src/test/resources/org/goodmetainf/IntegerFunctions/META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider
rename to 
daffodil-udf/src/test/resources/org/goodmetainf/IntegerFunctions/META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider
diff --git 
a/daffodil-udf/src/test/resources/org/goodmetainf/StringFunctions/META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider
 
b/daffodil-udf/src/test/resources/org/goodmetainf/StringFunctions/META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider
similarity index 100%
rename from 
daffodil-udf/src/test/resources/org/goodmetainf/StringFunctions/META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider
rename to 
daffodil-udf/src/test/resources/org/goodmetainf/StringFunctions/META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider
diff --git 
a/daffodil-udf/src/test/scala/org/sbadudfs/functionclasses/StringFunctions/META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider
 
b/daffodil-udf/src/test/scala/org/sbadudfs/functionclasses/StringFunctions/META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider
similarity index 100%
rename from 
daffodil-udf/src/test/scala/org/sbadudfs/functionclasses/StringFunctions/META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider
rename to 
daffodil-udf/src/test/scala/org/sbadudfs/functionclasses/StringFunctions/META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider
diff --git 
a/daffodil-udf/src/test/scala/org/sbadudfs/functionclasses/StringFunctions/StringFunctionsProvider.scala
 
b/daffodil-udf/src/test/scala/org/sbadudfs/functionclasses/StringFunctions/StringFunctionsProvider.scala
index 78c794a19..98521cdb1 100644
--- 
a/daffodil-udf/src/test/scala/org/sbadudfs/functionclasses/StringFunctions/StringFunctionsProvider.scala
+++ 
b/daffodil-udf/src/test/scala/org/sbadudfs/functionclasses/StringFunctions/StringFunctionsProvider.scala
@@ -16,9 +16,9 @@
  */
 package org.sbadudfs.functionclasses.StringFunctions
 
-import org.apache.daffodil.udf.UserDefinedFunction
-import org.apache.daffodil.udf.UserDefinedFunctionIdentification
-import org.apache.daffodil.udf.UserDefinedFunctionProvider
+import org.apache.daffodil.api.udf.UserDefinedFunction
+import org.apache.daffodil.api.udf.UserDefinedFunctionIdentification
+import org.apache.daffodil.api.udf.UserDefinedFunctionProvider
 
 /**
  * UDF Provider for Negative Unit test
diff --git 
a/daffodil-udf/src/test/scala/org/sbadudfs/functionclasses2/StringFunctions/META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider
 
b/daffodil-udf/src/test/scala/org/sbadudfs/functionclasses2/StringFunctions/META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider
similarity index 100%
rename from 
daffodil-udf/src/test/scala/org/sbadudfs/functionclasses2/StringFunctions/META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider
rename to 
daffodil-udf/src/test/scala/org/sbadudfs/functionclasses2/StringFunctions/META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider
diff --git 
a/daffodil-udf/src/test/scala/org/sbadudfs/functionclasses2/StringFunctions/StringFunctionsProvider.scala
 
b/daffodil-udf/src/test/scala/org/sbadudfs/functionclasses2/StringFunctions/StringFunctionsProvider.scala
index d94cb3fd0..8bd156218 100644
--- 
a/daffodil-udf/src/test/scala/org/sbadudfs/functionclasses2/StringFunctions/StringFunctionsProvider.scala
+++ 
b/daffodil-udf/src/test/scala/org/sbadudfs/functionclasses2/StringFunctions/StringFunctionsProvider.scala
@@ -18,9 +18,9 @@ package org.sbadudfs.functionclasses2.StringFunctions
 
 import java.io.Serializable
 
-import org.apache.daffodil.udf.UserDefinedFunction
-import org.apache.daffodil.udf.UserDefinedFunctionIdentification
-import org.apache.daffodil.udf.UserDefinedFunctionProvider
+import org.apache.daffodil.api.udf.UserDefinedFunction
+import org.apache.daffodil.api.udf.UserDefinedFunctionIdentification
+import org.apache.daffodil.api.udf.UserDefinedFunctionProvider
 
 /**
  * UDF Provider for Negative Unit test
diff --git 
a/daffodil-udf/src/test/scala/org/sbadudfs/udfexceptions/evaluating/StringFunctions/META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider
 
b/daffodil-udf/src/test/scala/org/sbadudfs/udfexceptions/evaluating/StringFunctions/META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider
similarity index 100%
rename from 
daffodil-udf/src/test/scala/org/sbadudfs/udfexceptions/evaluating/StringFunctions/META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider
rename to 
daffodil-udf/src/test/scala/org/sbadudfs/udfexceptions/evaluating/StringFunctions/META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider
diff --git 
a/daffodil-udf/src/test/scala/org/sbadudfs/udfexceptions/evaluating/StringFunctions/StringFunctionsProvider.scala
 
b/daffodil-udf/src/test/scala/org/sbadudfs/udfexceptions/evaluating/StringFunctions/StringFunctionsProvider.scala
index 9eb7caf30..1b7b0cd31 100644
--- 
a/daffodil-udf/src/test/scala/org/sbadudfs/udfexceptions/evaluating/StringFunctions/StringFunctionsProvider.scala
+++ 
b/daffodil-udf/src/test/scala/org/sbadudfs/udfexceptions/evaluating/StringFunctions/StringFunctionsProvider.scala
@@ -16,10 +16,10 @@
  */
 package org.sbadudfs.udfexceptions.evaluating.StringFunctions
 
-import org.apache.daffodil.udf.UserDefinedFunction
-import org.apache.daffodil.udf.UserDefinedFunctionIdentification
-import org.apache.daffodil.udf.UserDefinedFunctionProvider
-import org.apache.daffodil.udf.exceptions.UserDefinedFunctionProcessingError
+import org.apache.daffodil.api.udf.UserDefinedFunction
+import org.apache.daffodil.api.udf.UserDefinedFunctionIdentification
+import org.apache.daffodil.api.udf.UserDefinedFunctionProvider
+import 
org.apache.daffodil.api.udf.exceptions.UserDefinedFunctionProcessingError
 
 /**
  * UDF Provider for Negative Unit test
diff --git 
a/daffodil-udf/src/test/scala/org/sbadudfs/udfexceptions2/StringFunctions/META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider
 
b/daffodil-udf/src/test/scala/org/sbadudfs/udfexceptions2/StringFunctions/META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider
similarity index 100%
rename from 
daffodil-udf/src/test/scala/org/sbadudfs/udfexceptions2/StringFunctions/META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider
rename to 
daffodil-udf/src/test/scala/org/sbadudfs/udfexceptions2/StringFunctions/META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider
diff --git 
a/daffodil-udf/src/test/scala/org/sbadudfs/udfexceptions2/StringFunctions/StringFunctionsProvider.scala
 
b/daffodil-udf/src/test/scala/org/sbadudfs/udfexceptions2/StringFunctions/StringFunctionsProvider.scala
index 62dfe4717..7f0820155 100644
--- 
a/daffodil-udf/src/test/scala/org/sbadudfs/udfexceptions2/StringFunctions/StringFunctionsProvider.scala
+++ 
b/daffodil-udf/src/test/scala/org/sbadudfs/udfexceptions2/StringFunctions/StringFunctionsProvider.scala
@@ -16,9 +16,9 @@
  */
 package org.sbadudfs.udfexceptions2.StringFunctions
 
-import org.apache.daffodil.udf.UserDefinedFunction
-import org.apache.daffodil.udf.UserDefinedFunctionIdentification
-import org.apache.daffodil.udf.UserDefinedFunctionProvider
+import org.apache.daffodil.api.udf.UserDefinedFunction
+import org.apache.daffodil.api.udf.UserDefinedFunctionIdentification
+import org.apache.daffodil.api.udf.UserDefinedFunctionProvider
 
 /**
  * UDF Provider for Negative Unit test
diff --git 
a/daffodil-udf/src/test/scala/org/sbadudfs/udfpexceptions/StringFunctions/META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider
 
b/daffodil-udf/src/test/scala/org/sbadudfs/udfpexceptions/StringFunctions/META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider
similarity index 100%
rename from 
daffodil-udf/src/test/scala/org/sbadudfs/udfpexceptions/StringFunctions/META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider
rename to 
daffodil-udf/src/test/scala/org/sbadudfs/udfpexceptions/StringFunctions/META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider
diff --git 
a/daffodil-udf/src/test/scala/org/sbadudfs/udfpexceptions/StringFunctions/StringFunctionsProvider.scala
 
b/daffodil-udf/src/test/scala/org/sbadudfs/udfpexceptions/StringFunctions/StringFunctionsProvider.scala
index 1b975aef6..86931a212 100644
--- 
a/daffodil-udf/src/test/scala/org/sbadudfs/udfpexceptions/StringFunctions/StringFunctionsProvider.scala
+++ 
b/daffodil-udf/src/test/scala/org/sbadudfs/udfpexceptions/StringFunctions/StringFunctionsProvider.scala
@@ -16,9 +16,9 @@
  */
 package org.sbadudfs.udfpexceptions.StringFunctions
 
-import org.apache.daffodil.udf.UserDefinedFunction
-import org.apache.daffodil.udf.UserDefinedFunctionIdentification
-import org.apache.daffodil.udf.UserDefinedFunctionProvider
+import org.apache.daffodil.api.udf.UserDefinedFunction
+import org.apache.daffodil.api.udf.UserDefinedFunctionIdentification
+import org.apache.daffodil.api.udf.UserDefinedFunctionProvider
 
 /**
  * UDF Provider for Negative Unit test
diff --git 
a/daffodil-udf/src/test/scala/org/sbadudfs/udfpexceptions2/StringFunctions/META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider
 
b/daffodil-udf/src/test/scala/org/sbadudfs/udfpexceptions2/StringFunctions/META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider
similarity index 100%
rename from 
daffodil-udf/src/test/scala/org/sbadudfs/udfpexceptions2/StringFunctions/META-INF/services/org.apache.daffodil.udf.UserDefinedFunctionProvider
rename to 
daffodil-udf/src/test/scala/org/sbadudfs/udfpexceptions2/StringFunctions/META-INF/services/org.apache.daffodil.api.udf.UserDefinedFunctionProvider
diff --git 
a/daffodil-udf/src/test/scala/org/sbadudfs/udfpexceptions2/StringFunctions/StringFunctionsProvider.scala
 
b/daffodil-udf/src/test/scala/org/sbadudfs/udfpexceptions2/StringFunctions/StringFunctionsProvider.scala
index b8cddf0df..74d2f778d 100644
--- 
a/daffodil-udf/src/test/scala/org/sbadudfs/udfpexceptions2/StringFunctions/StringFunctionsProvider.scala
+++ 
b/daffodil-udf/src/test/scala/org/sbadudfs/udfpexceptions2/StringFunctions/StringFunctionsProvider.scala
@@ -16,9 +16,9 @@
  */
 package org.sbadudfs.udfpexceptions2.StringFunctions
 
-import org.apache.daffodil.udf.UserDefinedFunction
-import org.apache.daffodil.udf.UserDefinedFunctionIdentification
-import org.apache.daffodil.udf.UserDefinedFunctionProvider
+import org.apache.daffodil.api.udf.UserDefinedFunction
+import org.apache.daffodil.api.udf.UserDefinedFunctionIdentification
+import org.apache.daffodil.api.udf.UserDefinedFunctionProvider
 
 /**
  * UDF Provider for Negative Unit test
diff --git 
a/daffodil-udf/src/test/scala/org/sgoodudfs/example/IntegerFunctions/IntegerFunctionsProvider.scala
 
b/daffodil-udf/src/test/scala/org/sgoodudfs/example/IntegerFunctions/IntegerFunctionsProvider.scala
index 181ae0883..d2eee794f 100644
--- 
a/daffodil-udf/src/test/scala/org/sgoodudfs/example/IntegerFunctions/IntegerFunctionsProvider.scala
+++ 
b/daffodil-udf/src/test/scala/org/sgoodudfs/example/IntegerFunctions/IntegerFunctionsProvider.scala
@@ -16,9 +16,9 @@
  */
 package org.sgoodudfs.example.IntegerFunctions
 
-import org.apache.daffodil.udf.UserDefinedFunction
-import org.apache.daffodil.udf.UserDefinedFunctionIdentification
-import org.apache.daffodil.udf.UserDefinedFunctionProvider
+import org.apache.daffodil.api.udf.UserDefinedFunction
+import org.apache.daffodil.api.udf.UserDefinedFunctionIdentification
+import org.apache.daffodil.api.udf.UserDefinedFunctionProvider
 
 /**
  * Example User Defined Function Provider in Scala
diff --git 
a/daffodil-udf/src/test/scala/org/sgoodudfs/example/StringFunctions/StringFunctionsProvider.scala
 
b/daffodil-udf/src/test/scala/org/sgoodudfs/example/StringFunctions/StringFunctionsProvider.scala
index 0d156c940..40911e803 100644
--- 
a/daffodil-udf/src/test/scala/org/sgoodudfs/example/StringFunctions/StringFunctionsProvider.scala
+++ 
b/daffodil-udf/src/test/scala/org/sgoodudfs/example/StringFunctions/StringFunctionsProvider.scala
@@ -16,9 +16,9 @@
  */
 package org.sgoodudfs.example.StringFunctions
 
-import org.apache.daffodil.udf.UserDefinedFunction
-import org.apache.daffodil.udf.UserDefinedFunctionIdentification
-import org.apache.daffodil.udf.UserDefinedFunctionProvider
+import org.apache.daffodil.api.udf.UserDefinedFunction
+import org.apache.daffodil.api.udf.UserDefinedFunctionIdentification
+import org.apache.daffodil.api.udf.UserDefinedFunctionProvider
 
 /**
  * Example User Defined Function Provider in Scala
diff --git 
a/daffodil-udf/src/test/scala/org/sgoodudfs/example/SupportedTypesFunctions/SupportedTypesFunctionsProvider.scala
 
b/daffodil-udf/src/test/scala/org/sgoodudfs/example/SupportedTypesFunctions/SupportedTypesFunctionsProvider.scala
index 1bf2fd275..9a637113a 100644
--- 
a/daffodil-udf/src/test/scala/org/sgoodudfs/example/SupportedTypesFunctions/SupportedTypesFunctionsProvider.scala
+++ 
b/daffodil-udf/src/test/scala/org/sgoodudfs/example/SupportedTypesFunctions/SupportedTypesFunctionsProvider.scala
@@ -16,9 +16,9 @@
  */
 package org.sgoodudfs.example.SupportedTypesFunctions
 
-import org.apache.daffodil.udf.UserDefinedFunction
-import org.apache.daffodil.udf.UserDefinedFunctionIdentification
-import org.apache.daffodil.udf.UserDefinedFunctionProvider
+import org.apache.daffodil.api.udf.UserDefinedFunction
+import org.apache.daffodil.api.udf.UserDefinedFunctionIdentification
+import org.apache.daffodil.api.udf.UserDefinedFunctionProvider
 
 /**
  * UDF Provider for Types Unit testing

Reply via email to