You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@santuario.apache.org by co...@apache.org on 2023/06/13 08:30:50 UTC

[santuario-xml-security-java] branch main updated: Cleanups in tests (#176)

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

coheigea pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/santuario-xml-security-java.git


The following commit(s) were added to refs/heads/main by this push:
     new 53205c8e Cleanups in tests (#176)
53205c8e is described below

commit 53205c8e9b43b0a62db351a06e22a45fd4f99b3d
Author: David Matějček <da...@omnifish.ee>
AuthorDate: Tue Jun 13 10:30:43 2023 +0200

    Cleanups in tests (#176)
    
    - Created XmlSecTestEnvironment to manage filesystem dependency
    - Fixed many IO leaks in tests - unclosed streams
    - Fixed VersionTest
    - Moved javax tests to a subpackage; it fixed issues with java modules.
    
    Signed-off-by: David Matějček <da...@omnifish.ee>
---
 .../org/apache/xml/security/utils/XMLUtils.java    |  94 +++++++++--
 .../xml/crypto/test/dsig/ClassLoaderTest.java      | 134 ---------------
 .../xml/security/test/XmlSecTestEnvironment.java   | 123 ++++++++++++++
 .../dom/c14n/implementations/Bug45961Test.java     |  18 +-
 .../c14n/implementations/Canonicalizer11Test.java  |  89 +++++-----
 .../Canonicalizer20010315ExclusiveTest.java        |  89 ++++------
 .../implementations/Canonicalizer20010315Test.java |  58 ++++---
 .../implementations/ExclusiveC14NInteropTest.java  |  27 +--
 .../test/dom/encryption/BaltimoreEncTest.java      | 115 ++++++-------
 .../test/dom/encryption/XMLEncryption11Test.java   | 182 ++++-----------------
 .../security/test/dom/interop/BaltimoreTest.java   |  84 +++++-----
 .../test/dom/interop/BaltimoreXalanTest.java       |  60 +++----
 .../xml/security/test/dom/interop/IAIKTest.java    |  69 ++++----
 .../xml/security/test/dom/interop/IBMTest.java     |  46 +++---
 .../security/test/dom/interop/InteropTestBase.java |  61 +++----
 .../security/test/dom/interop/RSASecurityTest.java |  26 +--
 .../test/dom/keys/DEREncodedKeyValueTest.java      |  22 +--
 .../test/dom/keys/KeyInfoReferenceTest.java        |  13 +-
 .../keys/content/x509/XMLX509CertificateTest.java  |  43 ++---
 .../dom/keys/content/x509/XMLX509DigestTest.java   |  22 +--
 .../test/dom/keys/content/x509/XMLX509SKITest.java |  18 +-
 .../keys/content/x509/XMLX509SubjectNameTest.java  |  19 +--
 .../keyresolver/KeyInfoReferenceResolverTest.java  |  24 +--
 .../test/dom/keys/keyresolver/KeyResolverTest.java |  10 +-
 .../keyresolver/RetrievalMethodResolverTest.java   |  26 +--
 .../keys/keyresolver/X509DigestResolverTest.java   |  24 +--
 .../dom/keys/storage/KeyStoreResolverTest.java     |  15 +-
 .../test/dom/keys/storage/StorageResolverTest.java |  21 +--
 .../dom/secure_val/ForbiddenAlgorithmTest.java     |  30 +---
 .../test/dom/secure_val/ForbiddenRefCountTest.java |  36 +---
 .../dom/secure_val/ForbiddenReferenceTest.java     |  33 +---
 .../secure_val/ForbiddenRetrievalMethodTest.java   |  14 +-
 .../test/dom/secure_val/WrappingAttackTest.java    |  59 ++-----
 .../test/dom/signature/CreateSignatureTest.java    |  34 +---
 .../dom/signature/CreateSignatureXalanTest.java    | 136 +++------------
 .../test/dom/signature/ECDSASignatureTest.java     |  14 +-
 .../test/dom/signature/EDDSASignatureTest.java     |  29 ++--
 .../test/dom/signature/HMACOutputLengthTest.java   |  27 +--
 .../test/dom/signature/InvalidKeyTest.java         |  21 +--
 .../security/test/dom/signature/KeyValueTest.java  |  23 +--
 .../security/test/dom/signature/NoKeyInfoTest.java |  26 +--
 .../PreCalculatedDigestSignatureTest.java          |  62 +++----
 .../dom/signature/ProcessingInstructionTest.java   |  28 ++--
 .../test/dom/signature/Santuario499Test.java       |   3 -
 .../test/dom/signature/SignatureReferenceTest.java |  41 ++---
 .../security/test/dom/signature/SignatureTest.java |  36 +---
 .../dom/signature/UnknownAlgoSignatureTest.java    |  36 ++--
 .../security/test/dom/signature/X509DataTest.java  |  18 +-
 .../test/dom/signature/XMLSignatureInputTest.java  |   3 -
 .../dom/signature/XPointerResourceResolver.java    |   4 +-
 .../security/test/dom/signature/XmlSecTest.java    |  16 +-
 .../implementations/TransformXSLTTest.java         |  39 ++---
 .../test/dom/utils/JDKXPathFactoryTest.java        |   5 +-
 .../test/dom/utils/resolver/OfflineResolver.java   |  27 +--
 .../dom/utils/resolver/ResourceResolverTest.java   |  10 +-
 .../xml/security/test/dom/xalan/XalanXPathAPI.java |   5 +-
 .../xml/crypto}/KeySelectorExceptionTest.java      |   2 +-
 .../test/javax/xml/crypto}/KeySelectorTest.java    |   2 +-
 .../test/javax/xml/crypto}/KeySelectors.java       |   2 +-
 .../javax/xml/crypto}/OctetStreamDataTest.java     |   2 +-
 .../security/test/javax/xml/crypto}/dsig/AppA.java |   2 +-
 .../security/test/javax/xml/crypto}/dsig/AppB.java |   2 +-
 .../javax/xml/crypto}/dsig/Baltimore18Test.java    |  18 +-
 .../javax/xml/crypto}/dsig/Baltimore23Test.java    |  13 +-
 .../xml/crypto}/dsig/Baltimore23XalanTest.java     |  30 ++--
 .../xml/crypto}/dsig/BaltimoreExcC14n1Test.java    |  24 +--
 .../javax/xml/crypto}/dsig/BaltimoreIaik2Test.java |  22 +--
 .../dsig/BaltimoreXPathFilter2ThreeTest.java       |  18 +-
 .../test/javax/xml/crypto}/dsig/C14N11Test.java    |  27 ++-
 .../crypto}/dsig/CanonicalizationMethodTest.java   |   2 +-
 .../javax/xml/crypto/dsig/ClassLoaderTest.java     | 118 +++++++++++++
 .../javax/xml/crypto}/dsig/ComRSASecurityTest.java |  26 ++-
 .../xml/crypto}/dsig/CreateBaltimore23Test.java    | 143 ++++++++--------
 .../xml/crypto}/dsig/CreateInteropExcC14NTest.java |  64 +++++---
 .../crypto}/dsig/CreateInteropXFilter2Test.java    |  66 +++++---
 .../crypto}/dsig/CreateInteropXMLDSig11Test.java   |   5 +-
 .../xml/crypto}/dsig/CreatePhaosXMLDSig3Test.java  |   4 +-
 .../test/javax/xml/crypto}/dsig/DetachedTest.java  |   2 +-
 .../javax/xml/crypto}/dsig/DigestMethodTest.java   |   2 +-
 .../test/javax/xml/crypto}/dsig/Driver.java        |   2 +-
 .../javax/xml/crypto}/dsig/EdDSATestAbstract.java  |   4 +-
 .../xml/crypto}/dsig/EnvelopingSignatureTest.java  |   2 +-
 .../crypto}/dsig/HMACSignatureAlgorithmTest.java   |   4 +-
 .../xml/crypto}/dsig/IaikCoreFeaturesTest.java     |  61 ++++---
 .../xml/crypto}/dsig/IaikSignatureAlgosTest.java   |  22 ++-
 .../javax/xml/crypto}/dsig/IaikTransformsTest.java |  22 +--
 .../javax/xml/crypto}/dsig/InteropC14nTest.java    |  27 ++-
 .../xml/crypto}/dsig/InteropXMLDSig11Test.java     |  18 +-
 .../xml/crypto}/dsig/JSRForbiddenRefCountTest.java |  22 +--
 .../crypto}/dsig/JSRForbiddenReferenceTest.java    |  15 +-
 .../xml/crypto}/dsig/JSRWrappingAttackTest.java    |  18 +-
 .../dsig/LocalHttpCacheURIDereferencer.java        |  45 +++--
 .../test/javax/xml/crypto}/dsig/ManifestTest.java  |   2 +-
 .../xml/crypto}/dsig/PKSignatureAlgorithmTest.java |   4 +-
 .../javax/xml/crypto}/dsig/PhaosXMLDSig3Test.java  |  14 +-
 .../xml/crypto}/dsig/PhaosXMLDSig3XalanTest.java   |  31 ++--
 .../test/javax/xml/crypto}/dsig/ReferenceTest.java |   2 +-
 .../javax/xml/crypto}/dsig/SecureXSLTTest.java     |  56 +++----
 .../crypto}/dsig/SignatureDigestMethodTest.java    |   4 +-
 .../xml/crypto}/dsig/SignatureMethodTest.java      |   2 +-
 .../xml/crypto}/dsig/SignaturePropertiesTest.java  |   2 +-
 .../xml/crypto}/dsig/SignaturePropertyTest.java    |   2 +-
 .../javax/xml/crypto}/dsig/SignatureValidator.java |  95 ++++++-----
 .../crypto}/dsig/SignatureValidatorEdDSATest.java  |  14 +-
 .../javax/xml/crypto}/dsig/SignedInfoTest.java     |   2 +-
 .../test/javax/xml/crypto}/dsig/TestUtils.java     |   2 +-
 .../test/javax/xml/crypto}/dsig/TransformTest.java |   2 +-
 .../xml/crypto}/dsig/ValidateSignatureTest.java    |  33 ++--
 .../javax/xml/crypto}/dsig/X509KeySelector.java    |   2 +-
 .../test/javax/xml/crypto}/dsig/XMLObjectTest.java |   2 +-
 .../javax/xml/crypto}/dsig/XMLSignContextTest.java |   2 +-
 .../xml/crypto}/dsig/XMLSignatureEdDSATest.java    |  47 +++---
 .../xml/crypto}/dsig/XMLSignatureFactoryTest.java  |  40 +++--
 .../javax/xml/crypto}/dsig/XMLSignatureTest.java   |  79 +++++----
 .../xml/crypto}/dsig/XMLValidateContextTest.java   |   2 +-
 .../crypto}/dsig/dom/DOMValidateContextTest.java   |  18 +-
 .../crypto}/dsig/keyinfo/KeyInfoFactoryTest.java   |   2 +-
 .../xml/crypto}/dsig/keyinfo/KeyInfoTest.java      |   2 +-
 .../xml/crypto}/dsig/keyinfo/KeyNameTest.java      |   2 +-
 .../xml/crypto}/dsig/keyinfo/KeyValueTest.java     |   2 +-
 .../xml/crypto}/dsig/keyinfo/PGPDataTest.java      |   2 +-
 .../crypto}/dsig/keyinfo/RetrievalMethodTest.java  |   2 +-
 .../xml/crypto}/dsig/keyinfo/X509DataTest.java     |   2 +-
 .../crypto}/dsig/keyinfo/X509IssuerSerialTest.java |   2 +-
 .../test/stax/InputProcessorChainTest.java         |   7 +-
 .../test/stax/XMLSecurityStreamReaderTest.java     |   7 +-
 .../test/stax/XMLSecurityStreamWriterTest.java     |   2 +-
 .../test/stax/encryption/BaltimoreEncTest.java     |  45 +++--
 .../stax/encryption/EncryptionCreationTest.java    |  50 +++---
 .../encryption/KeyWrapEncryptionCreationTest.java  |  24 +--
 .../SymmetricEncryptionCreationTest.java           |  24 +--
 .../test/stax/encryption/XMLEncryption11Test.java  |   4 +-
 .../signature/AbstractSignatureCreationTest.java   |   7 +-
 .../AbstractSignatureVerificationTest.java         |  10 +-
 .../signature/BaltimoreRemoteReferenceTest.java    |  10 +-
 .../stax/signature/PKSignatureCreationTest.java    |  36 ++--
 .../SignatureCreationReferenceURIResolverTest.java |  45 +++--
 .../test/stax/signature/SignatureCreationTest.java |  86 +++++-----
 .../signature/SignatureDigestCreationTest.java     |  22 +--
 .../stax/signature/SignatureEncryptionTest.java    |  10 +-
 .../stax/signature/SignatureHMACCreationTest.java  |  12 +-
 ...ionReferenceURIResolverRemoteReferenceTest.java |  18 +-
 .../stax/utils/HttpRequestRedirectorProxy.java     |  17 +-
 .../xml/security/test/stax/utils/KeyLoader.java    |  26 ++-
 .../test/stax/utils/XmlReaderToWriter.java         |  26 +--
 .../test}/javax/xml/crypto/dsig/demo.signed.xml    |   0
 .../javax/xml/crypto/dsig/envelopingSignature.xml  |   0
 .../security/test}/javax/xml/crypto/dsig/input.xml |   0
 .../javax/xml/crypto/dsig/invalid-signature.xml    |   0
 .../test}/javax/xml/crypto/dsig/rfc3161.txt        |   0
 ...ture-enveloping-hmac-sha1-trunclen-0-attack.xml |   0
 ...ture-enveloping-hmac-sha1-trunclen-8-attack.xml |   0
 .../dsig/signature-enveloping-rsa-template.xml     |   0
 .../dsig/signature-external-c14n-xmlatrs.xml       |   0
 .../test}/javax/xml/crypto/dsig/signature1.xml     |   0
 .../test}/javax/xml/crypto/dsig/signature2.xml     |   0
 .../test}/javax/xml/crypto/dsig/signature3.xml     |   0
 .../test}/javax/xml/crypto/dsig/xml-stylesheet     |   0
 .../test}/javax/xml/crypto/dsig/xml-stylesheet.b64 |   0
 .../javax/xml/crypto/dsig/xmldsig-xfilter2.xml     |   0
 160 files changed, 1802 insertions(+), 2366 deletions(-)

diff --git a/src/main/java/org/apache/xml/security/utils/XMLUtils.java b/src/main/java/org/apache/xml/security/utils/XMLUtils.java
index 8c72d67c..7b03ed59 100644
--- a/src/main/java/org/apache/xml/security/utils/XMLUtils.java
+++ b/src/main/java/org/apache/xml/security/utils/XMLUtils.java
@@ -18,10 +18,14 @@
  */
 package org.apache.xml.security.utils;
 
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.math.BigInteger;
+import java.nio.file.Files;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.ArrayList;
@@ -37,6 +41,8 @@ import org.apache.xml.security.c14n.InvalidCanonicalizerException;
 import org.apache.xml.security.parser.XMLParser;
 import org.apache.xml.security.parser.XMLParserException;
 import org.apache.xml.security.parser.XMLParserImpl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.w3c.dom.Attr;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -45,6 +51,8 @@ import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 import org.w3c.dom.Text;
 
+import static java.nio.charset.StandardCharsets.UTF_8;
+
 /**
  * DOM and XML accessibility and comfort functions.
  *
@@ -55,8 +63,7 @@ public final class XMLUtils {
             AccessController.doPrivileged(
                     (PrivilegedAction<Boolean>) () -> Boolean.getBoolean("org.apache.xml.security.ignoreLineBreaks"));
 
-    private static final org.slf4j.Logger LOG =
-            org.slf4j.LoggerFactory.getLogger(XMLUtils.class);
+    private static final Logger LOG = LoggerFactory.getLogger(XMLUtils.class);
 
     private static XMLParser xmlParserImpl =
             AccessController.doPrivileged(
@@ -67,7 +74,7 @@ public final class XMLUtils {
                                 return (XMLParser) JavaUtils.newInstanceWithEmptyConstructor(
                                         ClassLoaderUtils.loadClass(xmlParserClass, XMLUtils.class));
                             } catch (ClassNotFoundException | IllegalAccessException | InstantiationException e) {
-                                LOG.error("Error instantiating XMLParser. Falling back to XMLParserImpl");
+                                LOG.error("Error instantiating XMLParser. Falling back to XMLParserImpl", e);
                             }
                         }
                         return new XMLParserImpl();
@@ -142,18 +149,17 @@ public final class XMLUtils {
      * @param rootNode
      * @param result
      * @param exclude
-     * @param com whether comments or not
+     * @param comments whether comments or not
      */
-    public static void getSet(Node rootNode, Set<Node> result, Node exclude, boolean com) {
+    public static void getSet(Node rootNode, Set<Node> result, Node exclude, boolean comments) {
         if (exclude != null && isDescendantOrSelf(exclude, rootNode)) {
             return;
         }
-        getSetRec(rootNode, result, exclude, com);
+        getSetRec(rootNode, result, exclude, comments);
     }
 
-    @SuppressWarnings("fallthrough")
     private static void getSetRec(final Node rootNode, final Set<Node> result,
-                                final Node exclude, final boolean com) {
+                                final Node exclude, final boolean comments) {
         if (rootNode == exclude) {
             return;
         }
@@ -180,11 +186,11 @@ public final class XMLUtils {
                         return;
                     }
                 }
-                getSetRec(r, result, exclude, com);
+                getSetRec(r, result, exclude, comments);
             }
             break;
         case Node.COMMENT_NODE:
-            if (com) {
+            if (comments) {
                 result.add(rootNode);
             }
             break;
@@ -195,6 +201,18 @@ public final class XMLUtils {
         }
     }
 
+    /**
+     * Outputs a DOM tree to a {@link File}.
+     *
+     * @param contextNode root node of the DOM tree
+     * @param outputFile the file to write to
+     * @throws IOException
+     */
+    public static void outputDOM(Node contextNode, File outputFile) throws IOException {
+        try (OutputStream os = new BufferedOutputStream(Files.newOutputStream(outputFile.toPath()), 8192)) {
+            outputDOM(contextNode, os, false);
+        }
+    }
 
     /**
      * Outputs a DOM tree to an {@link OutputStream}.
@@ -203,7 +221,7 @@ public final class XMLUtils {
      * @param os the {@link OutputStream}
      */
     public static void outputDOM(Node contextNode, OutputStream os) {
-        XMLUtils.outputDOM(contextNode, os, false);
+        outputDOM(contextNode, os, false);
     }
 
     /**
@@ -218,13 +236,12 @@ public final class XMLUtils {
     public static void outputDOM(Node contextNode, OutputStream os, boolean addPreamble) {
         try {
             if (addPreamble) {
-                os.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n".getBytes(java.nio.charset.StandardCharsets.UTF_8));
+                os.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n".getBytes(UTF_8));
             }
-
             Canonicalizer.getInstance(
                 Canonicalizer.ALGO_ID_C14N_PHYSICAL).canonicalizeSubtree(contextNode, os);
         } catch (IOException | InvalidCanonicalizerException | CanonicalizationException ex) {
-            LOG.debug(ex.getMessage(), ex);
+            LOG.error(ex.getMessage(), ex);
         }
     }
 
@@ -246,7 +263,7 @@ public final class XMLUtils {
             Canonicalizer.getInstance(
                 Canonicalizer.ALGO_ID_C14N_WITH_COMMENTS).canonicalizeSubtree(contextNode, os);
         } catch (InvalidCanonicalizerException | CanonicalizationException ex) {
-            LOG.debug(ex.getMessage(), ex);
+            LOG.error(ex.getMessage(), ex);
             // throw new RuntimeException(ex.getMessage());
         }
     }
@@ -855,7 +872,7 @@ public final class XMLUtils {
                                 // Continue searching to find duplicates
                                 foundElement = attr.getOwnerElement();
                             } else {
-                                LOG.debug("Multiple elements with the same 'Id' attribute value!");
+                                LOG.warn("Multiple elements with the same 'Id' attribute value!");
                                 return false;
                             }
                         }
@@ -915,7 +932,7 @@ public final class XMLUtils {
                     for (int i = 0; i < length; i++) {
                         Attr attr = (Attr)attributes.item(i);
                         if (attr.isId() && id.equals(attr.getValue()) && se != knownElement) {
-                            LOG.debug("Multiple elements with the same 'Id' attribute value!");
+                            LOG.warn("Multiple elements with the same 'Id' attribute value!");
                             return false;
                         }
                     }
@@ -945,6 +962,49 @@ public final class XMLUtils {
         return true;
     }
 
+    /**
+     * Reads a document from the input stream.
+     *
+     * @param file
+     * @param disallowDocTypeDeclarations
+     * @return {@link Document}
+     * @throws XMLParserException
+     * @throws IOException
+     */
+    public static Document read(File file, boolean disallowDocTypeDeclarations) throws XMLParserException, IOException {
+        try (InputStream inputStream = new BufferedInputStream(Files.newInputStream(file.toPath()), 8192)) {
+            return read(inputStream, disallowDocTypeDeclarations);
+        }
+    }
+
+    /**
+     * Reads a document from the input stream and closes it.
+     *
+     * @param name - resource name to be opened by the class loader
+     * @param loader
+     * @param disallowDocTypeDeclarations
+     * @return {@link Document}
+     * @throws XMLParserException
+     * @throws IOException inputStream.close() failed.
+     */
+    public static Document readResource(String name, ClassLoader loader, boolean disallowDocTypeDeclarations)
+        throws XMLParserException, IOException {
+        // Delegate to XMLParser implementation
+        try (InputStream inputStream = loader.getResourceAsStream(name)) {
+            return read(inputStream, disallowDocTypeDeclarations);
+        }
+
+    }
+
+    /**
+     * Reads a document from the input stream.
+     * Caller is responsible for closing the stream.
+     *
+     * @param inputStream
+     * @param disallowDocTypeDeclarations
+     * @return {@link Document}
+     * @throws XMLParserException
+     */
     public static Document read(InputStream inputStream, boolean disallowDocTypeDeclarations) throws XMLParserException {
         // Delegate to XMLParser implementation
         return xmlParserImpl.parse(inputStream, disallowDocTypeDeclarations);
diff --git a/src/test/java/javax/xml/crypto/test/dsig/ClassLoaderTest.java b/src/test/java/javax/xml/crypto/test/dsig/ClassLoaderTest.java
deleted file mode 100644
index f45c8b04..00000000
--- a/src/test/java/javax/xml/crypto/test/dsig/ClassLoaderTest.java
+++ /dev/null
@@ -1,134 +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 javax.xml.crypto.test.dsig;
-
-import java.lang.reflect.Method;
-import java.io.File;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.security.AccessController;
-import java.security.Provider;
-import java.security.Security;
-
-import javax.xml.crypto.dsig.CanonicalizationMethod;
-import org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI;
-
-/**
- * This test uses more than one classloader to load a class (Driver) that
- * invokes the XMLSignature API. It tests that there are not provider class
- * loading issues with more than one classloader (see 6380953).
- */
-public class ClassLoaderTest {
-
-    private static final org.slf4j.Logger LOG =
-        org.slf4j.LoggerFactory.getLogger(ClassLoaderTest.class);
-
-    @SuppressWarnings("resource")
-    @org.junit.jupiter.api.Test
-    public void testMultipleLoaders() throws Exception {
-
-        String baseDir = System.getProperty("basedir");
-        String fs = System.getProperty("file.separator");
-        File file0 = new File(baseDir + fs + "build" + fs + "classes" + fs);
-        File file1 = new File(baseDir + fs + "build" + fs + "test" + fs);
-        URL[] urls = new URL[2];
-        urls[0] = file0.toURI().toURL();
-        urls[1] = file1.toURI().toURL();
-        URLClassLoader uc1 = new URLClassLoader
-            (urls, Thread.currentThread().getContextClassLoader());
-        URLClassLoader uc2 = new URLClassLoader
-            (urls, Thread.currentThread().getContextClassLoader());
-
-        Class<?> c1 = uc1.loadClass("javax.xml.crypto.test.dsig.Driver");
-        Class<?> c2 = uc2.loadClass("javax.xml.crypto.test.dsig.Driver");
-        Object o1 = c1.newInstance();
-        Object o2 = c2.newInstance();
-        Method m1 = c1.getMethod("dsig", (Class[]) null);
-        Method m2 = c2.getMethod("dsig", (Class[]) null);
-        m1.invoke(o1, (Object[]) null);
-        m2.invoke(o2, (Object[]) null);
-    }
-
-    @SuppressWarnings("resource")
-    @org.junit.jupiter.api.Test
-    public void testProviderMultipleLoaders() throws Exception {
-        String baseDir = System.getProperty("basedir");
-        String fs = System.getProperty("file.separator");
-        File file0 = new File(baseDir + fs + "build" + fs + "classes" + fs);
-        File file1 = new File(baseDir + fs + "build" + fs + "test" + fs);
-        URL[] urls = new URL[2];
-        urls[0] = file0.toURI().toURL();
-        urls[1] = file1.toURI().toURL();
-
-        URLClassLoader uc1 = new URLClassLoader
-            (urls, Thread.currentThread().getContextClassLoader());
-        //load security provider using current class loader
-        final Provider provider = new XMLDSigRI();
-        AccessController.doPrivileged((java.security.PrivilegedAction<Object>)
-            () -> Security.addProvider(provider));
-        // get the provider from java.security.Security using URLClassLoader.
-        // Need to use introspection to invoke methods to avoid using the
-        // current class loader
-        String factoryName = "javax.xml.crypto.dsig.XMLSignatureFactory";
-        Class<?> factoryClass = uc1.loadClass(factoryName);
-        Method factoryMethod = factoryClass.getDeclaredMethod
-            ("getInstance", new Class[]{String.class});
-        Class<?> methodParameterClass = uc1.loadClass
-            ("javax.xml.crypto.dsig.spec.C14NMethodParameterSpec");
-        Method canonicalizationMethod = factoryClass.getDeclaredMethod
-            ("newCanonicalizationMethod",
-                new Class[]{String.class, methodParameterClass});
-        Object factory = factoryMethod.invoke(null, "DOM");
-        long start = System.currentTimeMillis();
-        for (int i = 0; i < 100; i++) {
-            canonicalizationMethod.invoke
-                (factory, new Object[]{CanonicalizationMethod.EXCLUSIVE, null});
-        }
-        long end = System.currentTimeMillis();
-        long elapsed = end-start;
-        LOG.debug("Elapsed: {}", elapsed);
-    }
-
-    @SuppressWarnings("resource")
-    @org.junit.jupiter.api.Test
-    public void testProviderMultipleLoadersTwo() throws Exception {
-
-        String baseDir = System.getProperty("basedir");
-        String fs = System.getProperty("file.separator");
-        File file0 = new File(baseDir + fs + "build" + fs + "classes" + fs);
-        File file1 = new File(baseDir + fs + "build" + fs + "test" + fs);
-        URL[] urls = new URL[2];
-        urls[0] = file0.toURI().toURL();
-        urls[1] = file1.toURI().toURL();
-        URLClassLoader uc1 = new URLClassLoader
-            (urls, Thread.currentThread().getContextClassLoader());
-        URLClassLoader uc2 = new URLClassLoader
-            (urls, Thread.currentThread().getContextClassLoader());
-
-        Class<?> c1 = uc1.loadClass("javax.xml.crypto.test.dsig.AppA");
-        Class<?> c2 = uc2.loadClass("javax.xml.crypto.test.dsig.AppB");
-        Object o1 = c1.newInstance();
-        Object o2 = c2.newInstance();
-        Method m1 = c1.getMethod("dsig", (Class[]) null);
-        Method m2 = c2.getMethod("dsig", (Class[]) null);
-        m1.invoke(o1, (Object[]) null);
-        m2.invoke(o2, (Object[]) null);
-    }
-
-}
diff --git a/src/test/java/org/apache/xml/security/test/XmlSecTestEnvironment.java b/src/test/java/org/apache/xml/security/test/XmlSecTestEnvironment.java
new file mode 100644
index 00000000..e50583b3
--- /dev/null
+++ b/src/test/java/org/apache/xml/security/test/XmlSecTestEnvironment.java
@@ -0,0 +1,123 @@
+/**
+ * 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.xml.security.test;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.security.GeneralSecurityException;
+import java.security.KeyStore;
+
+/**
+ * This class keeps order in files used by tests.
+ * Its purpose is to locate files by specifying relative paths to maven basedir.
+ */
+public final class XmlSecTestEnvironment {
+
+    /** Password to the {@link KeyStore} returned by {@link #getTestKeyStore()} */
+    public static final String TEST_KS_PASSWORD = "changeit";
+
+    private static final Path BASEDIR = Paths.get(System.getProperty("basedir", ".")).toAbsolutePath();
+
+     private XmlSecTestEnvironment() {
+         // hidden
+     }
+
+
+     /**
+      * @return {@link KeyStore} loaded from test.jks
+      * @throws GeneralSecurityException
+      * @throws IOException
+      */
+     public static KeyStore getTestKeyStore() throws GeneralSecurityException, IOException {
+         KeyStore ks = KeyStore.getInstance("JKS");
+         try (FileInputStream fis = new FileInputStream(resolveFile("src/test/resources/test.jks"))) {
+             ks.load(fis, TEST_KS_PASSWORD.toCharArray());
+         }
+         return ks;
+     }
+
+
+     /**
+      * Resolves the absolute path and returns the {@link File}.
+      * The file may not exist.
+      *
+      * @param relativePath
+      * @return absolute {@link File} path
+      */
+     public static File resolveFile(Path relativePath) {
+         return BASEDIR.resolve(relativePath).toFile();
+     }
+
+
+     /**
+      * Resolves the absolute path and returns the {@link File}.
+      * The file may not exist.
+      *
+      * @param first first element relative to the base dir
+      * @param more other path elements
+      * @return absolute {@link File} path
+      */
+     public static File resolveFile(String first, String... more) {
+         return resolveFile(BASEDIR, first, more);
+     }
+
+
+     /**
+      * Resolves the absolute path and returns the {@link File}.
+      * The file may not exist.
+      *
+      * @param base orientation point to be used for resolving the path
+      * @param first first element relative to the base dir
+      * @param more other path elements
+      * @return absolute {@link File} path
+      */
+     public static File resolveFile(Path base, String first, String... more) {
+         return resolvePath(base, first, more).toFile();
+     }
+
+
+     /**
+      * Resolves the absolute path and returns the {@link File}.
+      * The file may not exist.
+      *
+      * @param first first element relative to the base dir
+      * @param more other path elements
+      * @return absolute {@link Path}
+      */
+     public static Path resolvePath(String first, String... more) {
+         return resolvePath(BASEDIR, first, more);
+     }
+
+
+     /**
+      * Resolves the absolute path and returns the {@link File}.
+      * The file may not exist.
+      *
+      * @param base orientation point to be used for resolving the path
+      * @param first first element relative to the base dir
+      * @param more other path elements
+      * @return absolute {@link Path}
+      */
+     public static Path resolvePath(Path base, String first, String... more) {
+         return base.resolve(Paths.get(first, more)).toAbsolutePath();
+     }
+ }
diff --git a/src/test/java/org/apache/xml/security/test/dom/c14n/implementations/Bug45961Test.java b/src/test/java/org/apache/xml/security/test/dom/c14n/implementations/Bug45961Test.java
index 469ca11a..3e8439a3 100644
--- a/src/test/java/org/apache/xml/security/test/dom/c14n/implementations/Bug45961Test.java
+++ b/src/test/java/org/apache/xml/security/test/dom/c14n/implementations/Bug45961Test.java
@@ -30,6 +30,7 @@ import org.apache.xml.security.keys.KeyInfo;
 import org.apache.xml.security.signature.ObjectContainer;
 import org.apache.xml.security.signature.XMLSignature;
 import org.apache.xml.security.signature.XMLSignatureException;
+import org.apache.xml.security.test.XmlSecTestEnvironment;
 import org.apache.xml.security.test.dom.TestUtils;
 import org.apache.xml.security.transforms.Transforms;
 import org.apache.xml.security.utils.Constants;
@@ -46,7 +47,7 @@ public class Bug45961Test {
     private static final String OBJECT_ID = "Object";
     private static final String MOCK_CANONICALIZATION_METHOD =
         MockCanonicalizationMethod.MOCK_CANONICALIZATION_METHOD;
-    private static final char[] PASSWORD = "changeit".toCharArray();
+    private static final char[] PASSWORD = XmlSecTestEnvironment.TEST_KS_PASSWORD.toCharArray();
     private static final String ALIAS = "mullan";
     private ObjectContainer object;
 
@@ -74,11 +75,7 @@ public class Bug45961Test {
     }
 
     private Document getSignedDocument() throws Exception {
-        KeyStore ks = KeyStore.getInstance("JKS");
-        FileInputStream fis =
-            new FileInputStream(getAbsolutePath("src/test/resources/test.jks"));
-        ks.load(fis, PASSWORD);
-        fis.close();
+        KeyStore ks = XmlSecTestEnvironment.getTestKeyStore();
         PrivateKey privateKey = (PrivateKey) ks.getKey(ALIAS, PASSWORD);
         X509Certificate signingCert = (X509Certificate) ks
         .getCertificate(ALIAS);
@@ -116,13 +113,4 @@ public class Bug45961Test {
         transforms.addTransform(Transforms.TRANSFORM_ENVELOPED_SIGNATURE);
         return transforms;
     }
-
-    private String getAbsolutePath(String path) {
-        String basedir = System.getProperty("basedir");
-        if (basedir != null && basedir.length() != 0) {
-            path = basedir + "/" + path;
-        }
-        return path;
-    }
-
 }
\ No newline at end of file
diff --git a/src/test/java/org/apache/xml/security/test/dom/c14n/implementations/Canonicalizer11Test.java b/src/test/java/org/apache/xml/security/test/dom/c14n/implementations/Canonicalizer11Test.java
index 50c8f903..960235bf 100644
--- a/src/test/java/org/apache/xml/security/test/dom/c14n/implementations/Canonicalizer11Test.java
+++ b/src/test/java/org/apache/xml/security/test/dom/c14n/implementations/Canonicalizer11Test.java
@@ -22,6 +22,8 @@ package org.apache.xml.security.test.dom.c14n.implementations;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileOutputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -32,11 +34,12 @@ import javax.xml.xpath.XPathFactory;
 
 import org.apache.xml.security.c14n.Canonicalizer;
 import org.apache.xml.security.test.dom.DSNamespaceContext;
-import org.apache.xml.security.utils.JavaUtils;
 import org.apache.xml.security.utils.XMLUtils;
 import org.w3c.dom.Document;
 import org.w3c.dom.NodeList;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolvePath;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
@@ -54,14 +57,10 @@ public class Canonicalizer11Test {
     }
 
     /** Field prefix */
-    private String prefix;
+    private final Path prefix;
 
     public Canonicalizer11Test() {
-        prefix = "src/test/resources/org/apache/xml/security/c14n/";
-        String basedir = System.getProperty("basedir");
-        if (basedir != null && basedir.length() != 0) {
-            prefix = basedir + "/" + prefix;
-        }
+        prefix = resolvePath("src", "test", "resources", "org", "apache", "xml", "security", "c14n");
     }
 
     /**
@@ -72,9 +71,9 @@ public class Canonicalizer11Test {
         String descri =
             "3.1: PIs, Comments, and Outside of Document Element. (commented)";
 
-        String fileIn = prefix + "in/31_input.xml";
-        String fileRef = prefix + "in/31_c14n-comments.xml";
-        String fileOut = prefix + "out/xpath_31_output-comments.xml";
+        String fileIn = resolvePath(prefix, "in", "31_input.xml").toString();
+        Path fileRef = resolvePath(prefix, "in", "31_c14n-comments.xml");
+        File fileOut = resolveFile(prefix, "out", "xpath_31_output-comments.xml");
         String c14nURI = Canonicalizer.ALGO_ID_C14N11_WITH_COMMENTS;
         String xpath = null;
 
@@ -89,9 +88,9 @@ public class Canonicalizer11Test {
     @org.junit.jupiter.api.Test
     public void test32subtree() throws Exception {
         String descri = "3.2 Whitespace in Document Content. (uncommented)";
-        String fileIn = prefix + "in/32_input.xml";
-        String fileRef = prefix + "in/32_c14n.xml";
-        String fileOut = prefix + "out/xpath_32_output.xml";
+        String fileIn = resolvePath(prefix, "in", "32_input.xml").toString();
+        Path fileRef = resolvePath(prefix, "in", "32_c14n.xml");
+        File fileOut = resolveFile(prefix, "out", "xpath_32_output.xml");
         String c14nURI = Canonicalizer.ALGO_ID_C14N11_OMIT_COMMENTS;
         String xpath = null;
 
@@ -106,9 +105,9 @@ public class Canonicalizer11Test {
     @org.junit.jupiter.api.Test
     public void test33subtree() throws Exception  {
         String descri = "3.3 Start and End Tags. (uncommented)";
-        String fileIn = prefix + "in/33_input.xml";
-        String fileRef = prefix + "in/33_c14n.xml";
-        String fileOut = prefix + "out/xpath_33_output.xml";
+        String fileIn = resolvePath(prefix, "in", "33_input.xml").toString();
+        Path fileRef = resolvePath(prefix, "in", "33_c14n.xml");
+        File fileOut = resolveFile(prefix, "out", "xpath_33_output.xml");
         String c14nURI = Canonicalizer.ALGO_ID_C14N11_OMIT_COMMENTS;
         String xpath = null;    // Canonicalizer.XPATH_C14N_OMIT_COMMENTS_SINGLE_NODE;
 
@@ -125,9 +124,9 @@ public class Canonicalizer11Test {
     public void test34() throws Exception {
         String descri =
             "3.4 Character Modifications and Character References. (uncommented)";
-        String fileIn = prefix + "in/34_input.xml";
-        String fileRef = prefix + "in/34_c14n.xml";
-        String fileOut = prefix + "out/xpath_34_output.xml";
+        String fileIn = resolvePath(prefix, "in", "34_input.xml").toString();
+        Path fileRef = resolvePath(prefix, "in", "34_c14n.xml");
+        File fileOut = resolveFile(prefix, "out", "xpath_34_output.xml");
         String c14nURI = Canonicalizer.ALGO_ID_C14N11_OMIT_COMMENTS;
         String xpath = null;
 
@@ -142,9 +141,9 @@ public class Canonicalizer11Test {
     @org.junit.jupiter.api.Test
     public void test35subtree() throws Exception {
         String descri = "3.5 Entity References. (uncommented)";
-        String fileIn = prefix + "in/35_input.xml";
-        String fileRef = prefix + "in/35_c14n.xml";
-        String fileOut = prefix + "out/xpath_35_output.xml";
+        String fileIn = resolvePath(prefix, "in", "35_input.xml").toString();
+        Path fileRef = resolvePath(prefix, "in", "35_c14n.xml");
+        File fileOut = resolveFile(prefix, "out", "xpath_35_output.xml");
         String c14nURI = Canonicalizer.ALGO_ID_C14N11_OMIT_COMMENTS;
         String xpath = null;
 
@@ -159,9 +158,9 @@ public class Canonicalizer11Test {
     @org.junit.jupiter.api.Test
     public void test36subtree() throws Exception {
         String descri = "3.6 UTF-8 Encoding. (uncommented)";
-        String fileIn = prefix + "in/36_input.xml";
-        String fileRef = prefix + "in/36_c14n.xml";
-        String fileOut = prefix + "out/xpath_36_output.xml";
+        String fileIn = resolvePath(prefix, "in", "36_input.xml").toString();
+        Path fileRef = resolvePath(prefix, "in", "36_c14n.xml");
+        File fileOut = resolveFile(prefix, "out", "xpath_36_output.xml");
         String c14nURI = Canonicalizer.ALGO_ID_C14N11_OMIT_COMMENTS;
         String xpath = null;
 
@@ -176,9 +175,9 @@ public class Canonicalizer11Test {
     @org.junit.jupiter.api.Test
     public void test37() throws Exception {
         String descri = "3.7 Document Subsets. (uncommented)";
-        String fileIn = prefix + "in/37_input.xml";
-        String fileRef = prefix + "in/37_c14n.xml";
-        String fileOut = prefix + "out/xpath_37_output.xml";
+        String fileIn = resolvePath(prefix, "in", "37_input.xml").toString();
+        Path fileRef = resolvePath(prefix, "in", "37_c14n.xml");
+        File fileOut = resolveFile(prefix, "out", "xpath_37_output.xml");
         String c14nURI = Canonicalizer.ALGO_ID_C14N11_OMIT_COMMENTS;
 
         Map<String, String> namespace = new HashMap<>();
@@ -200,9 +199,9 @@ public class Canonicalizer11Test {
     @org.junit.jupiter.api.Test
     public void test38() throws Exception {
         String descri = "3.8 Document Subsets and XML Attributes (uncommented)";
-        String fileIn = prefix + "in/38_input.xml";
-        String fileRef = prefix + "in/38_c14n.xml";
-        String fileOut = prefix + "out/xpath_38_output.xml";
+        String fileIn = resolvePath(prefix, "in", "38_input.xml").toString();
+        Path fileRef = resolvePath(prefix, "in", "38_c14n.xml");
+        File fileOut = resolveFile(prefix, "out", "xpath_38_output.xml");
         String c14nURI = Canonicalizer.ALGO_ID_C14N11_OMIT_COMMENTS;
 
         Map<String, String> namespace = new HashMap<>();
@@ -220,8 +219,8 @@ public class Canonicalizer11Test {
 
     private boolean c14nAndCompare(
                                    String fileIn,
-                                   String fileRef,
-                                   String fileOut,
+                                   Path fileRef,
+                                   File fileOut,
                                    String c14nURI,
                                    String xpath
                                ) throws Exception {
@@ -232,8 +231,8 @@ public class Canonicalizer11Test {
 
     private boolean c14nAndCompare(
         String fileIn,
-        String fileRef,
-        String fileOut,
+        Path fileRef,
+        File fileOut,
         String c14nURI,
         String xpath,
         Map<String, String> namespaces
@@ -268,24 +267,22 @@ public class Canonicalizer11Test {
 
         // org.xml.sax.InputSource refIs = resolver.resolveEntity(null, fileRef);
         // byte[] refBytes = JavaUtils.getBytesFromStream(refIs.getByteStream());
-        byte[] refBytes = JavaUtils.getBytesFromFile(fileRef);
+        byte[] refBytes = Files.readAllBytes(fileRef);
 
         // if everything is OK, result is true; we do a binary compare, byte by byte
         boolean result = java.security.MessageDigest.isEqual(refBytes, c14nBytes);
 
         if (!result) {
-            File f = new File(fileOut);
-            if (!f.exists()) {
-                File parent = new File(f.getParent());
+            if (!fileOut.exists()) {
+                File parent = new File(fileOut.getParent());
                 parent.mkdirs();
-                f.createNewFile();
+                fileOut.createNewFile();
+            }
+            try (FileOutputStream fos = new FileOutputStream(fileOut)) {
+                fos.write(c14nBytes);
+                LOG.debug("Wrote erroneous result to file " + fileOut.toURI().toURL().toString());
+                assertEquals(new String(refBytes), new String(c14nBytes));
             }
-            FileOutputStream fos = new FileOutputStream(f);
-
-            fos.write(c14nBytes);
-            LOG.debug("Wrote erroneous result to file " + f.toURI().toURL().toString());
-            assertEquals(new String(refBytes), new String(c14nBytes));
-            fos.close();
         }
 
         return result;
diff --git a/src/test/java/org/apache/xml/security/test/dom/c14n/implementations/Canonicalizer20010315ExclusiveTest.java b/src/test/java/org/apache/xml/security/test/dom/c14n/implementations/Canonicalizer20010315ExclusiveTest.java
index 08781aec..1a885a6e 100644
--- a/src/test/java/org/apache/xml/security/test/dom/c14n/implementations/Canonicalizer20010315ExclusiveTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/c14n/implementations/Canonicalizer20010315ExclusiveTest.java
@@ -24,6 +24,7 @@ import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
 import java.util.HashSet;
 import java.util.Set;
 
@@ -50,6 +51,8 @@ import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolvePath;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
@@ -74,13 +77,13 @@ public class Canonicalizer20010315ExclusiveTest {
     @org.junit.jupiter.api.Test
     public void testA() throws Exception {
 
-        File fileIn = new File(getAbsolutePath(
-            "src/test/resources/ie/baltimore/merlin-examples/ec-merlin-iaikTests-two/signature.xml"));
+        File fileIn = resolveFile(
+            "src/test/resources/ie/baltimore/merlin-examples/ec-merlin-iaikTests-two/signature.xml");
 
         // File fileIn = new File("signature.xml");
         assertTrue(fileIn.exists(), "file exists");
 
-        Document doc = XMLUtils.read(new FileInputStream(fileIn), false);
+        Document doc = XMLUtils.read(fileIn, false);
         Element signatureElement =
             (Element) doc.getElementsByTagNameNS(
                 Constants.SignatureSpecNS, Constants._TAG_SIGNATURE).item(0);
@@ -109,16 +112,12 @@ public class Canonicalizer20010315ExclusiveTest {
      */
     @org.junit.jupiter.api.Test
     public void test221() throws Exception {
-
-        Document doc =
-            XMLUtils.read(
-                new FileInputStream(getAbsolutePath("src/test/resources/org/apache/xml/security/c14n/inExcl/example2_2_1.xml")),
-                false
-            );
+        Document doc = XMLUtils
+            .read(resolveFile("src/test/resources/org/apache/xml/security/c14n/inExcl/example2_2_1.xml"), false);
         Node root = doc.getElementsByTagNameNS("http://example.net", "elem2").item(0);
         Canonicalizer20010315 c = new Canonicalizer20010315WithComments();
-        byte[] reference = JavaUtils.getBytesFromFile(getAbsolutePath(
-            "src/test/resources/org/apache/xml/security/c14n/inExcl/example2_2_1_c14nized.xml"));
+        byte[] reference = Files.readAllBytes(
+            resolvePath("src/test/resources/org/apache/xml/security/c14n/inExcl/example2_2_1_c14nized.xml"));
         try (ByteArrayOutputStream writer = new ByteArrayOutputStream()) {
             c.engineCanonicalizeSubTree(root, writer);
             boolean equals = java.security.MessageDigest.isEqual(reference, writer.toByteArray());
@@ -132,14 +131,12 @@ public class Canonicalizer20010315ExclusiveTest {
      */
     @org.junit.jupiter.api.Test
     public void test222() throws Exception {
-        Document doc =
-            XMLUtils.read(new FileInputStream(getAbsolutePath(
-                "src/test/resources/org/apache/xml/security/c14n/inExcl/example2_2_2.xml")
-            ), false);
+        Document doc = XMLUtils
+            .read(resolveFile("src/test/resources/org/apache/xml/security/c14n/inExcl/example2_2_2.xml"), false);
         Node root = doc.getElementsByTagNameNS("http://example.net", "elem2").item(0);
         Canonicalizer20010315 c = new Canonicalizer20010315WithComments();
-        byte[] reference = JavaUtils.getBytesFromFile(getAbsolutePath(
-            "src/test/resources/org/apache/xml/security/c14n/inExcl/example2_2_2_c14nized.xml"));
+        byte[] reference = Files.readAllBytes(
+            resolvePath("src/test/resources/org/apache/xml/security/c14n/inExcl/example2_2_2_c14nized.xml"));
         try (ByteArrayOutputStream writer = new ByteArrayOutputStream()) {
             c.engineCanonicalizeSubTree(root, writer);
             boolean equals = java.security.MessageDigest.isEqual(reference, writer.toByteArray());
@@ -153,14 +150,12 @@ public class Canonicalizer20010315ExclusiveTest {
      */
     @org.junit.jupiter.api.Test
     public void test221excl() throws Exception {
-        Document doc =
-            XMLUtils.read(new FileInputStream(getAbsolutePath(
-                "src/test/resources/org/apache/xml/security/c14n/inExcl/example2_2_1.xml")),
-                          false);
+        Document doc = XMLUtils
+            .read(resolveFile("src/test/resources/org/apache/xml/security/c14n/inExcl/example2_2_1.xml"), false);
         Node root = doc.getElementsByTagNameNS("http://example.net", "elem2").item(0);
         Canonicalizer20010315Excl c = new Canonicalizer20010315ExclWithComments();
-        byte[] reference = JavaUtils.getBytesFromFile(getAbsolutePath(
-            "src/test/resources/org/apache/xml/security/c14n/inExcl/example2_2_c14nized_exclusive.xml"));
+        byte[] reference = Files.readAllBytes(
+            resolvePath("src/test/resources/org/apache/xml/security/c14n/inExcl/example2_2_c14nized_exclusive.xml"));
         try (ByteArrayOutputStream writer = new ByteArrayOutputStream()) {
             c.engineCanonicalizeSubTree(root, writer);
             boolean equals = java.security.MessageDigest.isEqual(reference, writer.toByteArray());
@@ -174,14 +169,12 @@ public class Canonicalizer20010315ExclusiveTest {
      */
     @org.junit.jupiter.api.Test
     public void test222excl() throws Exception {
-        Document doc =
-            XMLUtils.read(new FileInputStream(getAbsolutePath(
-                "src/test/resources/org/apache/xml/security/c14n/inExcl/example2_2_2.xml")),
-                          false);
+        Document doc = XMLUtils
+            .read(resolveFile("src/test/resources/org/apache/xml/security/c14n/inExcl/example2_2_2.xml"), false);
         Node root = doc.getElementsByTagNameNS("http://example.net", "elem2").item(0);
         Canonicalizer20010315Excl c = new Canonicalizer20010315ExclWithComments();
-        byte[] reference = JavaUtils.getBytesFromFile(getAbsolutePath(
-            "src/test/resources/org/apache/xml/security/c14n/inExcl/example2_2_c14nized_exclusive.xml") );
+        byte[] reference = Files.readAllBytes(
+            resolvePath("src/test/resources/org/apache/xml/security/c14n/inExcl/example2_2_c14nized_exclusive.xml"));
         try (ByteArrayOutputStream writer = new ByteArrayOutputStream()) {
             c.engineCanonicalizeSubTree(root, writer);
             boolean equals = java.security.MessageDigest.isEqual(reference, writer.toByteArray());
@@ -197,10 +190,8 @@ public class Canonicalizer20010315ExclusiveTest {
      */
     @org.junit.jupiter.api.Test
     public void test223excl() throws Exception {
-        Document doc =
-            XMLUtils.read(new FileInputStream(getAbsolutePath(
-                "src/test/resources/org/apache/xml/security/c14n/inExcl/example2_2_3.xml")),
-                          false);
+        Document doc = XMLUtils
+            .read(resolveFile("src/test/resources/org/apache/xml/security/c14n/inExcl/example2_2_3.xml"), false);
 
         XPathFactory xpf = XPathFactory.newInstance();
         XPath xpath = xpf.newXPath();
@@ -211,10 +202,8 @@ public class Canonicalizer20010315ExclusiveTest {
             (NodeList) xpath.evaluate(expression, doc, XPathConstants.NODESET);
 
         Canonicalizer20010315Excl c = new Canonicalizer20010315ExclWithComments();
-        byte[] reference = JavaUtils.getBytesFromFile(
-            getAbsolutePath(
-                "src/test/resources/org/apache/xml/security/c14n/inExcl/example2_2_3_c14nized_exclusive.xml")
-            );
+        byte[] reference = Files.readAllBytes(
+            resolvePath("src/test/resources/org/apache/xml/security/c14n/inExcl/example2_2_3_c14nized_exclusive.xml"));
         try (ByteArrayOutputStream writer = new ByteArrayOutputStream()) {
             c.engineCanonicalizeXPathNodeSet(XMLUtils.convertNodelistToSet(nodes), writer);
             assertEquals(new String(reference), new String(writer.toByteArray()));
@@ -272,17 +261,13 @@ public class Canonicalizer20010315ExclusiveTest {
      */
     @org.junit.jupiter.api.Test
     public void test24excl() throws Exception {
-        Document doc =
-            XMLUtils.read(
-                new FileInputStream(getAbsolutePath(
-                    "src/test/resources/org/apache/xml/security/c14n/inExcl/example2_4.xml")),
-                false);
+        Document doc = XMLUtils
+            .read(resolveFile("src/test/resources/org/apache/xml/security/c14n/inExcl/example2_4.xml"), false);
         Node root =
             doc.getElementsByTagNameNS("http://example.net", "elem2").item(0);
         Canonicalizer20010315Excl c = new Canonicalizer20010315ExclWithComments();
-        byte[] reference =
-            JavaUtils.getBytesFromFile(getAbsolutePath(
-                "src/test/resources/org/apache/xml/security/c14n/inExcl/example2_4_c14nized.xml"));
+        byte[] reference = Files.readAllBytes(
+            resolvePath("src/test/resources/org/apache/xml/security/c14n/inExcl/example2_4_c14nized.xml"));
         try (ByteArrayOutputStream writer = new ByteArrayOutputStream()) {
             c.engineCanonicalizeSubTree(root, writer);
             boolean equals = java.security.MessageDigest.isEqual(reference, writer.toByteArray());
@@ -310,9 +295,8 @@ public class Canonicalizer20010315ExclusiveTest {
 
         Node root = doc.getElementsByTagNameNS("http://example.net", "elem2").item(0);
         Canonicalizer20010315Excl c = new Canonicalizer20010315ExclWithComments();
-        byte[] reference =
-            JavaUtils.getBytesFromFile(getAbsolutePath(
-                "src/test/resources/org/apache/xml/security/c14n/inExcl/example2_4_c14nized.xml"));
+        byte[] reference = Files.readAllBytes(
+            resolvePath("src/test/resources/org/apache/xml/security/c14n/inExcl/example2_4_c14nized.xml"));
         try (ByteArrayOutputStream writer = new ByteArrayOutputStream()) {
             c.engineCanonicalizeSubTree(root, writer);
             boolean equals = java.security.MessageDigest.isEqual(reference, writer.toByteArray());
@@ -733,13 +717,4 @@ public class Canonicalizer20010315ExclusiveTest {
             assertEquals(c14nXML, new String(writer.toByteArray()));
         }
     }
-
-    private String getAbsolutePath(String path) {
-        String basedir = System.getProperty("basedir");
-        if (basedir != null && basedir.length() != 0) {
-            path = basedir + "/" + path;
-        }
-        return path;
-    }
-
 }
\ No newline at end of file
diff --git a/src/test/java/org/apache/xml/security/test/dom/c14n/implementations/Canonicalizer20010315Test.java b/src/test/java/org/apache/xml/security/test/dom/c14n/implementations/Canonicalizer20010315Test.java
index dcee8f38..6b6a63b9 100644
--- a/src/test/java/org/apache/xml/security/test/dom/c14n/implementations/Canonicalizer20010315Test.java
+++ b/src/test/java/org/apache/xml/security/test/dom/c14n/implementations/Canonicalizer20010315Test.java
@@ -25,6 +25,8 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -40,12 +42,14 @@ import javax.xml.xpath.XPathFactory;
 
 import org.apache.xml.security.c14n.CanonicalizationException;
 import org.apache.xml.security.c14n.Canonicalizer;
+import org.apache.xml.security.test.XmlSecTestEnvironment;
 import org.apache.xml.security.test.dom.DSNamespaceContext;
 import org.apache.xml.security.utils.JavaUtils;
 import org.apache.xml.security.utils.XMLUtils;
 import org.w3c.dom.Document;
 import org.w3c.dom.NodeList;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolvePath;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
@@ -65,14 +69,10 @@ public class Canonicalizer20010315Test {
     }
 
     /** Field prefix */
-    private String prefix;
+    private final String prefix;
 
     public Canonicalizer20010315Test() {
-        prefix = "src/test/resources/org/apache/xml/security/c14n/";
-        String basedir = System.getProperty("basedir");
-        if (basedir != null && basedir.length() != 0) {
-            prefix = basedir + "/" + prefix;
-        }
+        prefix = resolvePath("src", "test", "resources", "org", "apache", "xml", "security", "c14n") + "/";
     }
 
     /**
@@ -84,7 +84,7 @@ public class Canonicalizer20010315Test {
             "3.1: PIs, Comments, and Outside of Document Element. (commented)";
 
         String fileIn = prefix + "in/31_input.xml";
-        String fileRef = prefix + "in/31_c14n-comments.xml";
+        Path fileRef = resolvePath(prefix, "in", "31_c14n-comments.xml");
         String fileOut = prefix + "out/xpath_31_output-comments.xml";
         String c14nURI = Canonicalizer.ALGO_ID_C14N_WITH_COMMENTS;
         String xpath = null;
@@ -101,7 +101,7 @@ public class Canonicalizer20010315Test {
             "3.1: PIs, Comments, and Outside of Document Element. (commented)";
 
         String fileIn = prefix + "in/31_input.xml";
-        String fileRef = prefix + "in/31_c14n-comments.xml";
+        Path fileRef = resolvePath(prefix, "in", "31_c14n-comments.xml");
         String fileOut = prefix + "out/xpath_31_output-comments.xml";
         String c14nURI = Canonicalizer.ALGO_ID_C14N_WITH_COMMENTS;
         String xpath = Canonicalizer.XPATH_C14N_WITH_COMMENTS_SINGLE_NODE;
@@ -119,7 +119,7 @@ public class Canonicalizer20010315Test {
         String descri =
             "3.1: PIs, Comments, and Outside of Document Element. (uncommented)";
         String fileIn = prefix + "in/31_input.xml";
-        String fileRef = prefix + "in/31_c14n.xml";
+        Path fileRef = resolvePath(prefix, "in", "31_c14n.xml");
         String fileOut = prefix + "out/xpath_31_output.xml";
         String c14nURI = Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS;
         String xpath = null;
@@ -138,7 +138,7 @@ public class Canonicalizer20010315Test {
         String descri =
             "3.1: PIs, Comments, and Outside of Document Element. (uncommented)";
         String fileIn = prefix + "in/31_input.xml";
-        String fileRef = prefix + "in/31_c14n.xml";
+        Path fileRef = resolvePath(prefix, "in", "31_c14n.xml");
         String fileOut = prefix + "out/xpath_31_output.xml";
         String c14nURI = Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS;
         String xpath = Canonicalizer.XPATH_C14N_WITH_COMMENTS_SINGLE_NODE;
@@ -155,7 +155,7 @@ public class Canonicalizer20010315Test {
     public void test32subtree() throws Exception {
         String descri = "3.2 Whitespace in Document Content. (uncommented)";
         String fileIn = prefix + "in/32_input.xml";
-        String fileRef = prefix + "in/32_c14n.xml";
+        Path fileRef = resolvePath(prefix, "in", "32_c14n.xml");
         String fileOut = prefix + "out/xpath_32_output.xml";
         String c14nURI = Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS;
         String xpath = null;
@@ -172,7 +172,7 @@ public class Canonicalizer20010315Test {
     public void test32subset() throws Exception {
         String descri = "3.2 Whitespace in Document Content. (uncommented)";
         String fileIn = prefix + "in/32_input.xml";
-        String fileRef = prefix + "in/32_c14n.xml";
+        Path fileRef = resolvePath(prefix, "in", "32_c14n.xml");
         String fileOut = prefix + "out/xpath_32_output.xml";
         String c14nURI = Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS;
         String xpath = Canonicalizer.XPATH_C14N_WITH_COMMENTS_SINGLE_NODE;
@@ -189,7 +189,7 @@ public class Canonicalizer20010315Test {
     public void test33subtree() throws Exception {
         String descri = "3.3 Start and End Tags. (uncommented)";
         String fileIn = prefix + "in/33_input.xml";
-        String fileRef = prefix + "in/33_c14n.xml";
+        Path fileRef = resolvePath(prefix, "in", "33_c14n.xml");
         String fileOut = prefix + "out/xpath_33_output.xml";
         String c14nURI = Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS;
         String xpath = null;    // Canonicalizer.XPATH_C14N_OMIT_COMMENTS_SINGLE_NODE;
@@ -201,7 +201,7 @@ public class Canonicalizer20010315Test {
     public void test33subset() throws Exception {
         String descri = "3.3 Start and End Tags. (uncommented)";
         String fileIn = prefix + "in/33_input.xml";
-        String fileRef = prefix + "in/33_c14n.xml";
+        Path fileRef = resolvePath(prefix, "in", "33_c14n.xml");
         String fileOut = prefix + "out/xpath_33_output.xml";
         String c14nURI = Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS;
         String xpath = Canonicalizer.XPATH_C14N_WITH_COMMENTS_SINGLE_NODE;
@@ -220,7 +220,7 @@ public class Canonicalizer20010315Test {
         String descri =
             "3.4 Character Modifications and Character References. (uncommented)";
         String fileIn = prefix + "in/34_input.xml";
-        String fileRef = prefix + "in/34_c14n.xml";
+        Path fileRef = resolvePath(prefix, "in", "34_c14n.xml");
         String fileOut = prefix + "out/xpath_34_output.xml";
         String c14nURI = Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS;
         String xpath = null;
@@ -246,7 +246,7 @@ public class Canonicalizer20010315Test {
         String descri =
             "3.4 Character Modifications and Character References. (uncommented, patched to run on validating Parsers)";
         String fileIn = prefix + "in/34_input_validatingParser.xml";
-        String fileRef = prefix + "in/34_c14n_validatingParser.xml";
+        Path fileRef = resolvePath(prefix, "in", "34_c14n_validatingParser.xml");
         String fileOut = prefix + "out/xpath_34_output_validatingParser.xml";
         String c14nURI = Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS;
         String xpath = null;
@@ -273,7 +273,7 @@ public class Canonicalizer20010315Test {
         String descri =
             "3.4 Character Modifications and Character References. (uncommented, patched to run on validating Parsers)";
         String fileIn = prefix + "in/34_input_validatingParser.xml";
-        String fileRef = prefix + "in/34_c14n_validatingParser.xml";
+        Path fileRef = resolvePath(prefix, "in", "34_c14n_validatingParser.xml");
         String fileOut = prefix + "out/xpath_34_output_validatingParser.xml";
         String c14nURI = Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS;
         String xpath = Canonicalizer.XPATH_C14N_WITH_COMMENTS_SINGLE_NODE;
@@ -290,7 +290,7 @@ public class Canonicalizer20010315Test {
     public void test35subtree() throws Exception{
         String descri = "3.5 Entity References. (uncommented)";
         String fileIn = prefix + "in/35_input.xml";
-        String fileRef = prefix + "in/35_c14n.xml";
+        Path fileRef = resolvePath(prefix, "in", "35_c14n.xml");
         String fileOut = prefix + "out/xpath_35_output.xml";
         String c14nURI = Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS;
         String xpath = null;
@@ -307,7 +307,7 @@ public class Canonicalizer20010315Test {
     public void test35subset() throws Exception {
         String descri = "3.5 Entity References. (uncommented)";
         String fileIn = prefix + "in/35_input.xml";
-        String fileRef = prefix + "in/35_c14n.xml";
+        Path fileRef = resolvePath(prefix, "in", "35_c14n.xml");
         String fileOut = prefix + "out/xpath_35_output.xml";
         String c14nURI = Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS;
         String xpath = Canonicalizer.XPATH_C14N_WITH_COMMENTS_SINGLE_NODE;
@@ -324,7 +324,7 @@ public class Canonicalizer20010315Test {
     public void test36subtree() throws Exception {
         String descri = "3.6 UTF-8 Encoding. (uncommented)";
         String fileIn = prefix + "in/36_input.xml";
-        String fileRef = prefix + "in/36_c14n.xml";
+        Path fileRef = resolvePath(prefix, "in", "36_c14n.xml");
         String fileOut = prefix + "out/xpath_36_output.xml";
         String c14nURI = Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS;
         String xpath = null;
@@ -341,7 +341,7 @@ public class Canonicalizer20010315Test {
     public void test36subset() throws Exception {
         String descri = "3.6 UTF-8 Encoding. (uncommented)";
         String fileIn = prefix + "in/36_input.xml";
-        String fileRef = prefix + "in/36_c14n.xml";
+        Path fileRef = resolvePath(prefix, "in", "36_c14n.xml");
         String fileOut = prefix + "out/xpath_36_output.xml";
         String c14nURI = Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS;
         String xpath = Canonicalizer.XPATH_C14N_WITH_COMMENTS_SINGLE_NODE;
@@ -358,7 +358,7 @@ public class Canonicalizer20010315Test {
     public void test37() throws Exception {
         String descri = "3.7 Document Subsets. (uncommented)";
         String fileIn = prefix + "in/37_input.xml";
-        String fileRef = prefix + "in/37_c14n.xml";
+        Path fileRef = resolvePath(prefix, "in", "37_c14n.xml");
         String fileOut = prefix + "out/xpath_37_output.xml";
         String c14nURI = Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS;
 
@@ -385,7 +385,7 @@ public class Canonicalizer20010315Test {
 
         //String descri = "3.7 Document Subsets. (uncommented), c14n by NodeList";
         String fileIn = prefix + "in/37_input.xml";
-        String fileRef = prefix + "in/37_c14n.xml";
+        Path fileRef = resolvePath(prefix, "in", "37_c14n.xml");
         //String c14nURI = Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS;
 
         Document doc = XMLUtils.read(new FileInputStream(fileIn), false);
@@ -402,8 +402,7 @@ public class Canonicalizer20010315Test {
 
         XPathFactory xpf = XPathFactory.newInstance();
         XPath xPath = xpf.newXPath();
-        DSNamespaceContext namespaceContext =
-            new DSNamespaceContext(namespace);
+        DSNamespaceContext namespaceContext = new DSNamespaceContext(namespace);
         xPath.setNamespaceContext(namespaceContext);
 
         NodeList nodes = (NodeList)xPath.evaluate(xpath, doc, XPathConstants.NODESET);
@@ -411,8 +410,7 @@ public class Canonicalizer20010315Test {
             Canonicalizer.getInstance(Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS);
         try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
             c14n.canonicalizeXPathNodeSet(XMLUtils.convertNodelistToSet(nodes), baos);
-            InputStream refStream = new FileInputStream(fileRef);
-            byte[] refBytes = JavaUtils.getBytesFromStream(refStream);
+            byte[] refBytes = Files.readAllBytes(fileRef);
             assertEquals(new String(refBytes),new String(baos.toByteArray()));
         }
     }
@@ -684,7 +682,7 @@ public class Canonicalizer20010315Test {
 
     private boolean c14nAndCompare(
                                    String fileIn,
-                                   String fileRef,
+                                   Path fileRef,
                                    String fileOut,
                                    String c14nURI,
                                    String xpath
@@ -696,7 +694,7 @@ public class Canonicalizer20010315Test {
 
     private boolean c14nAndCompare(
         String fileIn,
-        String fileRef,
+        Path fileRef,
         String fileOut,
         String c14nURI,
         String xpath,
@@ -732,7 +730,7 @@ public class Canonicalizer20010315Test {
 
         // org.xml.sax.InputSource refIs = resolver.resolveEntity(null, fileRef);
         // byte[] refBytes = JavaUtils.getBytesFromStream(refIs.getByteStream());
-        byte[] refBytes = JavaUtils.getBytesFromFile(fileRef);
+        byte[] refBytes = Files.readAllBytes(fileRef);
 
         // if everything is OK, result is true; we do a binary compare, byte by byte
         boolean result = java.security.MessageDigest.isEqual(refBytes, c14nBytes);
diff --git a/src/test/java/org/apache/xml/security/test/dom/c14n/implementations/ExclusiveC14NInteropTest.java b/src/test/java/org/apache/xml/security/test/dom/c14n/implementations/ExclusiveC14NInteropTest.java
index c8909656..ad3bbc8c 100644
--- a/src/test/java/org/apache/xml/security/test/dom/c14n/implementations/ExclusiveC14NInteropTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/c14n/implementations/ExclusiveC14NInteropTest.java
@@ -20,10 +20,10 @@ package org.apache.xml.security.test.dom.c14n.implementations;
 
 
 import java.io.File;
-import java.io.FileInputStream;
 
 import org.apache.xml.security.signature.Reference;
 import org.apache.xml.security.signature.XMLSignature;
+import org.apache.xml.security.test.XmlSecTestEnvironment;
 import org.apache.xml.security.test.dom.interop.InteropTestBase;
 import org.apache.xml.security.utils.Constants;
 import org.apache.xml.security.utils.XMLUtils;
@@ -116,21 +116,13 @@ public class ExclusiveC14NInteropTest extends InteropTestBase {
     }
 
     private String t(String directory, String file, boolean secureValidation) throws Exception {
-        String basedir = System.getProperty("basedir");
-        if (basedir != null && basedir.length() != 0) {
-            directory = basedir + "/" + directory;
-        }
-
-        File f = new File(directory + "/" + file);
-
-        org.w3c.dom.Document doc = XMLUtils.read(new FileInputStream(f), false);
+        File f = XmlSecTestEnvironment.resolveFile(directory, file);
+        org.w3c.dom.Document doc = XMLUtils.read(f, false);
 
-        Element sigElement =
-            (Element) doc.getElementsByTagNameNS(Constants.SignatureSpecNS,
-                                                 Constants._TAG_SIGNATURE).item(0);
+        Element sigElement = (Element) doc.getElementsByTagNameNS(Constants.SignatureSpecNS, Constants._TAG_SIGNATURE)
+            .item(0);
         XMLSignature signature = new XMLSignature(sigElement, f.toURI().toURL().toString(), secureValidation);
-        boolean verify =
-            signature.checkSignatureValue(signature.getKeyInfo().getPublicKey());
+        boolean verify = signature.checkSignatureValue(signature.getKeyInfo().getPublicKey());
 
         LOG.debug("   signature.checkSignatureValue finished: " + verify);
 
@@ -160,12 +152,7 @@ public class ExclusiveC14NInteropTest extends InteropTestBase {
         }
 
         String r = sb.toString().trim();
-
-        if (r.length() == 0) {
-            return null;
-        } else {
-            return r;
-        }
+        return r.isEmpty() ? null : r;
     }
 
 }
\ No newline at end of file
diff --git a/src/test/java/org/apache/xml/security/test/dom/encryption/BaltimoreEncTest.java b/src/test/java/org/apache/xml/security/test/dom/encryption/BaltimoreEncTest.java
index 5aec3ade..6eeeb980 100644
--- a/src/test/java/org/apache/xml/security/test/dom/encryption/BaltimoreEncTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/encryption/BaltimoreEncTest.java
@@ -20,6 +20,8 @@ package org.apache.xml.security.test.dom.encryption;
 
 import java.io.File;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
 import java.security.Key;
 import java.security.KeyFactory;
 import java.security.NoSuchAlgorithmException;
@@ -55,6 +57,8 @@ import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolvePath;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assumptions.assumeFalse;
@@ -75,8 +79,8 @@ public class BaltimoreEncTest {
     private static byte[] jedBytes;
     private static PrivateKey rsaKey;
     private boolean haveISOPadding;
-    private boolean haveKeyWraps;
-    private boolean isIBMJdK = System.getProperty("java.vendor").contains("IBM");
+    private final boolean haveKeyWraps;
+    private final boolean isIBMJdK = System.getProperty("java.vendor").contains("IBM");
 
     static org.slf4j.Logger LOG =
         org.slf4j.LoggerFactory.getLogger(BaltimoreEncTest.class);
@@ -86,15 +90,10 @@ public class BaltimoreEncTest {
      */
     public BaltimoreEncTest() throws Exception {
         // Create the comparison strings
-        String filename =
-            "src/test/resources/ie/baltimore/merlin-examples/merlin-xmlenc-five/plaintext.xml";
-        String basedir = System.getProperty("basedir");
-        if (basedir != null && basedir.length() != 0) {
-            filename = basedir + "/" + filename;
-        }
-        File f = new File(filename);
+        File f = resolveFile("src", "test", "resources", "ie", "baltimore", "merlin-examples", "merlin-xmlenc-five",
+            "plaintext.xml");
 
-        Document doc = XMLUtils.read(new java.io.FileInputStream(f), false);
+        Document doc = XMLUtils.read(f, false);
 
         cardNumber = retrieveCCNumber(doc);
 
@@ -113,12 +112,9 @@ public class BaltimoreEncTest {
         rsaCertSerialNumber = "1014918766910";
 
         // rsaKey
-        filename = "src/test/resources/ie/baltimore/merlin-examples/merlin-xmlenc-five/rsa.p8";
-        if (basedir != null && basedir.length() != 0) {
-            filename = basedir + "/" + filename;
-        }
-
-        byte[] pkcs8Bytes = JavaUtils.getBytesFromFile(filename);
+        Path filename = resolvePath("src", "test", "resources", "ie", "baltimore", "merlin-examples",
+            "merlin-xmlenc-five", "rsa.p8");
+        byte[] pkcs8Bytes = Files.readAllBytes(filename);
         PKCS8EncodedKeySpec pkcs8Spec = new PKCS8EncodedKeySpec(pkcs8Bytes);
 
         // Create a key factory
@@ -162,10 +158,10 @@ public class BaltimoreEncTest {
     public void test_five_content_3des_cbc() throws Exception {
 
         if (haveISOPadding) {
-            String filename =
-                "src/test/resources/ie/baltimore/merlin-examples/merlin-xmlenc-five/encrypt-content-tripledes-cbc.xml";
+            File file = resolveFile(
+                "src/test/resources/ie/baltimore/merlin-examples/merlin-xmlenc-five/encrypt-content-tripledes-cbc.xml");
 
-            Document dd = decryptElement(filename);
+            Document dd = decryptElement(file);
             checkDecryptedDoc(dd, true);
         } else {
             LOG.warn(
@@ -184,10 +180,10 @@ public class BaltimoreEncTest {
     public void test_five_content_aes256_cbc() throws Exception {
 
         if (haveISOPadding) {
-            String filename =
-                "src/test/resources/ie/baltimore/merlin-examples/merlin-xmlenc-five/encrypt-content-aes256-cbc-prop.xml";
+            File file = resolveFile(
+                "src/test/resources/ie/baltimore/merlin-examples/merlin-xmlenc-five/encrypt-content-aes256-cbc-prop.xml");
 
-            Document dd = decryptElement(filename);
+            Document dd = decryptElement(file);
             checkDecryptedDoc(dd, true);
         } else {
             LOG.warn(
@@ -206,10 +202,10 @@ public class BaltimoreEncTest {
     @org.junit.jupiter.api.Test
     public void test_five_content_aes128_cbc_kw_aes192() throws Exception {
         if (haveISOPadding && haveKeyWraps) {
-            String filename =
-                "src/test/resources/ie/baltimore/merlin-examples/merlin-xmlenc-five/encrypt-content-aes128-cbc-kw-aes192.xml";
+            File file = resolveFile(
+                "src/test/resources/ie/baltimore/merlin-examples/merlin-xmlenc-five/encrypt-content-aes128-cbc-kw-aes192.xml");
 
-            Document dd = decryptElement(filename);
+            Document dd = decryptElement(file);
             checkDecryptedDoc(dd, true);
         } else {
             LOG.warn(
@@ -229,10 +225,10 @@ public class BaltimoreEncTest {
     public void test_five_content_3des_cbc_kw_aes128() throws Exception {
 
         if (haveISOPadding && haveKeyWraps) {
-            String filename =
-                "src/test/resources/ie/baltimore/merlin-examples/merlin-xmlenc-five/encrypt-element-tripledes-cbc-kw-aes128.xml";
+            File file = resolveFile(
+                "src/test/resources/ie/baltimore/merlin-examples/merlin-xmlenc-five/encrypt-element-tripledes-cbc-kw-aes128.xml");
 
-            Document dd = decryptElement(filename);
+            Document dd = decryptElement(file);
             checkDecryptedDoc(dd, true);
         } else {
             LOG.warn(
@@ -251,10 +247,10 @@ public class BaltimoreEncTest {
     @org.junit.jupiter.api.Test
     public void test_five_content_aes128_cbc_rsa_15() throws Exception {
         if (haveISOPadding) {
-            String filename =
-                "src/test/resources/ie/baltimore/merlin-examples/merlin-xmlenc-five/encrypt-element-aes128-cbc-rsa-1_5.xml";
+            File file = resolveFile(
+                "src/test/resources/ie/baltimore/merlin-examples/merlin-xmlenc-five/encrypt-element-aes128-cbc-rsa-1_5.xml");
 
-            Document dd = decryptElement(filename);
+            Document dd = decryptElement(file);
             checkDecryptedDoc(dd, true);
         } else {
             LOG.warn(
@@ -273,10 +269,10 @@ public class BaltimoreEncTest {
     @org.junit.jupiter.api.Test
     public void test_five_element_aes192_cbc_ref() throws Exception {
         if (haveISOPadding) {
-            String filename =
-                "src/test/resources/ie/baltimore/merlin-examples/merlin-xmlenc-five/encrypt-element-aes192-cbc-ref.xml";
+            File file = resolveFile(
+                "src/test/resources/ie/baltimore/merlin-examples/merlin-xmlenc-five/encrypt-element-aes192-cbc-ref.xml");
 
-            Document dd = decryptElement(filename);
+            Document dd = decryptElement(file);
             // Note - we don't check the node count, as it will be different
             // due to the encrypted text remainin in the reference nodes
             checkDecryptedDoc(dd, false);
@@ -297,10 +293,8 @@ public class BaltimoreEncTest {
     @org.junit.jupiter.api.Test
     public void test_five_data_aes128_cbc() throws Exception {
         if (haveISOPadding) {
-            String filename =
-                "src/test/resources/ie/baltimore/merlin-examples/merlin-xmlenc-five/encrypt-data-aes128-cbc.xml";
-
-            byte[] decrypt = decryptData(filename);
+            File file = resolveFile("src/test/resources/ie/baltimore/merlin-examples/merlin-xmlenc-five/encrypt-data-aes128-cbc.xml");
+            byte[] decrypt = decryptData(file);
             checkDecryptedData(decrypt);
         } else {
             LOG.warn(
@@ -321,10 +315,9 @@ public class BaltimoreEncTest {
         assumeFalse(isIBMJdK);
 
         if (haveISOPadding && haveKeyWraps) {
-            String filename =
-                "src/test/resources/ie/baltimore/merlin-examples/merlin-xmlenc-five/encrypt-data-aes256-cbc-kw-tripledes.xml";
-
-            byte[] decrypt = decryptData(filename);
+            File file = resolveFile(
+                "src/test/resources/ie/baltimore/merlin-examples/merlin-xmlenc-five/encrypt-data-aes256-cbc-kw-tripledes.xml");
+            byte[] decrypt = decryptData(file);
             checkDecryptedData(decrypt);
         } else {
             LOG.warn(
@@ -343,10 +336,9 @@ public class BaltimoreEncTest {
     @org.junit.jupiter.api.Test
     public void test_five_data_aes192_cbc_aes256() throws Exception {
         if (haveISOPadding && haveKeyWraps) {
-            String filename =
-                "src/test/resources/ie/baltimore/merlin-examples/merlin-xmlenc-five/encrypt-data-aes192-cbc-kw-aes256.xml";
-
-            byte[] decrypt = decryptData(filename);
+            File file = resolveFile(
+                "src/test/resources/ie/baltimore/merlin-examples/merlin-xmlenc-five/encrypt-data-aes192-cbc-kw-aes256.xml");
+            byte[] decrypt = decryptData(file);
             checkDecryptedData(decrypt);
         } else {
             LOG.warn(
@@ -365,10 +357,9 @@ public class BaltimoreEncTest {
     @org.junit.jupiter.api.Test
     public void test_five_data_3des_cbc_rsa_oaep() throws Exception {
         if (haveISOPadding) {
-            String filename =
-                "src/test/resources/ie/baltimore/merlin-examples/merlin-xmlenc-five/encrypt-data-tripledes-cbc-rsa-oaep-mgf1p.xml";
-
-            byte[] decrypt = decryptData(filename);
+            File file = resolveFile(
+                "src/test/resources/ie/baltimore/merlin-examples/merlin-xmlenc-five/encrypt-data-tripledes-cbc-rsa-oaep-mgf1p.xml");
+            byte[] decrypt = decryptData(file);
             checkDecryptedData(decrypt);
         } else {
             LOG.warn(
@@ -386,24 +377,16 @@ public class BaltimoreEncTest {
      *
      * @param filename File to decrypt from
      */
-    private Document decryptElement(String filename) throws Exception {
-        XMLCipher cipher;
+    private Document decryptElement(File file) throws Exception {
 
         // Parse the document in question
-
-        String basedir = System.getProperty("basedir");
-        if (basedir != null && basedir.length() != 0) {
-            filename = basedir + "/" + filename;
-        }
-        File f = new File(filename);
-
-        Document doc = XMLUtils.read(new java.io.FileInputStream(f), false);
+        Document doc = XMLUtils.read(file, false);
 
         // Now we have the document, lets build the XMLCipher element
         Element ee = null;
 
         // Create the XMLCipher element
-        cipher = XMLCipher.getInstance();
+        XMLCipher cipher = XMLCipher.getInstance();
 
         // Need to pre-load the Encrypted Data so we can get the key info
         ee = (Element) doc.getElementsByTagName("EncryptedData").item(0);
@@ -425,18 +408,12 @@ public class BaltimoreEncTest {
      *
      * @param filename File to decrypt from
      */
-    private byte[] decryptData(String filename) throws Exception {
+    private byte[] decryptData(File file) throws Exception {
 
         XMLCipher cipher;
 
         // Parse the document in question
-        String basedir = System.getProperty("basedir");
-        if (basedir != null && basedir.length() != 0) {
-            filename = basedir + "/" + filename;
-        }
-        File f = new File(filename);
-
-        Document doc = XMLUtils.read(new java.io.FileInputStream(f), false);
+        Document doc = XMLUtils.read(new java.io.FileInputStream(file), false);
 
         // Now we have the document, lets build the XMLCipher element
         Element ee = null;
diff --git a/src/test/java/org/apache/xml/security/test/dom/encryption/XMLEncryption11Test.java b/src/test/java/org/apache/xml/security/test/dom/encryption/XMLEncryption11Test.java
index b0fb2ed5..5f310ada 100644
--- a/src/test/java/org/apache/xml/security/test/dom/encryption/XMLEncryption11Test.java
+++ b/src/test/java/org/apache/xml/security/test/dom/encryption/XMLEncryption11Test.java
@@ -48,11 +48,11 @@ import org.apache.xml.security.test.dom.DSNamespaceContext;
 import org.apache.xml.security.utils.Constants;
 import org.apache.xml.security.utils.EncryptionConstants;
 import org.apache.xml.security.utils.XMLUtils;
-// import org.apache.xml.security.utils.XMLUtils;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assumptions.assumeFalse;
@@ -72,7 +72,7 @@ public class XMLEncryption11Test {
     private static String cardNumber;
     private static int nodeCount = 0;
     private boolean haveISOPadding;
-    private boolean isIBMJdK = System.getProperty("java.vendor").contains("IBM");
+    private final boolean isIBMJdK = System.getProperty("java.vendor").contains("IBM");
 
     static org.slf4j.Logger LOG =
         org.slf4j.LoggerFactory.getLogger(XMLEncryption11Test.class);
@@ -83,14 +83,7 @@ public class XMLEncryption11Test {
     public XMLEncryption11Test() throws Exception {
 
         // Create the comparison strings
-        String filename =
-            "src/test/resources/org/w3c/www/interop/xmlenc-core-11/plaintext.xml";
-        String basedir = System.getProperty("basedir");
-        if (basedir != null && basedir.length() != 0) {
-            filename = basedir + "/" + filename;
-        }
-        File f = new File(filename);
-
+        File f = resolveFile("src/test/resources/org/w3c/www/interop/xmlenc-core-11/plaintext.xml");
         Document doc = XMLUtils.read(new java.io.FileInputStream(f), false);
 
         cardNumber = retrieveCCNumber(doc);
@@ -104,8 +97,7 @@ public class XMLEncryption11Test {
         // Check what algorithms are available
 
         haveISOPadding = false;
-        String algorithmId =
-            JCEMapper.translateURItoJCEID(EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES128);
+        String algorithmId = JCEMapper.translateURItoJCEID(EncryptionConstants.ALGO_ID_BLOCKCIPHER_AES128);
 
         if (algorithmId != null) {
             try {
@@ -126,13 +118,7 @@ public class XMLEncryption11Test {
     @org.junit.jupiter.api.Test
     public void testKeyWrappingRSA2048() throws Exception {
         if (haveISOPadding) {
-            String keystore =
-                "src/test/resources/org/w3c/www/interop/xmlenc-core-11/RSA-2048_SHA256WithRSA.jks";
-            String basedir = System.getProperty("basedir");
-            if (basedir != null && basedir.length() != 0) {
-                keystore = basedir + "/" + keystore;
-            }
-
+            File keystore = resolveFile("src/test/resources/org/w3c/www/interop/xmlenc-core-11/RSA-2048_SHA256WithRSA.jks");
             KeyStore keyStore = KeyStore.getInstance("jks");
             keyStore.load(new java.io.FileInputStream(keystore), "passwd".toCharArray());
 
@@ -142,11 +128,10 @@ public class XMLEncryption11Test {
                 keyStore.getEntry("importkey", new KeyStore.PasswordProtection("passwd".toCharArray()));
             PrivateKey rsaKey = pkEntry.getPrivateKey();
 
-            String filename =
-                "src/test/resources/org/w3c/www/interop/xmlenc-core-11/"
-                + "cipherText__RSA-2048__aes128-gcm__rsa-oaep-mgf1p.xml";
+            File file = resolveFile("src/test/resources/org/w3c/www/interop/xmlenc-core-11/"
+                + "cipherText__RSA-2048__aes128-gcm__rsa-oaep-mgf1p.xml");
 
-            Document dd = decryptElement(filename, rsaKey, (X509Certificate)cert);
+            Document dd = decryptElement(file, rsaKey, (X509Certificate)cert);
             // XMLUtils.outputDOM(dd.getFirstChild(), System.out);
             checkDecryptedDoc(dd, true);
         } else {
@@ -166,13 +151,7 @@ public class XMLEncryption11Test {
         assumeFalse(isIBMJdK);
 
         if (haveISOPadding) {
-            String keystore =
-                "src/test/resources/org/w3c/www/interop/xmlenc-core-11/RSA-2048_SHA256WithRSA.jks";
-            String basedir = System.getProperty("basedir");
-            if (basedir != null && basedir.length() != 0) {
-                keystore = basedir + "/" + keystore;
-            }
-
+            File keystore = resolveFile("src/test/resources/org/w3c/www/interop/xmlenc-core-11/RSA-2048_SHA256WithRSA.jks");
             KeyStore keyStore = KeyStore.getInstance("jks");
             keyStore.load(new java.io.FileInputStream(keystore), "passwd".toCharArray());
 
@@ -183,11 +162,7 @@ public class XMLEncryption11Test {
             PrivateKey rsaKey = pkEntry.getPrivateKey();
 
             // Perform encryption
-            String filename = "src/test/resources/org/w3c/www/interop/xmlenc-core-11/plaintext.xml";
-            if (basedir != null && basedir.length() != 0) {
-                filename = basedir + "/" + filename;
-            }
-            File f = new File(filename);
+            File f = resolveFile("src/test/resources/org/w3c/www/interop/xmlenc-core-11/plaintext.xml");
 
             Document doc = XMLUtils.read(new java.io.FileInputStream(f), false);
 
@@ -230,13 +205,7 @@ public class XMLEncryption11Test {
     @org.junit.jupiter.api.Test
     public void testKeyWrappingRSA2048EncryptDecryptWithSecureRandom() throws Exception {
         if (haveISOPadding) {
-            String keystore =
-                "src/test/resources/org/w3c/www/interop/xmlenc-core-11/RSA-2048_SHA256WithRSA.jks";
-            String basedir = System.getProperty("basedir");
-            if (basedir != null && basedir.length() != 0) {
-                keystore = basedir + "/" + keystore;
-            }
-
+            File keystore = resolveFile("src/test/resources/org/w3c/www/interop/xmlenc-core-11/RSA-2048_SHA256WithRSA.jks");
             KeyStore keyStore = KeyStore.getInstance("jks");
             keyStore.load(new java.io.FileInputStream(keystore), "passwd".toCharArray());
 
@@ -247,12 +216,7 @@ public class XMLEncryption11Test {
             PrivateKey rsaKey = pkEntry.getPrivateKey();
 
             // Perform encryption
-            String filename = "src/test/resources/org/w3c/www/interop/xmlenc-core-11/plaintext.xml";
-            if (basedir != null && basedir.length() != 0) {
-                filename = basedir + "/" + filename;
-            }
-            File f = new File(filename);
-
+            File f = resolveFile("src/test/resources/org/w3c/www/interop/xmlenc-core-11/plaintext.xml");
             Document doc = XMLUtils.read(new java.io.FileInputStream(f), false);
 
             Key sessionKey = getSessionKey("http://www.w3.org/2009/xmlenc11#aes128-gcm");
@@ -295,13 +259,7 @@ public class XMLEncryption11Test {
     @org.junit.jupiter.api.Test
     public void testKeyWrappingRSA3072() throws Exception {
         if (haveISOPadding) {
-            String keystore =
-                "src/test/resources/org/w3c/www/interop/xmlenc-core-11/RSA-3072_SHA256WithRSA.jks";
-            String basedir = System.getProperty("basedir");
-            if (basedir != null && basedir.length() != 0) {
-                keystore = basedir + "/" + keystore;
-            }
-
+            File keystore = resolveFile("src/test/resources/org/w3c/www/interop/xmlenc-core-11/RSA-3072_SHA256WithRSA.jks");
             KeyStore keyStore = KeyStore.getInstance("jks");
             keyStore.load(new java.io.FileInputStream(keystore), "passwd".toCharArray());
 
@@ -311,10 +269,8 @@ public class XMLEncryption11Test {
                 keyStore.getEntry("importkey", new KeyStore.PasswordProtection("passwd".toCharArray()));
             PrivateKey rsaKey = pkEntry.getPrivateKey();
 
-            String filename =
-                "src/test/resources/org/w3c/www/interop/xmlenc-core-11/"
-                + "cipherText__RSA-3072__aes192-gcm__rsa-oaep-mgf1p__Sha256.xml";
-
+            File filename = resolveFile("src/test/resources/org/w3c/www/interop/xmlenc-core-11/"
+                + "cipherText__RSA-3072__aes192-gcm__rsa-oaep-mgf1p__Sha256.xml");
             Document dd = decryptElement(filename, rsaKey, (X509Certificate)cert);
             // XMLUtils.outputDOM(dd.getFirstChild(), System.out);
             checkDecryptedDoc(dd, true);
@@ -334,13 +290,8 @@ public class XMLEncryption11Test {
         assumeFalse(isIBMJdK);
 
         if (haveISOPadding) {
-            String keystore =
-                "src/test/resources/org/w3c/www/interop/xmlenc-core-11/RSA-3072_SHA256WithRSA.jks";
-            String basedir = System.getProperty("basedir");
-            if (basedir != null && basedir.length() != 0) {
-                keystore = basedir + "/" + keystore;
-            }
-
+            File keystore = resolveFile(
+                "src/test/resources/org/w3c/www/interop/xmlenc-core-11/RSA-3072_SHA256WithRSA.jks");
             KeyStore keyStore = KeyStore.getInstance("jks");
             keyStore.load(new java.io.FileInputStream(keystore), "passwd".toCharArray());
 
@@ -351,12 +302,7 @@ public class XMLEncryption11Test {
             PrivateKey rsaKey = pkEntry.getPrivateKey();
 
             // Perform encryption
-            String filename = "src/test/resources/org/w3c/www/interop/xmlenc-core-11/plaintext.xml";
-            if (basedir != null && basedir.length() != 0) {
-                filename = basedir + "/" + filename;
-            }
-            File f = new File(filename);
-
+            File f = resolveFile("src/test/resources/org/w3c/www/interop/xmlenc-core-11/plaintext.xml");
             Document doc = XMLUtils.read(new java.io.FileInputStream(f), false);
 
             Key sessionKey = getSessionKey("http://www.w3.org/2009/xmlenc11#aes192-gcm");
@@ -398,13 +344,7 @@ public class XMLEncryption11Test {
     @org.junit.jupiter.api.Test
     public void testKeyWrappingRSA3072OAEP() throws Exception {
         if (haveISOPadding) {
-            String keystore =
-                "src/test/resources/org/w3c/www/interop/xmlenc-core-11/RSA-3072_SHA256WithRSA.jks";
-            String basedir = System.getProperty("basedir");
-            if (basedir != null && basedir.length() != 0) {
-                keystore = basedir + "/" + keystore;
-            }
-
+            File keystore = resolveFile("src/test/resources/org/w3c/www/interop/xmlenc-core-11/RSA-3072_SHA256WithRSA.jks");
             KeyStore keyStore = KeyStore.getInstance("jks");
             keyStore.load(new java.io.FileInputStream(keystore), "passwd".toCharArray());
 
@@ -414,10 +354,9 @@ public class XMLEncryption11Test {
                 keyStore.getEntry("importkey", new KeyStore.PasswordProtection("passwd".toCharArray()));
             PrivateKey rsaKey = pkEntry.getPrivateKey();
 
-            String filename =
+            File filename = resolveFile(
                 "src/test/resources/org/w3c/www/interop/xmlenc-core-11/"
-                + "cipherText__RSA-3072__aes256-gcm__rsa-oaep__Sha384-MGF_Sha1.xml";
-
+                + "cipherText__RSA-3072__aes256-gcm__rsa-oaep__Sha384-MGF_Sha1.xml");
             Document dd = decryptElement(filename, rsaKey, (X509Certificate)cert);
             // XMLUtils.outputDOM(dd.getFirstChild(), System.out);
             checkDecryptedDoc(dd, true);
@@ -435,13 +374,7 @@ public class XMLEncryption11Test {
     @org.junit.jupiter.api.Test
     public void testKeyWrappingRSA3072OAEPEncryptDecrypt() throws Exception {
         if (haveISOPadding) {
-            String keystore =
-                "src/test/resources/org/w3c/www/interop/xmlenc-core-11/RSA-3072_SHA256WithRSA.jks";
-            String basedir = System.getProperty("basedir");
-            if (basedir != null && basedir.length() != 0) {
-                keystore = basedir + "/" + keystore;
-            }
-
+            File keystore = resolveFile("src/test/resources/org/w3c/www/interop/xmlenc-core-11/RSA-3072_SHA256WithRSA.jks");
             KeyStore keyStore = KeyStore.getInstance("jks");
             keyStore.load(new java.io.FileInputStream(keystore), "passwd".toCharArray());
 
@@ -452,12 +385,7 @@ public class XMLEncryption11Test {
             PrivateKey rsaKey = pkEntry.getPrivateKey();
 
             // Perform encryption
-            String filename = "src/test/resources/org/w3c/www/interop/xmlenc-core-11/plaintext.xml";
-            if (basedir != null && basedir.length() != 0) {
-                filename = basedir + "/" + filename;
-            }
-            File f = new File(filename);
-
+            File f = resolveFile("src/test/resources/org/w3c/www/interop/xmlenc-core-11/plaintext.xml");
             Document doc = XMLUtils.read(new java.io.FileInputStream(f), false);
 
             Key sessionKey = getSessionKey("http://www.w3.org/2009/xmlenc11#aes256-gcm");
@@ -499,13 +427,7 @@ public class XMLEncryption11Test {
     @org.junit.jupiter.api.Test
     public void testKeyWrappingRSA4096() throws Exception {
         if (haveISOPadding) {
-            String keystore =
-                "src/test/resources/org/w3c/www/interop/xmlenc-core-11/RSA-4096_SHA256WithRSA.jks";
-            String basedir = System.getProperty("basedir");
-            if (basedir != null && basedir.length() != 0) {
-                keystore = basedir + "/" + keystore;
-            }
-
+            File keystore = resolveFile("src/test/resources/org/w3c/www/interop/xmlenc-core-11/RSA-4096_SHA256WithRSA.jks");
             KeyStore keyStore = KeyStore.getInstance("jks");
             keyStore.load(new java.io.FileInputStream(keystore), "passwd".toCharArray());
 
@@ -515,10 +437,9 @@ public class XMLEncryption11Test {
                 keyStore.getEntry("importkey", new KeyStore.PasswordProtection("passwd".toCharArray()));
             PrivateKey rsaKey = pkEntry.getPrivateKey();
 
-            String filename =
+            File filename = resolveFile(
                 "src/test/resources/org/w3c/www/interop/xmlenc-core-11/"
-                + "cipherText__RSA-4096__aes256-gcm__rsa-oaep__Sha512-MGF_Sha1_PSource.xml";
-
+                + "cipherText__RSA-4096__aes256-gcm__rsa-oaep__Sha512-MGF_Sha1_PSource.xml");
             Document dd = decryptElement(filename, rsaKey, (X509Certificate)cert);
             // XMLUtils.outputDOM(dd.getFirstChild(), System.out);
             checkDecryptedDoc(dd, true);
@@ -536,13 +457,7 @@ public class XMLEncryption11Test {
     @org.junit.jupiter.api.Test
     public void testKeyWrappingRSA4096EncryptDecrypt() throws Exception {
         if (haveISOPadding) {
-            String keystore =
-                "src/test/resources/org/w3c/www/interop/xmlenc-core-11/RSA-4096_SHA256WithRSA.jks";
-            String basedir = System.getProperty("basedir");
-            if (basedir != null && basedir.length() != 0) {
-                keystore = basedir + "/" + keystore;
-            }
-
+            File keystore = resolveFile("src/test/resources/org/w3c/www/interop/xmlenc-core-11/RSA-4096_SHA256WithRSA.jks");
             KeyStore keyStore = KeyStore.getInstance("jks");
             keyStore.load(new java.io.FileInputStream(keystore), "passwd".toCharArray());
 
@@ -553,12 +468,7 @@ public class XMLEncryption11Test {
             PrivateKey rsaKey = pkEntry.getPrivateKey();
 
             // Perform encryption
-            String filename = "src/test/resources/org/w3c/www/interop/xmlenc-core-11/plaintext.xml";
-            if (basedir != null && basedir.length() != 0) {
-                filename = basedir + "/" + filename;
-            }
-            File f = new File(filename);
-
+            File f = resolveFile("src/test/resources/org/w3c/www/interop/xmlenc-core-11/plaintext.xml");
             Document doc = XMLUtils.read(new java.io.FileInputStream(f), false);
 
             Key sessionKey = getSessionKey("http://www.w3.org/2009/xmlenc11#aes256-gcm");
@@ -597,13 +507,7 @@ public class XMLEncryption11Test {
     @org.junit.jupiter.api.Test
     public void testKeyWrappingRSA4096EncryptDecryptSHA224() throws Exception {
         if (haveISOPadding) {
-            String keystore =
-                    "src/test/resources/org/w3c/www/interop/xmlenc-core-11/RSA-4096_SHA256WithRSA.jks";
-            String basedir = System.getProperty("basedir");
-            if (basedir != null && basedir.length() != 0) {
-                keystore = basedir + "/" + keystore;
-            }
-
+            File keystore = resolveFile("src/test/resources/org/w3c/www/interop/xmlenc-core-11/RSA-4096_SHA256WithRSA.jks");
             KeyStore keyStore = KeyStore.getInstance("jks");
             keyStore.load(new java.io.FileInputStream(keystore), "passwd".toCharArray());
 
@@ -614,12 +518,7 @@ public class XMLEncryption11Test {
             PrivateKey rsaKey = pkEntry.getPrivateKey();
 
             // Perform encryption
-            String filename = "src/test/resources/org/w3c/www/interop/xmlenc-core-11/plaintext.xml";
-            if (basedir != null && basedir.length() != 0) {
-                filename = basedir + "/" + filename;
-            }
-            File f = new File(filename);
-
+            File f = resolveFile("src/test/resources/org/w3c/www/interop/xmlenc-core-11/plaintext.xml");
             Document doc = XMLUtils.read(new java.io.FileInputStream(f), false);
 
             Key sessionKey = getSessionKey("http://www.w3.org/2009/xmlenc11#aes256-gcm");
@@ -664,16 +563,9 @@ public class XMLEncryption11Test {
      * @param filename File to decrypt from
      * @param key The Key to use for decryption
      */
-    private Document decryptElement(String filename, Key rsaKey, X509Certificate rsaCert) throws Exception {
+    private Document decryptElement(File file, Key rsaKey, X509Certificate rsaCert) throws Exception {
         // Parse the document in question
-        String basedir = System.getProperty("basedir");
-        if (basedir != null && basedir.length() != 0) {
-            filename = basedir + "/" + filename;
-        }
-        File f = new File(filename);
-
-        Document doc = XMLUtils.read(new java.io.FileInputStream(f), false);
-
+        Document doc = XMLUtils.read(new java.io.FileInputStream(file), false);
         return decryptElement(doc, rsaKey, rsaCert);
     }
 
@@ -691,10 +583,7 @@ public class XMLEncryption11Test {
         XMLCipher cipher = XMLCipher.getInstance();
 
         // Need to pre-load the Encrypted Data so we can get the key info
-        Element ee =
-            (Element) doc.getElementsByTagNameNS(
-                "http://www.w3.org/2001/04/xmlenc#", "EncryptedData"
-            ).item(0);
+        Element ee = (Element) doc.getElementsByTagNameNS("http://www.w3.org/2001/04/xmlenc#", "EncryptedData").item(0);
         cipher.init(XMLCipher.DECRYPT_MODE, null);
         EncryptedData encryptedData = cipher.loadEncryptedData(doc, ee);
 
@@ -708,10 +597,7 @@ public class XMLEncryption11Test {
 
         XMLCipher cipher2 = XMLCipher.getInstance();
         cipher2.init(XMLCipher.UNWRAP_MODE, rsaKey);
-        Key key =
-            cipher2.decryptKey(
-                encryptedKey, encryptedData.getEncryptionMethod().getAlgorithm()
-            );
+        Key key = cipher2.decryptKey(encryptedKey, encryptedData.getEncryptionMethod().getAlgorithm());
 
         cipher.init(XMLCipher.DECRYPT_MODE, key);
         Document dd = cipher.doFinal(doc, ee);
diff --git a/src/test/java/org/apache/xml/security/test/dom/interop/BaltimoreTest.java b/src/test/java/org/apache/xml/security/test/dom/interop/BaltimoreTest.java
index 06647c70..bd19318f 100644
--- a/src/test/java/org/apache/xml/security/test/dom/interop/BaltimoreTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/interop/BaltimoreTest.java
@@ -22,7 +22,9 @@ import org.apache.xml.security.signature.MissingResourceFailureException;
 import org.apache.xml.security.test.dom.utils.resolver.OfflineResolver;
 import org.apache.xml.security.utils.resolver.ResourceResolverSpi;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
 
+import java.io.File;
 import java.nio.charset.StandardCharsets;
 
 import org.apache.xml.security.signature.XMLSignatureException;
@@ -44,22 +46,15 @@ public class BaltimoreTest extends InteropTestBase {
         org.slf4j.LoggerFactory.getLogger(BaltimoreTest.class);
 
     /** Field merlinsDir15           */
-    static String merlinsDir15 =
-        "src/test/resources/ie/baltimore/merlin-examples/merlin-xmldsig-fifteen/";
-    static String merlinsDir16 =
-        "src/test/resources/ie/baltimore/merlin-examples/merlin-xmldsig-sixteen";
-    static String merlinsDir23 =
-        "src/test/resources/ie/baltimore/merlin-examples/merlin-xmldsig-twenty-three/";
+    static File merlinsDir15;
+    static File merlinsDir16;
+    static File merlinsDir23;
 
     static {
         System.setProperty("org.apache.xml.security.allowUnsafeResourceResolving", "true");
-
-        String basedir = System.getProperty("basedir");
-        if(basedir != null && basedir.length() != 0) {
-            merlinsDir15 = basedir + "/" + merlinsDir15;
-            merlinsDir16 = basedir + "/" + merlinsDir16;
-            merlinsDir23 = basedir + "/" + merlinsDir23;
-        }
+        merlinsDir15 = resolveFile("src", "test", "resources", "ie", "baltimore", "merlin-examples", "merlin-xmldsig-fifteen");
+        merlinsDir16 = resolveFile("src", "test", "resources", "ie", "baltimore", "merlin-examples", "merlin-xmldsig-sixteen");
+        merlinsDir23 = resolveFile("src", "test", "resources", "ie", "baltimore", "merlin-examples", "merlin-xmldsig-twenty-three");
         org.apache.xml.security.Init.init();
     }
 
@@ -78,7 +73,7 @@ public class BaltimoreTest extends InteropTestBase {
     @org.junit.jupiter.api.Test
     public void test_fifteen_enveloping_hmac_sha1() throws Exception {
 
-        String filename = merlinsDir15 + "signature-enveloping-hmac-sha1.xml";
+        File filename = new File(merlinsDir15, "signature-enveloping-hmac-sha1.xml");
         boolean verify = this.verifyHMAC(filename, new OfflineResolver(), false,
                                          "secret".getBytes(StandardCharsets.US_ASCII));
 
@@ -86,7 +81,7 @@ public class BaltimoreTest extends InteropTestBase {
             LOG.error("Verification failed for " + filename);
         }
 
-        assertTrue(verify, filename);
+        assertTrue(verify, filename.toString());
     }
 
     /**
@@ -97,7 +92,7 @@ public class BaltimoreTest extends InteropTestBase {
     @org.junit.jupiter.api.Test
     public void test_fifteen_enveloping_hmac_sha1_40() throws Exception {
 
-        String filename = merlinsDir15 + "signature-enveloping-hmac-sha1-40.xml";
+        File filename = new File(merlinsDir15, "signature-enveloping-hmac-sha1-40.xml");
         ResourceResolverSpi resolver = new OfflineResolver();
         boolean followManifests = false;
         byte[] hmacKey = "secret".getBytes(StandardCharsets.US_ASCII);
@@ -123,7 +118,7 @@ public class BaltimoreTest extends InteropTestBase {
     @org.junit.jupiter.api.Test
     public void test_fifteen_enveloped_dsa() throws Exception {
 
-        String filename = merlinsDir15 + "signature-enveloped-dsa.xml";
+        File filename = new File(merlinsDir15, "signature-enveloped-dsa.xml");
         ResourceResolverSpi resolver = new OfflineResolver();
         boolean followManifests = false;
         boolean verify = false;
@@ -139,7 +134,7 @@ public class BaltimoreTest extends InteropTestBase {
             LOG.error("Verification failed for " + filename);
         }
 
-        assertTrue(verify, filename);
+        assertTrue(verify, filename.toString());
     }
 
     /**
@@ -150,7 +145,7 @@ public class BaltimoreTest extends InteropTestBase {
     @org.junit.jupiter.api.Test
     public void test_fifteen_enveloping_b64_dsa() throws Exception {
 
-        String filename = merlinsDir15 + "signature-enveloping-b64-dsa.xml";
+        File filename = new File(merlinsDir15, "signature-enveloping-b64-dsa.xml");
         ResourceResolverSpi resolver = null;
         boolean followManifests = false;
         boolean verify = false;
@@ -166,7 +161,7 @@ public class BaltimoreTest extends InteropTestBase {
             LOG.error("Verification failed for " + filename);
         }
 
-        assertTrue(verify, filename);
+        assertTrue(verify, filename.toString());
     }
 
     /**
@@ -177,7 +172,7 @@ public class BaltimoreTest extends InteropTestBase {
     @org.junit.jupiter.api.Test
     public void test_fifteen_enveloping_dsa() throws Exception {
 
-        String filename = merlinsDir15 + "signature-enveloping-dsa.xml";
+        File filename = new File(merlinsDir15, "signature-enveloping-dsa.xml");
         ResourceResolverSpi resolver = new OfflineResolver();
         boolean followManifests = false;
         boolean verify = false;
@@ -193,7 +188,7 @@ public class BaltimoreTest extends InteropTestBase {
             LOG.error("Verification failed for " + filename);
         }
 
-        assertTrue(verify, filename);
+        assertTrue(verify, filename.toString());
     }
 
     /**
@@ -204,7 +199,7 @@ public class BaltimoreTest extends InteropTestBase {
     @org.junit.jupiter.api.Test
     public void test_fifteen_enveloping_rsa() throws Exception {
 
-        String filename = merlinsDir15 + "signature-enveloping-rsa.xml";
+        File filename = new File(merlinsDir15, "signature-enveloping-rsa.xml");
         ResourceResolverSpi resolver = new OfflineResolver();
         boolean followManifests = false;
         boolean verify = false;
@@ -220,7 +215,7 @@ public class BaltimoreTest extends InteropTestBase {
             LOG.error("Verification failed for " + filename);
         }
 
-        assertTrue(verify, filename);
+        assertTrue(verify, filename.toString());
     }
 
     /**
@@ -231,7 +226,7 @@ public class BaltimoreTest extends InteropTestBase {
     @org.junit.jupiter.api.Test
     public void test_fifteen_external_b64_dsa() throws Exception {
 
-        String filename = merlinsDir15 + "signature-external-b64-dsa.xml";
+        File filename = new File(merlinsDir15, "signature-external-b64-dsa.xml");
         ResourceResolverSpi resolver = new OfflineResolver();
         boolean followManifests = false;
         boolean verify = false;
@@ -247,7 +242,7 @@ public class BaltimoreTest extends InteropTestBase {
             LOG.error("Verification failed for " + filename);
         }
 
-        assertTrue(verify, filename);
+        assertTrue(verify, filename.toString());
     }
 
     /**
@@ -258,7 +253,7 @@ public class BaltimoreTest extends InteropTestBase {
     @org.junit.jupiter.api.Test
     public void test_fifteen_external_dsa() throws Exception {
 
-        String filename = merlinsDir15 + "signature-external-dsa.xml";
+        File filename = new File(merlinsDir15, "signature-external-dsa.xml");
         ResourceResolverSpi resolver = new OfflineResolver();
         boolean followManifests = false;
         boolean verify = false;
@@ -274,7 +269,7 @@ public class BaltimoreTest extends InteropTestBase {
             LOG.error("Verification failed for " + filename);
         }
 
-        assertTrue(verify, filename);
+        assertTrue(verify, filename.toString());
     }
 
     /**
@@ -284,8 +279,7 @@ public class BaltimoreTest extends InteropTestBase {
     @org.junit.jupiter.api.Test
     public void test_sixteen_bad_signature() throws Exception {
 
-        String filename =
-            merlinsDir16 + "/bad-signature.xml";
+        File filename = new File(merlinsDir16, "bad-signature.xml");
         ResourceResolverSpi resolver = new OfflineResolver();
         boolean followManifests = false;
 
@@ -305,7 +299,7 @@ public class BaltimoreTest extends InteropTestBase {
     @org.junit.jupiter.api.Test
     public void test_twenty_three_enveloping_hmac_sha1() throws Exception {
 
-        String filename = merlinsDir23 + "signature-enveloping-hmac-sha1.xml";
+        File filename = new File(merlinsDir23, "signature-enveloping-hmac-sha1.xml");
         boolean verify = this.verifyHMAC(filename, new OfflineResolver(), false,
                                          "secret".getBytes(StandardCharsets.US_ASCII));
 
@@ -313,7 +307,7 @@ public class BaltimoreTest extends InteropTestBase {
             LOG.error("Verification failed for " + filename);
         }
 
-        assertTrue(verify, filename);
+        assertTrue(verify, filename.toString());
     }
 
     /**
@@ -324,7 +318,7 @@ public class BaltimoreTest extends InteropTestBase {
     @org.junit.jupiter.api.Test
     public void test_twenty_three_enveloping_hmac_sha1_40() throws Exception {
 
-        String filename = merlinsDir23 + "signature-enveloping-hmac-sha1-40.xml";
+        File filename = new File(merlinsDir23, "signature-enveloping-hmac-sha1-40.xml");
         ResourceResolverSpi resolver = new OfflineResolver();
         boolean followManifests = false;
         byte[] hmacKey = "secret".getBytes(StandardCharsets.US_ASCII);
@@ -350,7 +344,7 @@ public class BaltimoreTest extends InteropTestBase {
     @org.junit.jupiter.api.Test
     public void test_twenty_three_enveloped_dsa() throws Exception {
 
-        String filename = merlinsDir23 + "signature-enveloped-dsa.xml";
+        File filename = new File(merlinsDir23, "signature-enveloped-dsa.xml");
         ResourceResolverSpi resolver = new OfflineResolver();
         boolean followManifests = false;
         boolean verify = false;
@@ -366,7 +360,7 @@ public class BaltimoreTest extends InteropTestBase {
             LOG.error("Verification failed for " + filename);
         }
 
-        assertTrue(verify, filename);
+        assertTrue(verify, filename.toString());
     }
 
     /**
@@ -377,7 +371,7 @@ public class BaltimoreTest extends InteropTestBase {
     @org.junit.jupiter.api.Test
     public void test_twenty_three_enveloping_b64_dsa() throws Exception {
 
-        String filename = merlinsDir23 + "signature-enveloping-b64-dsa.xml";
+        File filename = new File(merlinsDir23, "signature-enveloping-b64-dsa.xml");
         ResourceResolverSpi resolver = null;
         boolean followManifests = false;
         boolean verify = false;
@@ -393,7 +387,7 @@ public class BaltimoreTest extends InteropTestBase {
             LOG.error("Verification failed for " + filename);
         }
 
-        assertTrue(verify, filename);
+        assertTrue(verify, filename.toString());
     }
 
     /**
@@ -404,7 +398,7 @@ public class BaltimoreTest extends InteropTestBase {
     @org.junit.jupiter.api.Test
     public void test_twenty_three_enveloping_dsa() throws Exception {
 
-        String filename = merlinsDir23 + "signature-enveloping-dsa.xml";
+        File filename = new File(merlinsDir23, "signature-enveloping-dsa.xml");
         ResourceResolverSpi resolver = new OfflineResolver();
         boolean followManifests = false;
         boolean verify = false;
@@ -420,7 +414,7 @@ public class BaltimoreTest extends InteropTestBase {
             LOG.error("Verification failed for " + filename);
         }
 
-        assertTrue(verify, filename);
+        assertTrue(verify, filename.toString());
     }
 
     /**
@@ -431,7 +425,7 @@ public class BaltimoreTest extends InteropTestBase {
     @org.junit.jupiter.api.Test
     public void test_twenty_three_enveloping_rsa() throws Exception {
 
-        String filename = merlinsDir23 + "signature-enveloping-rsa.xml";
+        File filename = new File(merlinsDir23, "signature-enveloping-rsa.xml");
         ResourceResolverSpi resolver = new OfflineResolver();
         boolean followManifests = false;
         boolean verify = false;
@@ -447,7 +441,7 @@ public class BaltimoreTest extends InteropTestBase {
             LOG.error("Verification failed for " + filename);
         }
 
-        assertTrue(verify, filename);
+        assertTrue(verify, filename.toString());
     }
 
     /**
@@ -458,7 +452,7 @@ public class BaltimoreTest extends InteropTestBase {
     @org.junit.jupiter.api.Test
     public void test_twenty_three_external_b64_dsa() throws Exception {
 
-        String filename = merlinsDir23 + "signature-external-b64-dsa.xml";
+        File filename = new File(merlinsDir23, "signature-external-b64-dsa.xml");
         ResourceResolverSpi resolver = new OfflineResolver();
         boolean followManifests = false;
         boolean verify = false;
@@ -474,7 +468,7 @@ public class BaltimoreTest extends InteropTestBase {
             LOG.error("Verification failed for " + filename);
         }
 
-        assertTrue(verify, filename);
+        assertTrue(verify, filename.toString());
     }
 
     /**
@@ -485,7 +479,7 @@ public class BaltimoreTest extends InteropTestBase {
     @org.junit.jupiter.api.Test
     public void test_twenty_three_external_dsa() throws Exception {
 
-        String filename = merlinsDir23 + "signature-external-dsa.xml";
+        File filename = new File(merlinsDir23, "signature-external-dsa.xml");
         ResourceResolverSpi resolver = new OfflineResolver();
         boolean followManifests = false;
         boolean verify = false;
@@ -501,7 +495,7 @@ public class BaltimoreTest extends InteropTestBase {
             LOG.error("Verification failed for " + filename);
         }
 
-        assertTrue(verify, filename);
+        assertTrue(verify, filename.toString());
     }
 
 }
\ No newline at end of file
diff --git a/src/test/java/org/apache/xml/security/test/dom/interop/BaltimoreXalanTest.java b/src/test/java/org/apache/xml/security/test/dom/interop/BaltimoreXalanTest.java
index aa49754b..78d611d1 100644
--- a/src/test/java/org/apache/xml/security/test/dom/interop/BaltimoreXalanTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/interop/BaltimoreXalanTest.java
@@ -18,61 +18,50 @@
  */
 package org.apache.xml.security.test.dom.interop;
 
+import java.io.File;
+
 import org.apache.xml.security.test.dom.utils.resolver.OfflineResolver;
 import org.apache.xml.security.utils.resolver.ResourceResolverSpi;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
 
-import static org.junit.jupiter.api.Assertions.*;
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 
 /**
  * This test is to ensure interoperability with the examples provided by Merlin Huges
  * from Baltimore using KeyTools XML. These test vectors are located in the directory
- * <CODE>data/ie/baltimore/merlin-examples/</CODE>. These tests require Xalan for the here() function
+ * <CODE>ie/baltimore/merlin-examples/</CODE>. These tests require Xalan for the here() function
  *
  * @see <A HREF="http://www.baltimore.com/keytools/xml/index.html">The KeyTools XML Website</A>
  */
 public class BaltimoreXalanTest extends InteropTestBase {
 
-    private static final String CONFIG_FILE = "config-xalan.xml";
+    private static final String CONFIG_FILE = "/config-xalan.xml";
 
     static org.slf4j.Logger LOG =
         org.slf4j.LoggerFactory.getLogger(BaltimoreXalanTest.class);
 
-    static String merlinsDir16 =
-        "src/test/resources/ie/baltimore/merlin-examples/merlin-xmldsig-sixteen";
-    static String merlinsDir23 =
-        "src/test/resources/ie/baltimore/merlin-examples/merlin-xmldsig-twenty-three/";
-
-    static {
-        System.setProperty("org.apache.xml.security.allowUnsafeResourceResolving", "true");
-
-        String basedir = System.getProperty("basedir");
-        if(basedir != null && basedir.length() != 0) {
-            merlinsDir16 = basedir + "/" + merlinsDir16;
-            merlinsDir23 = basedir + "/" + merlinsDir23;
-        }
-    }
+    private static final File merlinsDir16 = resolveFile("src", "test", "resources", "ie", "baltimore",
+        "merlin-examples", "merlin-xmldsig-sixteen");
+    private static final File merlinsDir23 = resolveFile("src", "test", "resources", "ie", "baltimore",
+        "merlin-examples", "merlin-xmldsig-twenty-three");
 
     @BeforeAll
     public static void setup() {
+        System.setProperty("org.apache.xml.security.allowUnsafeResourceResolving", "true");
         System.setProperty("org.apache.xml.security.resource.config", CONFIG_FILE);
+        org.apache.xml.security.Init.init();
     }
 
     @AfterAll
     public static void cleanup() {
+        System.clearProperty("org.apache.xml.security.allowUnsafeResourceResolving");
         System.clearProperty("org.apache.xml.security.resource.config");
     }
 
-    /**
-     * Constructor BaltimoreTest
-     */
-    public BaltimoreXalanTest() {
-        super();
-        org.apache.xml.security.Init.init();
-    }
-
     /**
      * Method test_sixteen_external_dsa
      *
@@ -81,24 +70,23 @@ public class BaltimoreXalanTest extends InteropTestBase {
     @org.junit.jupiter.api.Test
     public void test_sixteen_external_dsa() throws Exception {
 
-        String filename =
-            merlinsDir16 + "/signature.xml";
+        File file = new File(merlinsDir16, "signature.xml");
         ResourceResolverSpi resolver = new OfflineResolver();
         boolean followManifests = false;
         boolean verify = false;
 
         try {
-            verify = this.verify(filename, resolver, followManifests);
+            verify = this.verify(file, resolver, followManifests);
         } catch (RuntimeException ex) {
-            LOG.error("Verification crashed for " + filename);
+            LOG.error("Verification crashed for " + file);
             throw ex;
         }
 
         if (!verify) {
-            LOG.error("Verification failed for " + filename);
+            LOG.error("Verification failed for " + file);
         }
 
-        assertTrue(verify, filename);
+        assertTrue(verify, file.toString());
     }
 
     /**
@@ -112,8 +100,7 @@ public class BaltimoreXalanTest extends InteropTestBase {
     @org.junit.jupiter.api.Test
     public void test_sixteen_bad_signature() throws Exception {
 
-        String filename =
-                merlinsDir16 + "/bad-signature.xml";
+        File filename = new File(merlinsDir16 + "/bad-signature.xml");
         ResourceResolverSpi resolver = new OfflineResolver();
         boolean followManifests = false;
         boolean verify = false;
@@ -129,7 +116,7 @@ public class BaltimoreXalanTest extends InteropTestBase {
             LOG.error("Verification passed (should have failed) for " + filename);
         }
 
-        assertFalse(verify, filename);
+        assertFalse(verify, filename.toString());
     }
 
 
@@ -141,8 +128,7 @@ public class BaltimoreXalanTest extends InteropTestBase {
     @org.junit.jupiter.api.Test
     public void test_twenty_three_external_dsa_2() throws Exception {
 
-        String filename =
-            merlinsDir23 + "signature.xml";
+        File filename = new File(merlinsDir23, "signature.xml");
         ResourceResolverSpi resolver = new OfflineResolver();
         boolean followManifests = false;
         boolean verify = false;
@@ -158,7 +144,7 @@ public class BaltimoreXalanTest extends InteropTestBase {
             LOG.error("Verification failed for " + filename);
         }
 
-        assertTrue(verify, filename);
+        assertTrue(verify, filename.toString());
     }
 
 }
\ No newline at end of file
diff --git a/src/test/java/org/apache/xml/security/test/dom/interop/IAIKTest.java b/src/test/java/org/apache/xml/security/test/dom/interop/IAIKTest.java
index 38404c51..f5d43d45 100644
--- a/src/test/java/org/apache/xml/security/test/dom/interop/IAIKTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/interop/IAIKTest.java
@@ -18,17 +18,19 @@
  */
 package org.apache.xml.security.test.dom.interop;
 
-import org.apache.xml.security.test.dom.utils.resolver.OfflineResolver;
-
-
+import java.io.File;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Path;
 
 import org.apache.xml.security.signature.XMLSignatureException;
+import org.apache.xml.security.test.dom.utils.resolver.OfflineResolver;
 import org.apache.xml.security.utils.resolver.ResourceResolver;
 import org.apache.xml.security.utils.resolver.ResourceResolverSpi;
 import org.apache.xml.security.utils.resolver.implementations.ResolverAnonymous;
 import org.apache.xml.security.utils.resolver.implementations.ResolverLocalFilesystem;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolvePath;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 
@@ -46,24 +48,14 @@ public class IAIKTest extends InteropTestBase {
         org.slf4j.LoggerFactory.getLogger(IAIKTest.class);
 
     /** Field gregorsDir */
-    static String gregorsDir = "src/test/resources/at/iaik/ixsil/";
+    static Path gregorsDir;
 
     static {
-        String basedir = System.getProperty("basedir");
-        if (basedir != null && basedir.length() != 0) {
-            gregorsDir = basedir + "/" + gregorsDir;
-        }
+        gregorsDir = resolvePath("src", "test", "resources", "at", "iaik", "ixsil");
         org.apache.xml.security.Init.init();
         ResourceResolver.register(new ResolverLocalFilesystem(), false);
     }
 
-    /**
-     * Constructor IAIKTest
-     */
-    public IAIKTest() {
-        super();
-    }
-
     /**
      * Method test_signatureAlgorithms_signatures_hMACShortSignature
      *
@@ -73,8 +65,7 @@ public class IAIKTest extends InteropTestBase {
     public void test_signatureAlgorithms_signatures_hMACShortSignature()
         throws Exception {
 
-        String filename =
-            gregorsDir + "signatureAlgorithms/signatures/hMACShortSignature.xml";
+        File filename = resolveFile(gregorsDir, "signatureAlgorithms", "signatures", "hMACShortSignature.xml");
         ResourceResolverSpi resolver = new OfflineResolver();
         boolean followManifests = false;
         byte[] hmacKey = "secret".getBytes(StandardCharsets.US_ASCII);
@@ -101,7 +92,7 @@ public class IAIKTest extends InteropTestBase {
     public void test_signatureAlgorithms_signatures_hMACSignature()
         throws Exception {
 
-        String filename = gregorsDir + "signatureAlgorithms/signatures/hMACSignature.xml";
+        File filename = resolveFile(gregorsDir, "signatureAlgorithms", "signatures", "hMACSignature.xml");
         ResourceResolverSpi resolver = new OfflineResolver();
         boolean followManifests = false;
         byte[] hmacKey = "secret".getBytes(StandardCharsets.US_ASCII);
@@ -119,7 +110,7 @@ public class IAIKTest extends InteropTestBase {
             LOG.error("Verification failed for " + filename);
         }
 
-        assertTrue(verify, filename);
+        assertTrue(verify, filename.toString());
     }
 
     /**
@@ -131,7 +122,7 @@ public class IAIKTest extends InteropTestBase {
     public void test_coreFeatures_signatures_manifestSignature_core()
         throws Exception {
 
-        String filename = gregorsDir + "coreFeatures/signatures/manifestSignature.xml";
+        File filename = resolveFile(gregorsDir, "coreFeatures", "signatures", "manifestSignature.xml");
         ResourceResolverSpi resolver = null;
         boolean followManifests = false;
         boolean verify = false;
@@ -160,7 +151,7 @@ public class IAIKTest extends InteropTestBase {
     public void test_coreFeatures_signatures_manifestSignature_manifest()
         throws Exception {
 
-        String filename = gregorsDir + "coreFeatures/signatures/manifestSignature.xml";
+        File filename = resolveFile(gregorsDir, "coreFeatures", "signatures", "manifestSignature.xml");
         ResourceResolverSpi resolver = null;
         boolean followManifests = true;
         boolean verify = false;
@@ -189,7 +180,7 @@ public class IAIKTest extends InteropTestBase {
     public void test_coreFeatures_signatures_signatureTypesSignature()
         throws Exception {
 
-        String filename = gregorsDir + "coreFeatures/signatures/signatureTypesSignature.xml";
+        File filename = resolveFile(gregorsDir, "coreFeatures", "signatures", "signatureTypesSignature.xml");
         ResourceResolverSpi resolver = new OfflineResolver();
         boolean followManifests = false;
         boolean verify = false;
@@ -218,10 +209,9 @@ public class IAIKTest extends InteropTestBase {
     public void test_coreFeatures_signatures_anonymousReferenceSignature()
         throws Exception {
 
-        String filename =
-            gregorsDir + "coreFeatures/signatures/anonymousReferenceSignature.xml";
-        String anonymousRef =
-            gregorsDir + "coreFeatures/samples/anonymousReferenceContent.xml";
+        File filename = resolveFile(gregorsDir, "coreFeatures", "signatures", "anonymousReferenceSignature.xml");
+        String anonymousRef = resolveFile(gregorsDir, "coreFeatures", "samples", "anonymousReferenceContent.xml")
+            .getAbsolutePath();
         ResourceResolverSpi resolver = new ResolverAnonymous(anonymousRef);
         boolean followManifests = false;
         boolean verify = false;
@@ -238,7 +228,7 @@ public class IAIKTest extends InteropTestBase {
             LOG.error("Verification failed for " + filename);
         }
 
-        assertTrue(verify, filename);
+        assertTrue(verify, filename.toString());
     }
 
     /**
@@ -250,7 +240,7 @@ public class IAIKTest extends InteropTestBase {
     public void test_signatureAlgorithms_signatures_dSASignature()
         throws Exception {
 
-        String filename = gregorsDir + "signatureAlgorithms/signatures/dSASignature.xml";
+        File filename = resolveFile(gregorsDir, "signatureAlgorithms", "signatures", "dSASignature.xml");
         ResourceResolverSpi resolver = null;
         boolean followManifests = false;
         boolean verify = false;
@@ -267,7 +257,7 @@ public class IAIKTest extends InteropTestBase {
             LOG.error("Verification failed for " + filename);
         }
 
-        assertTrue(verify, filename);
+        assertTrue(verify, filename.toString());
     }
 
     /**
@@ -279,7 +269,7 @@ public class IAIKTest extends InteropTestBase {
     public void test_signatureAlgorithms_signatures_rSASignature()
         throws Exception {
 
-        String filename = gregorsDir + "signatureAlgorithms/signatures/rSASignature.xml";
+        File filename = resolveFile(gregorsDir, "signatureAlgorithms", "signatures", "rSASignature.xml");
         ResourceResolverSpi resolver = null;
         boolean followManifests = false;
         boolean verify = false;
@@ -296,7 +286,7 @@ public class IAIKTest extends InteropTestBase {
             LOG.error("Verification failed for " + filename);
         }
 
-        assertTrue(verify, filename);
+        assertTrue(verify, filename.toString());
     }
 
     /**
@@ -308,7 +298,7 @@ public class IAIKTest extends InteropTestBase {
     public void test_transforms_signatures_base64DecodeSignature()
         throws Exception {
 
-        String filename = gregorsDir + "transforms/signatures/base64DecodeSignature.xml";
+        File filename = resolveFile(gregorsDir, "transforms", "signatures", "base64DecodeSignature.xml");
         ResourceResolverSpi resolver = null;
         boolean followManifests = false;
         boolean verify = false;
@@ -325,7 +315,7 @@ public class IAIKTest extends InteropTestBase {
             LOG.error("Verification failed for " + filename);
         }
 
-        assertTrue(verify, filename);
+        assertTrue(verify, filename.toString());
     }
 
     /**
@@ -336,7 +326,7 @@ public class IAIKTest extends InteropTestBase {
     @org.junit.jupiter.api.Test
     public void test_transforms_signatures_c14nSignature() throws Exception {
 
-        String filename = gregorsDir + "transforms/signatures/c14nSignature.xml";
+        File filename = resolveFile(gregorsDir, "transforms", "signatures", "c14nSignature.xml");
         ResourceResolverSpi resolver = null;
         boolean followManifests = false;
         boolean verify = false;
@@ -353,7 +343,7 @@ public class IAIKTest extends InteropTestBase {
             LOG.error("Verification failed for " + filename);
         }
 
-        assertTrue(verify, filename);
+        assertTrue(verify, filename.toString());
     }
 
     /**
@@ -365,8 +355,7 @@ public class IAIKTest extends InteropTestBase {
     public void test_transforms_signatures_envelopedSignatureSignature()
         throws Exception {
 
-        String filename =
-            gregorsDir + "transforms/signatures/envelopedSignatureSignature.xml";
+        File filename = resolveFile(gregorsDir, "transforms", "signatures", "envelopedSignatureSignature.xml");
         ResourceResolverSpi resolver = null;
         boolean followManifests = false;
         boolean verify = false;
@@ -383,7 +372,7 @@ public class IAIKTest extends InteropTestBase {
             LOG.error("Verification failed for " + filename);
         }
 
-        assertTrue(verify, filename);
+        assertTrue(verify, filename.toString());
     }
 
     /**
@@ -394,7 +383,7 @@ public class IAIKTest extends InteropTestBase {
     @org.junit.jupiter.api.Test
     public void test_transforms_signatures_xPathSignature() throws Exception {
 
-        String filename = gregorsDir + "transforms/signatures/xPathSignature.xml";
+        File filename = resolveFile(gregorsDir, "transforms", "signatures", "xPathSignature.xml");
         ResourceResolverSpi resolver = null;
         boolean followManifests = false;
         boolean verify = false;
@@ -411,7 +400,7 @@ public class IAIKTest extends InteropTestBase {
             LOG.error("Verification failed for " + filename);
         }
 
-        assertTrue(verify, filename);
+        assertTrue(verify, filename.toString());
     }
 
 }
\ No newline at end of file
diff --git a/src/test/java/org/apache/xml/security/test/dom/interop/IBMTest.java b/src/test/java/org/apache/xml/security/test/dom/interop/IBMTest.java
index 01d9aa0b..d996fe63 100644
--- a/src/test/java/org/apache/xml/security/test/dom/interop/IBMTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/interop/IBMTest.java
@@ -20,11 +20,12 @@ package org.apache.xml.security.test.dom.interop;
 
 
 import java.io.File;
+import java.nio.file.Files;
 
 import org.apache.xml.security.test.dom.utils.resolver.OfflineResolver;
-import org.apache.xml.security.utils.JavaUtils;
 import org.apache.xml.security.utils.resolver.ResourceResolverSpi;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
@@ -54,7 +55,7 @@ public class IBMTest extends InteropTestBase {
         org.slf4j.LoggerFactory.getLogger(IBMTest.class);
 
     /** Field kentsDir           */
-    static final String kentsDir = "data/com/ibm/xss4j-20030127/";
+    static final File kentsDir = resolveFile("data", "com", "ibm", "xss4j-20030127");
 
     static {
         org.apache.xml.security.Init.init();
@@ -64,13 +65,10 @@ public class IBMTest extends InteropTestBase {
 
     /**
      * Constructor IBMTest
-     *
-     * @param Name_
      */
     public IBMTest() {
         super();
-        String filename = "src/test/resources/com/ibm/xss4j-20011029/enveloped-rsa.sig";
-        File f = new File(filename);
+        File f = resolveFile("src", "test", "resources", "com", "ibm", "xss4j-20011029", "enveloped-rsa.sig");
         if (f.exists()) {
             runTests = true;
         }
@@ -86,10 +84,10 @@ public class IBMTest extends InteropTestBase {
         if (!runTests) {
             return;
         }
-        String filename = kentsDir + "enveloping-hmac.sig";
+        File filename = new File(kentsDir, "enveloping-hmac.sig");
         ResourceResolverSpi resolver = new OfflineResolver();
         boolean followManifests = false;
-        byte[] hmacKey = JavaUtils.getBytesFromFile(kentsDir + "enveloping-hmac.key");
+        byte[] hmacKey = Files.readAllBytes(new File(kentsDir, "enveloping-hmac.key").toPath());
         boolean verify = false;
 
         try {
@@ -103,7 +101,7 @@ public class IBMTest extends InteropTestBase {
             LOG.error("Verification failed for " + filename);
         }
 
-        assertTrue(verify, filename);
+        assertTrue(verify, filename.toString());
     }
 
     /**
@@ -116,7 +114,7 @@ public class IBMTest extends InteropTestBase {
         if (!runTests) {
             return;
         }
-        String filename = kentsDir + "detached-dsa.sig";
+        File filename = new File(kentsDir, "detached-dsa.sig");
         ResourceResolverSpi resolver = new OfflineResolver();
         boolean followManifests = false;
         boolean verify = false;
@@ -132,7 +130,7 @@ public class IBMTest extends InteropTestBase {
             LOG.error("Verification failed for " + filename);
         }
 
-        assertTrue(verify, filename);
+        assertTrue(verify, filename.toString());
     }
 
     /**
@@ -145,7 +143,7 @@ public class IBMTest extends InteropTestBase {
         if (!runTests) {
             return;
         }
-        String filename = kentsDir + "detached-rsa.sig";
+        File filename = new File(kentsDir, "detached-rsa.sig");
         ResourceResolverSpi resolver = new OfflineResolver();
         boolean followManifests = false;
         boolean verify = false;
@@ -161,7 +159,7 @@ public class IBMTest extends InteropTestBase {
             LOG.error("Verification failed for " + filename);
         }
 
-        assertTrue(verify, filename);
+        assertTrue(verify, filename.toString());
     }
 
     /**
@@ -174,7 +172,7 @@ public class IBMTest extends InteropTestBase {
         if (!runTests) {
             return;
         }
-        String filename = kentsDir + "enveloped-dsa.sig";
+        File filename = new File(kentsDir, "enveloped-dsa.sig");
         ResourceResolverSpi resolver = null;
         boolean followManifests = false;
         boolean verify = false;
@@ -190,7 +188,7 @@ public class IBMTest extends InteropTestBase {
             LOG.error("Verification failed for " + filename);
         }
 
-        assertTrue(verify, filename);
+        assertTrue(verify, filename.toString());
     }
 
     /**
@@ -203,7 +201,7 @@ public class IBMTest extends InteropTestBase {
         if (!runTests) {
             return;
         }
-        String filename = kentsDir + "enveloped-rsa.sig";
+        File filename = new File(kentsDir, "enveloped-rsa.sig");
         ResourceResolverSpi resolver = null;
         boolean followManifests = false;
         boolean verify = false;
@@ -219,7 +217,7 @@ public class IBMTest extends InteropTestBase {
             LOG.error("Verification failed for " + filename);
         }
 
-        assertTrue(verify, filename);
+        assertTrue(verify, filename.toString());
     }
 
     /**
@@ -232,7 +230,7 @@ public class IBMTest extends InteropTestBase {
         if (!runTests) {
             return;
         }
-        String filename = kentsDir + "enveloping-dsa.sig";
+        File filename = new File(kentsDir, "enveloping-dsa.sig");
         ResourceResolverSpi resolver = null;
         boolean followManifests = false;
         boolean verify = false;
@@ -248,7 +246,7 @@ public class IBMTest extends InteropTestBase {
             LOG.error("Verification failed for " + filename);
         }
 
-        assertTrue(verify, filename);
+        assertTrue(verify, filename.toString());
     }
 
     /**
@@ -261,7 +259,7 @@ public class IBMTest extends InteropTestBase {
         if (!runTests) {
             return;
         }
-        String filename = kentsDir + "enveloping-rsa.sig";
+        File filename = new File(kentsDir, "enveloping-rsa.sig");
         ResourceResolverSpi resolver = null;
         boolean followManifests = false;
         boolean verify = false;
@@ -277,7 +275,7 @@ public class IBMTest extends InteropTestBase {
             LOG.error("Verification failed for " + filename);
         }
 
-        assertTrue(verify, filename);
+        assertTrue(verify, filename.toString());
     }
 
     /**
@@ -290,8 +288,8 @@ public class IBMTest extends InteropTestBase {
         if (!runTests) {
             return;
         }
-        String filename = kentsDir + "enveloping-dsa-soaped-broken.sig";
-        if (!new File(filename).exists() ) {
+        File filename = new File(kentsDir, "enveloping-dsa-soaped-broken.sig");
+        if (!filename.exists() ) {
             System.err.println("Couldn't find: " + filename + " and couldn't do the test");
             return;
         }
@@ -310,7 +308,7 @@ public class IBMTest extends InteropTestBase {
             LOG.error("Verification failed for " + filename + ", had to be broken but was successful");
         }
 
-        assertFalse(verify, filename);
+        assertFalse(verify, filename.toString());
     }
 
     /**
diff --git a/src/test/java/org/apache/xml/security/test/dom/interop/InteropTestBase.java b/src/test/java/org/apache/xml/security/test/dom/interop/InteropTestBase.java
index b52823eb..565e3b31 100644
--- a/src/test/java/org/apache/xml/security/test/dom/interop/InteropTestBase.java
+++ b/src/test/java/org/apache/xml/security/test/dom/interop/InteropTestBase.java
@@ -19,7 +19,6 @@
 package org.apache.xml.security.test.dom.interop;
 
 import java.io.File;
-import java.io.FileInputStream;
 import java.security.PublicKey;
 import java.security.cert.X509Certificate;
 import java.util.Iterator;
@@ -53,26 +52,23 @@ public class InteropTestBase {
     /**
      * Method verifyHMAC
      *
-     * @param filename
+     * @param file
      * @param resolver
      * @param hmacKey
      *
      * @throws Exception
      */
-    public boolean verifyHMAC(
-        String filename, ResourceResolverSpi resolver, boolean followManifests, byte[] hmacKey
-    ) throws Exception {
-        File f = new File(filename);
-        org.w3c.dom.Document doc = XMLUtils.read(new FileInputStream(f), false);
+    public boolean verifyHMAC(File file, ResourceResolverSpi resolver, boolean followManifests, byte[] hmacKey)
+        throws Exception {
+        org.w3c.dom.Document doc = XMLUtils.read(file, false);
 
         XPathFactory xpf = XPathFactory.newInstance();
         XPath xpath = xpf.newXPath();
         xpath.setNamespaceContext(new DSNamespaceContext());
 
         String expression = "//ds:Signature[1]";
-        Element sigElement =
-            (Element) xpath.evaluate(expression, doc, XPathConstants.NODE);
-        XMLSignature signature = new XMLSignature(sigElement, f.toURI().toURL().toString());
+        Element sigElement = (Element) xpath.evaluate(expression, doc, XPathConstants.NODE);
+        XMLSignature signature = new XMLSignature(sigElement, file.toURI().toURL().toString());
 
         if (resolver != null) {
             signature.addResourceResolver(resolver);
@@ -85,16 +81,15 @@ public class InteropTestBase {
         return signature.checkSignatureValue(sk);
     }
 
-    public boolean verify(String filename, ResourceResolverSpi resolver, boolean followManifests)
+    public boolean verify(File file, ResourceResolverSpi resolver, boolean followManifests)
         throws Exception {
-        return verify(filename, resolver, followManifests, true);
+        return verify(file, resolver, followManifests, true);
     }
 
-    public boolean verify(String filename, ResourceResolverSpi resolver,
-                          boolean followManifests, boolean secureValidation)
+
+    public boolean verify(File file, ResourceResolverSpi resolver, boolean followManifests, boolean secureValidation)
         throws Exception {
-        File f = new File(filename);
-        org.w3c.dom.Document doc = XMLUtils.read(new FileInputStream(f), false);
+        org.w3c.dom.Document doc = XMLUtils.read(file, false);
 
         XPathFactory xpf = XPathFactory.newInstance();
         XPath xpath = xpf.newXPath();
@@ -103,7 +98,7 @@ public class InteropTestBase {
         String expression = "//ds:Signature[1]";
         Element sigElement =
             (Element) xpath.evaluate(expression, doc, XPathConstants.NODE);
-        XMLSignature signature = new XMLSignature(sigElement, f.toURI().toURL().toString(), secureValidation);
+        XMLSignature signature = new XMLSignature(sigElement, file.toURI().toURL().toString(), secureValidation);
 
         if (resolver != null) {
             signature.addResourceResolver(resolver);
@@ -112,31 +107,25 @@ public class InteropTestBase {
 
 
         KeyInfo ki = signature.getKeyInfo();
-        boolean result = false;
-        if (ki != null) {
-            X509Certificate cert = ki.getX509Certificate();
-
-            if (cert != null) {
-                result = signature.checkSignatureValue(cert);
-            } else {
-                PublicKey pk = ki.getPublicKey();
+        if (ki == null) {
+            throw new RuntimeException("Did not find a KeyInfo");
+        }
+        X509Certificate cert = ki.getX509Certificate();
 
-                if (pk != null) {
-                    result = signature.checkSignatureValue(pk);
-                } else {
-                    throw new RuntimeException(
-                    "Did not find a public key, so I can't check the signature");
-                }
+        final boolean result;
+        if (cert == null) {
+            PublicKey pk = ki.getPublicKey();
+            if (pk == null) {
+                throw new RuntimeException("Did not find a public key, so I can't check the signature");
             }
-            checkReferences(signature);
+            result = signature.checkSignatureValue(pk);
         } else {
-            throw new RuntimeException("Did not find a KeyInfo");
+            result = signature.checkSignatureValue(cert);
         }
+        checkReferences(signature);
         if (!result) {
             for (int i = 0; i < signature.getSignedInfo().getLength(); i++) {
-                boolean refVerify =
-                    signature.getSignedInfo().getVerificationResult(i);
-
+                boolean refVerify = signature.getSignedInfo().getVerificationResult(i);
                 if (refVerify) {
                     LOG.debug("Reference " + i + " was OK");
                 } else {
diff --git a/src/test/java/org/apache/xml/security/test/dom/interop/RSASecurityTest.java b/src/test/java/org/apache/xml/security/test/dom/interop/RSASecurityTest.java
index a24a659d..6e5cc5de 100644
--- a/src/test/java/org/apache/xml/security/test/dom/interop/RSASecurityTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/interop/RSASecurityTest.java
@@ -20,6 +20,9 @@ package org.apache.xml.security.test.dom.interop;
 
 
 
+import java.io.File;
+
+import org.apache.xml.security.test.XmlSecTestEnvironment;
 import org.apache.xml.security.utils.resolver.ResourceResolverSpi;
 
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -38,28 +41,17 @@ public class RSASecurityTest extends InteropTestBase {
         org.slf4j.LoggerFactory.getLogger(RSASecurityTest.class);
 
     /** Field blakesDir           */
-    static String blakesDir =
-        "src/test/resources/com/rsasecurity/bdournaee/";
+    static File blakesDir;
 
     static {
-        String basedir = System.getProperty("basedir");
-        if(basedir != null && basedir.length() != 0) {
-            blakesDir = basedir + "/" + blakesDir;
-        }
+        blakesDir = XmlSecTestEnvironment.resolveFile("src", "test", "resources", "com", "rsasecurity", "bdournaee");
         org.apache.xml.security.Init.init();
     }
 
-    /**
-     * Constructor RSASecurityTest
-     */
-    public RSASecurityTest() {
-        super();
-    }
-
     @org.junit.jupiter.api.Test
     public void test_enveloping() throws Exception {
 
-        String filename = blakesDir + "certj201_enveloping.xml";
+        File filename = new File(blakesDir, "certj201_enveloping.xml");
         boolean followManifests = false;
         ResourceResolverSpi resolver = null;
         boolean verify = this.verify(filename, resolver, followManifests);
@@ -68,13 +60,13 @@ public class RSASecurityTest extends InteropTestBase {
             LOG.error("Verification failed for " + filename);
         }
 
-        assertTrue(verify, filename);
+        assertTrue(verify, filename.toString());
     }
 
     @org.junit.jupiter.api.Test
     public void test_enveloped() throws Exception {
 
-        String filename = blakesDir + "certj201_enveloped.xml";
+        File filename = new File(blakesDir, "certj201_enveloped.xml");
         boolean followManifests = false;
         ResourceResolverSpi resolver = null;
         boolean verify = this.verify(filename, resolver, followManifests);
@@ -83,7 +75,7 @@ public class RSASecurityTest extends InteropTestBase {
             LOG.error("Verification failed for " + filename);
         }
 
-        assertTrue(verify, filename);
+        assertTrue(verify, filename.toString());
     }
 
 }
\ No newline at end of file
diff --git a/src/test/java/org/apache/xml/security/test/dom/keys/DEREncodedKeyValueTest.java b/src/test/java/org/apache/xml/security/test/dom/keys/DEREncodedKeyValueTest.java
index 7bc5dd2d..f73d880e 100644
--- a/src/test/java/org/apache/xml/security/test/dom/keys/DEREncodedKeyValueTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/keys/DEREncodedKeyValueTest.java
@@ -18,12 +18,15 @@
  */
 package org.apache.xml.security.test.dom.keys;
 
+import java.io.File;
 import java.io.FileInputStream;
+import java.nio.file.FileSystems;
 import java.security.KeyFactory;
 import java.security.PublicKey;
 import java.security.spec.X509EncodedKeySpec;
 
 import org.apache.xml.security.keys.content.DEREncodedKeyValue;
+import org.apache.xml.security.test.XmlSecTestEnvironment;
 import org.apache.xml.security.test.dom.TestUtils;
 import org.apache.xml.security.utils.Constants;
 import org.apache.xml.security.utils.JavaUtils;
@@ -40,14 +43,13 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class DEREncodedKeyValueTest {
 
-    private static final String BASEDIR = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-    private static final String SEP = System.getProperty("file.separator");
+    private static final String SEP = FileSystems.getDefault().getSeparator();
 
     private static final String ID_CONTROL = "abc123";
 
-    private PublicKey rsaKeyControl;
-    private PublicKey dsaKeyControl;
-    private PublicKey ecKeyControl;
+    private final PublicKey rsaKeyControl;
+    private final PublicKey dsaKeyControl;
+    private final PublicKey ecKeyControl;
 
     public DEREncodedKeyValueTest() throws Exception {
         rsaKeyControl = loadPublicKey("rsa.key", "RSA");
@@ -138,11 +140,9 @@ public class DEREncodedKeyValueTest {
 
     // Utility methods
 
-    private String getControlFilePath(String fileName) {
-        return BASEDIR + SEP + "src" + SEP + "test" + SEP + "resources" +
-            SEP + "org" + SEP + "apache" + SEP + "xml" + SEP + "security" +
-            SEP + "keys" + SEP + "content" +
-            SEP + fileName;
+    private File getControlFilePath(String fileName) {
+        return XmlSecTestEnvironment.resolveFile("src", "test", "resources", "org", "apache", "xml", "security", "keys",
+            "content", fileName);
     }
 
     private Document loadXML(String fileName) throws Exception {
@@ -150,7 +150,7 @@ public class DEREncodedKeyValueTest {
     }
 
     private PublicKey loadPublicKey(String filePath, String algorithm) throws Exception {
-        String fileData = new String(JavaUtils.getBytesFromFile(getControlFilePath(filePath)));
+        String fileData = new String(JavaUtils.getBytesFromFile(getControlFilePath(filePath).getAbsolutePath()));
         byte[] keyBytes = XMLUtils.decode(fileData);
         KeyFactory kf = KeyFactory.getInstance(algorithm);
         X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
diff --git a/src/test/java/org/apache/xml/security/test/dom/keys/KeyInfoReferenceTest.java b/src/test/java/org/apache/xml/security/test/dom/keys/KeyInfoReferenceTest.java
index 793bc8b6..75b82c74 100644
--- a/src/test/java/org/apache/xml/security/test/dom/keys/KeyInfoReferenceTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/keys/KeyInfoReferenceTest.java
@@ -18,9 +18,11 @@
  */
 package org.apache.xml.security.test.dom.keys;
 
+import java.io.File;
 import java.io.FileInputStream;
 
 import org.apache.xml.security.keys.content.KeyInfoReference;
+import org.apache.xml.security.test.XmlSecTestEnvironment;
 import org.apache.xml.security.test.dom.TestUtils;
 import org.apache.xml.security.utils.Constants;
 import org.apache.xml.security.utils.XMLUtils;
@@ -35,7 +37,6 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class KeyInfoReferenceTest {
 
-    private static final String BASEDIR = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
     private static final String SEP = System.getProperty("file.separator");
 
     private static final String ID_CONTROL = "abc123";
@@ -84,15 +85,13 @@ public class KeyInfoReferenceTest {
 
     // Utility methods
 
-    private String getControlFilePath(String fileName) {
-        return BASEDIR + SEP + "src" + SEP + "test" + SEP + "resources" +
-            SEP + "org" + SEP + "apache" + SEP + "xml" + SEP + "security" +
-            SEP + "keys" + SEP + "content" +
-            SEP + fileName;
+    private File getControlFilePath(String fileName) {
+        return XmlSecTestEnvironment.resolveFile("src", "test", "resources", "org", "apache", "xml", "security", "keys",
+            "content", fileName);
     }
 
     private Document loadXML(String fileName) throws Exception {
-        return XMLUtils.read(new FileInputStream(getControlFilePath(fileName)), false);
+        return XMLUtils.read(getControlFilePath(fileName), false);
     }
 
 }
\ No newline at end of file
diff --git a/src/test/java/org/apache/xml/security/test/dom/keys/content/x509/XMLX509CertificateTest.java b/src/test/java/org/apache/xml/security/test/dom/keys/content/x509/XMLX509CertificateTest.java
index acbf2227..5ac3bce6 100644
--- a/src/test/java/org/apache/xml/security/test/dom/keys/content/x509/XMLX509CertificateTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/keys/content/x509/XMLX509CertificateTest.java
@@ -23,57 +23,42 @@ import java.io.FileInputStream;
 import java.security.cert.CertificateFactory;
 import java.security.cert.X509Certificate;
 
+import org.apache.xml.security.keys.content.x509.XMLX509Certificate;
 import org.apache.xml.security.test.dom.TestUtils;
+import org.apache.xml.security.utils.Constants;
+import org.apache.xml.security.utils.XMLUtils;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.NodeList;
-import org.apache.xml.security.keys.content.x509.XMLX509Certificate;
-import org.apache.xml.security.utils.Constants;
-import org.apache.xml.security.utils.XMLUtils;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Certificate parsing test.
- *
  */
 public class XMLX509CertificateTest {
 
-    private static final String BASEDIR =
-        System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-    private static final String SEP = System.getProperty("file.separator");
-
     @org.junit.jupiter.api.Test
     public void testGetX509Certificate() throws Exception {
-        File f = new File(BASEDIR + SEP + "src/test/resources" + SEP + "ie" + SEP + "baltimore" +
-            SEP + "merlin-examples" + SEP + "merlin-xmldsig-twenty-three" +
-            SEP + "signature-x509-crt.xml");
-
-        FileInputStream fis = new FileInputStream(f);
-        Document doc = XMLUtils.read(fis, false);
-        NodeList nl = doc.getElementsByTagNameNS
-                (Constants.SignatureSpecNS, "X509Certificate");
-        XMLX509Certificate xmlCert =
-            new XMLX509Certificate((Element) nl.item(0), "");
+        File f = resolveFile("src", "test", "resources", "ie", "baltimore", "merlin-examples",
+            "merlin-xmldsig-twenty-three", "signature-x509-crt.xml");
+        Document doc = XMLUtils.read(f, false);
+        NodeList nl = doc.getElementsByTagNameNS(Constants.SignatureSpecNS, "X509Certificate");
+        XMLX509Certificate xmlCert = new XMLX509Certificate((Element) nl.item(0), "");
         xmlCert.getX509Certificate();
         // System.out.println(cert);
     }
 
     @org.junit.jupiter.api.Test
     public void testEqualsAndHashCode() throws Exception {
-        File f = null;
-        if (BASEDIR != null && BASEDIR.length() != 0) {
-            f = new File(BASEDIR + SEP +
-                    "src/test/resources/ie/baltimore/merlin-examples/merlin-xmldsig-twenty-three/certs/lugh.crt");
-        } else {
-            f = new File(
-                    "src/test/resources/ie/baltimore/merlin-examples/merlin-xmldsig-twenty-three/certs/lugh.crt");
+        File f = resolveFile("src/test/resources/ie/baltimore/merlin-examples/merlin-xmldsig-twenty-three/certs/lugh.crt");
+        X509Certificate cert;
+        try (FileInputStream fis = new FileInputStream(f)) {
+            CertificateFactory cf = CertificateFactory.getInstance("X.509");
+            cert = (X509Certificate) cf.generateCertificate(fis);
         }
 
-        FileInputStream fis = new FileInputStream(f);
-        CertificateFactory cf = CertificateFactory.getInstance("X.509");
-        X509Certificate cert = (X509Certificate) cf.generateCertificate(fis);
-
         XMLX509Certificate x509Cert1 = new XMLX509Certificate(TestUtils.newDocument(), cert);
         XMLX509Certificate x509Cert2 = new XMLX509Certificate(TestUtils.newDocument(), cert);
 
diff --git a/src/test/java/org/apache/xml/security/test/dom/keys/content/x509/XMLX509DigestTest.java b/src/test/java/org/apache/xml/security/test/dom/keys/content/x509/XMLX509DigestTest.java
index 26f83f25..04d2952e 100644
--- a/src/test/java/org/apache/xml/security/test/dom/keys/content/x509/XMLX509DigestTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/keys/content/x509/XMLX509DigestTest.java
@@ -18,12 +18,14 @@
  */
 package org.apache.xml.security.test.dom.keys.content.x509;
 
+import java.io.File;
 import java.io.FileInputStream;
 import java.security.cert.CertificateFactory;
 import java.security.cert.X509Certificate;
 
 import org.apache.xml.security.Init;
 import org.apache.xml.security.keys.content.x509.XMLX509Digest;
+import org.apache.xml.security.test.XmlSecTestEnvironment;
 import org.apache.xml.security.test.dom.TestUtils;
 import org.apache.xml.security.utils.Constants;
 import org.apache.xml.security.utils.XMLUtils;
@@ -37,13 +39,12 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class XMLX509DigestTest {
 
-    private static final String BASEDIR = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
     private static final String SEP = System.getProperty("file.separator");
 
     private static final String ALG_URI_CONTROL = "http://www.w3.org/2001/04/xmlenc#sha256";
     private static final String DIGEST_B64_CONTROL = "jToLQ/K7aaLHy/aXLFnjEfCwSQd9z0MrBOH6Ru/aJyY=";
 
-    private X509Certificate certControl;
+    private final X509Certificate certControl;
     private final byte[] digestControl;
 
     public XMLX509DigestTest() throws Exception {
@@ -98,21 +99,20 @@ public class XMLX509DigestTest {
 
     // Utility methods
 
-    private String getControlFilePath(String fileName) {
-        return BASEDIR + SEP + "src" + SEP + "test" + SEP + "resources" +
-            SEP + "org" + SEP + "apache" + SEP + "xml" + SEP + "security" +
-            SEP + "keys" + SEP + "content" + SEP + "x509" +
-            SEP + fileName;
+    private File getControlFilePath(String fileName) {
+        return XmlSecTestEnvironment.resolveFile("src", "test", "resources", "org", "apache", "xml", "security", "keys",
+            "content", "x509", fileName);
     }
 
     private Document loadXML(String fileName) throws Exception {
-        return XMLUtils.read(new FileInputStream(getControlFilePath(fileName)), false);
+        return XMLUtils.read(getControlFilePath(fileName), false);
     }
 
     private X509Certificate loadCertificate(String fileName) throws Exception {
-        FileInputStream fis = new FileInputStream(getControlFilePath(fileName));
-        CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
-        return (X509Certificate) certFactory.generateCertificate(fis);
+        try (FileInputStream fis = new FileInputStream(getControlFilePath(fileName))) {
+            CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
+            return (X509Certificate) certFactory.generateCertificate(fis);
+        }
     }
 
 }
\ No newline at end of file
diff --git a/src/test/java/org/apache/xml/security/test/dom/keys/content/x509/XMLX509SKITest.java b/src/test/java/org/apache/xml/security/test/dom/keys/content/x509/XMLX509SKITest.java
index acb36b25..0fbe5708 100644
--- a/src/test/java/org/apache/xml/security/test/dom/keys/content/x509/XMLX509SKITest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/keys/content/x509/XMLX509SKITest.java
@@ -32,6 +32,7 @@ import java.util.Collections;
 import org.apache.xml.security.keys.content.x509.XMLX509SKI;
 import org.apache.xml.security.test.dom.TestUtils;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -41,9 +42,8 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
  */
 public class XMLX509SKITest {
 
-    private static final String BASEDIR = System.getProperty("basedir");
     private static final String SEP = System.getProperty("file.separator");
-    private CertificateFactory cf;
+    private final CertificateFactory cf;
 
     public XMLX509SKITest() throws Exception {
         cf = CertificateFactory.getInstance("X.509");
@@ -51,18 +51,12 @@ public class XMLX509SKITest {
 
     @org.junit.jupiter.api.Test
     public void testGetSKIBytesFromCert() throws Exception {
-        File f = null;
-        if (BASEDIR != null && BASEDIR.length() != 0) {
-            f = new File(BASEDIR + SEP +
-                "src/test/resources/ie/baltimore/merlin-examples/merlin-xmldsig-twenty-three/certs/lugh.crt");
-        } else {
-            f = new File(
-                "src/test/resources/ie/baltimore/merlin-examples/merlin-xmldsig-twenty-three/certs/lugh.crt");
+        File f = resolveFile("src/test/resources/ie/baltimore/merlin-examples/merlin-xmldsig-twenty-three/certs/lugh.crt");
+        X509Certificate cert;
+        try (FileInputStream fis = new FileInputStream(f)) {
+            cert = (X509Certificate) cf.generateCertificate(fis);
         }
 
-        FileInputStream fis = new FileInputStream(f);
-        X509Certificate cert = (X509Certificate) cf.generateCertificate(fis);
-
         // Get subject key identifier from certificate
         byte[] skid = XMLX509SKI.getSKIBytesFromCert(cert);
 
diff --git a/src/test/java/org/apache/xml/security/test/dom/keys/content/x509/XMLX509SubjectNameTest.java b/src/test/java/org/apache/xml/security/test/dom/keys/content/x509/XMLX509SubjectNameTest.java
index 237c5328..740afc1a 100644
--- a/src/test/java/org/apache/xml/security/test/dom/keys/content/x509/XMLX509SubjectNameTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/keys/content/x509/XMLX509SubjectNameTest.java
@@ -26,6 +26,7 @@ import java.security.cert.X509Certificate;
 import org.apache.xml.security.keys.content.x509.XMLX509SubjectName;
 import org.apache.xml.security.test.dom.TestUtils;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
@@ -35,25 +36,17 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
  */
 public class XMLX509SubjectNameTest {
 
-    private static final String BASEDIR =
-        System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
     private static final String SEP = System.getProperty("file.separator");
 
     @org.junit.jupiter.api.Test
     public void testEqualsAndHashCode() throws Exception {
-        File f = null;
-        if (BASEDIR != null && BASEDIR.length() != 0) {
-            f = new File(BASEDIR + SEP +
-                    "src/test/resources/ie/baltimore/merlin-examples/merlin-xmldsig-twenty-three/certs/lugh.crt");
-        } else {
-            f = new File(
-                    "src/test/resources/ie/baltimore/merlin-examples/merlin-xmldsig-twenty-three/certs/lugh.crt");
+        File f = resolveFile("src/test/resources/ie/baltimore/merlin-examples/merlin-xmldsig-twenty-three/certs/lugh.crt");
+        X509Certificate cert;
+        try (FileInputStream fis = new FileInputStream(f)) {
+            CertificateFactory cf = CertificateFactory.getInstance("X.509");
+            cert = (X509Certificate) cf.generateCertificate(fis);
         }
 
-        FileInputStream fis = new FileInputStream(f);
-        CertificateFactory cf = CertificateFactory.getInstance("X.509");
-        X509Certificate cert = (X509Certificate) cf.generateCertificate(fis);
-
         XMLX509SubjectName x509SubjectName1 = new XMLX509SubjectName(TestUtils.newDocument(), cert);
         assertNotNull(x509SubjectName1.getSubjectName());
         XMLX509SubjectName x509SubjectName2 = new XMLX509SubjectName(TestUtils.newDocument(), cert);
diff --git a/src/test/java/org/apache/xml/security/test/dom/keys/keyresolver/KeyInfoReferenceResolverTest.java b/src/test/java/org/apache/xml/security/test/dom/keys/keyresolver/KeyInfoReferenceResolverTest.java
index 2f81cfdf..1ee696a6 100644
--- a/src/test/java/org/apache/xml/security/test/dom/keys/keyresolver/KeyInfoReferenceResolverTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/keys/keyresolver/KeyInfoReferenceResolverTest.java
@@ -18,7 +18,10 @@
  */
 package org.apache.xml.security.test.dom.keys.keyresolver;
 
+import java.io.File;
 import java.io.FileInputStream;
+import java.io.InputStream;
+import java.nio.file.Files;
 import java.security.KeyFactory;
 import java.security.PublicKey;
 import java.security.cert.CertificateFactory;
@@ -27,6 +30,7 @@ import java.security.spec.X509EncodedKeySpec;
 
 import org.apache.xml.security.Init;
 import org.apache.xml.security.keys.KeyInfo;
+import org.apache.xml.security.test.XmlSecTestEnvironment;
 import org.apache.xml.security.utils.Constants;
 import org.apache.xml.security.utils.JavaUtils;
 import org.apache.xml.security.utils.XMLUtils;
@@ -41,9 +45,6 @@ import static org.junit.jupiter.api.Assertions.assertNull;
 
 public class KeyInfoReferenceResolverTest {
 
-    private static final String BASEDIR = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-    private static final String SEP = System.getProperty("file.separator");
-
     public KeyInfoReferenceResolverTest() throws Exception {
         if (!Init.isInitialized()) {
             Init.init();
@@ -140,11 +141,9 @@ public class KeyInfoReferenceResolverTest {
 
     // Utility methods
 
-    private String getControlFilePath(String fileName) {
-        return BASEDIR + SEP + "src" + SEP + "test" + SEP + "resources" +
-            SEP + "org" + SEP + "apache" + SEP + "xml" + SEP + "security" +
-            SEP + "keyresolver" +
-            SEP + fileName;
+    private File getControlFilePath(String fileName) {
+        return XmlSecTestEnvironment.resolveFile("src", "test", "resources", "org", "apache", "xml", "security",
+            "keyresolver", fileName);
     }
 
     private Document loadXML(String fileName) throws Exception {
@@ -152,7 +151,7 @@ public class KeyInfoReferenceResolverTest {
     }
 
     private PublicKey loadPublicKey(String filePath, String algorithm) throws Exception {
-        String fileData = new String(JavaUtils.getBytesFromFile(getControlFilePath(filePath)));
+        String fileData = new String(JavaUtils.getBytesFromFile(getControlFilePath(filePath).getAbsolutePath()));
         byte[] keyBytes = XMLUtils.decode(fileData);
         KeyFactory kf = KeyFactory.getInstance(algorithm);
         X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
@@ -160,9 +159,10 @@ public class KeyInfoReferenceResolverTest {
     }
 
     private X509Certificate loadCertificate(String fileName) throws Exception {
-        FileInputStream fis = new FileInputStream(getControlFilePath(fileName));
-        CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
-        return (X509Certificate) certFactory.generateCertificate(fis);
+        try (InputStream fis = Files.newInputStream(getControlFilePath(fileName).toPath())) {
+            CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
+            return (X509Certificate) certFactory.generateCertificate(fis);
+        }
     }
 
     private void markKeyInfoIdAttrs(Document doc) {
diff --git a/src/test/java/org/apache/xml/security/test/dom/keys/keyresolver/KeyResolverTest.java b/src/test/java/org/apache/xml/security/test/dom/keys/keyresolver/KeyResolverTest.java
index 65cd77e3..9d4adca5 100644
--- a/src/test/java/org/apache/xml/security/test/dom/keys/keyresolver/KeyResolverTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/keys/keyresolver/KeyResolverTest.java
@@ -61,6 +61,7 @@ import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Text;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNull;
 
@@ -70,7 +71,6 @@ import static org.junit.jupiter.api.Assertions.assertNull;
  */
 public class KeyResolverTest {
 
-    private static final String BASEDIR = System.getProperty("basedir");
     private static final String SEP = System.getProperty("file.separator");
 
     public KeyResolverTest() {
@@ -92,13 +92,9 @@ public class KeyResolverTest {
 
         char[] pwd = "secret".toCharArray();
         KeyStore ks = KeyStore.getInstance("JCEKS");
-        FileInputStream fis = null;
-        if (BASEDIR != null && BASEDIR.length() != 0) {
-            fis = new FileInputStream(BASEDIR + SEP + "src/test/resources/test.jceks");
-        } else {
-            fis = new FileInputStream("src/test/resources/test.jceks");
+        try (FileInputStream fis = new FileInputStream(resolveFile("src/test/resources/test.jceks"))) {
+            ks.load(fis, pwd);
         }
-        ks.load(fis, pwd);
 
         X509Certificate cert = (X509Certificate)ks.getCertificate("rsakey");
         PublicKey publicKey = cert.getPublicKey();
diff --git a/src/test/java/org/apache/xml/security/test/dom/keys/keyresolver/RetrievalMethodResolverTest.java b/src/test/java/org/apache/xml/security/test/dom/keys/keyresolver/RetrievalMethodResolverTest.java
index 9502c09c..64c85992 100644
--- a/src/test/java/org/apache/xml/security/test/dom/keys/keyresolver/RetrievalMethodResolverTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/keys/keyresolver/RetrievalMethodResolverTest.java
@@ -18,7 +18,6 @@
  */
 package org.apache.xml.security.test.dom.keys.keyresolver;
 
-import java.io.FileInputStream;
 import java.security.Security;
 
 import org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI;
@@ -26,15 +25,14 @@ import org.apache.xml.security.keys.KeyInfo;
 import org.apache.xml.security.utils.XMLUtils;
 import org.w3c.dom.Document;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
+
 
 /**
  * Some tests on attacks against the RetrievalMethodResolver.
  */
 public class RetrievalMethodResolverTest {
 
-    private static final String BASEDIR = System.getProperty("basedir");
-    private static final String SEP = System.getProperty("file.separator");
-
     public RetrievalMethodResolverTest() {
         org.apache.xml.security.Init.init();
         Security.insertProviderAt(new XMLDSigRI(), 1);
@@ -42,16 +40,8 @@ public class RetrievalMethodResolverTest {
 
     @org.junit.jupiter.api.Test
     public void testReferenceToSameRetrievalMethod() throws Exception {
-        FileInputStream fis = null;
         String filename = "src/test/resources/org/apache/xml/security/keyresolver/retrievalmethod1.xml";
-        if (BASEDIR != null && BASEDIR.length() != 0) {
-            fis = new FileInputStream(BASEDIR + SEP + filename);
-        } else {
-            fis = new FileInputStream(filename);
-        }
-
-        Document doc = XMLUtils.read(fis, false);
-
+        Document doc = XMLUtils.read(resolveFile(filename), false);
         KeyInfo keyInfo = new KeyInfo(doc.getDocumentElement(), null);
 
         // Check neither of these give a StackOverflowError.
@@ -61,16 +51,8 @@ public class RetrievalMethodResolverTest {
 
     @org.junit.jupiter.api.Test
     public void testLoopBetweenRetrievalMethods() throws Exception {
-        FileInputStream fis = null;
         String filename = "src/test/resources/org/apache/xml/security/keyresolver/retrievalmethod2.xml";
-        if (BASEDIR != null && BASEDIR.length() != 0) {
-            fis = new FileInputStream(BASEDIR + SEP + filename);
-        } else {
-            fis = new FileInputStream(filename);
-        }
-
-        Document doc = XMLUtils.read(fis, false);
-
+        Document doc = XMLUtils.read(resolveFile(filename), false);
         KeyInfo keyInfo = new KeyInfo(doc.getDocumentElement(), null);
 
         // Check neither of these give a StackOverflowError.
diff --git a/src/test/java/org/apache/xml/security/test/dom/keys/keyresolver/X509DigestResolverTest.java b/src/test/java/org/apache/xml/security/test/dom/keys/keyresolver/X509DigestResolverTest.java
index e299a011..49804664 100644
--- a/src/test/java/org/apache/xml/security/test/dom/keys/keyresolver/X509DigestResolverTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/keys/keyresolver/X509DigestResolverTest.java
@@ -18,6 +18,7 @@
  */
 package org.apache.xml.security.test.dom.keys.keyresolver;
 
+import java.io.File;
 import java.io.FileInputStream;
 import java.security.cert.CertificateFactory;
 import java.security.cert.X509Certificate;
@@ -26,6 +27,7 @@ import org.apache.xml.security.Init;
 import org.apache.xml.security.keys.KeyInfo;
 import org.apache.xml.security.keys.storage.StorageResolver;
 import org.apache.xml.security.keys.storage.implementations.SingleCertificateResolver;
+import org.apache.xml.security.test.XmlSecTestEnvironment;
 import org.apache.xml.security.utils.XMLUtils;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -36,12 +38,11 @@ import static org.junit.jupiter.api.Assertions.assertNull;
 
 public class X509DigestResolverTest {
 
-    private static final String BASEDIR = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
     private static final String SEP = System.getProperty("file.separator");
 
-    private X509Certificate certControl;
+    private final X509Certificate certControl;
 
-    private StorageResolver storageResolver;
+    private final StorageResolver storageResolver;
 
     public X509DigestResolverTest() throws Exception {
         certControl = loadCertificate("cert-X509Digest.crt");
@@ -72,21 +73,20 @@ public class X509DigestResolverTest {
 
     // Utility methods
 
-    private String getControlFilePath(String fileName) {
-        return BASEDIR + SEP + "src" + SEP + "test" + SEP + "resources" +
-            SEP + "org" + SEP + "apache" + SEP + "xml" + SEP + "security" +
-            SEP + "keys" + SEP + "content" + SEP + "x509" +
-            SEP + fileName;
+    private File getControlFilePath(String fileName) {
+        return XmlSecTestEnvironment.resolveFile("src", "test", "resources", "org", "apache", "xml",
+            "security", "keys", "content", "x509", fileName);
     }
 
     private Document loadXML(String fileName) throws Exception {
-        return XMLUtils.read(new FileInputStream(getControlFilePath(fileName)), false);
+        return XMLUtils.read(getControlFilePath(fileName), false);
     }
 
     private X509Certificate loadCertificate(String fileName) throws Exception {
-        FileInputStream fis = new FileInputStream(getControlFilePath(fileName));
-        CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
-        return (X509Certificate) certFactory.generateCertificate(fis);
+        try (FileInputStream fis = new FileInputStream(getControlFilePath(fileName))) {
+            CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
+            return (X509Certificate) certFactory.generateCertificate(fis);
+        }
     }
 
 }
\ No newline at end of file
diff --git a/src/test/java/org/apache/xml/security/test/dom/keys/storage/KeyStoreResolverTest.java b/src/test/java/org/apache/xml/security/test/dom/keys/storage/KeyStoreResolverTest.java
index e8f8ade2..51f8ad10 100644
--- a/src/test/java/org/apache/xml/security/test/dom/keys/storage/KeyStoreResolverTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/keys/storage/KeyStoreResolverTest.java
@@ -27,6 +27,7 @@ import java.util.NoSuchElementException;
 
 import org.apache.xml.security.keys.storage.implementations.KeyStoreResolver;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.fail;
@@ -37,10 +38,6 @@ import static org.junit.jupiter.api.Assertions.fail;
  */
 public class KeyStoreResolverTest {
 
-    private static final String BASEDIR =
-        System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-    private static final String SEP = System.getProperty("file.separator");
-
     @org.junit.jupiter.api.Test
     public void testKeyStoreResolver() throws Exception {
 
@@ -51,13 +48,11 @@ public class KeyStoreResolverTest {
             return;
         }
 
-        FileInputStream f =
-            new FileInputStream(BASEDIR + SEP + "src/test/resources" + SEP + "org" + SEP + "apache"
-                                + SEP + "xml" + SEP + "security" + SEP + "samples"
-                                + SEP + "input" + SEP + "keystore2.jks");
-
         KeyStore ks = KeyStore.getInstance("JCEKS");
-        ks.load(f, "xmlsecurity".toCharArray());
+        try (FileInputStream f = new FileInputStream(resolveFile("src", "test", "resources", "org", "apache", "xml",
+            "security", "samples", "input", "keystore2.jks"))) {
+            ks.load(f, "xmlsecurity".toCharArray());
+        }
 
         KeyStoreResolver ksResolver = new KeyStoreResolver(ks);
         Iterator<?> iter = ksResolver.getIterator();
diff --git a/src/test/java/org/apache/xml/security/test/dom/keys/storage/StorageResolverTest.java b/src/test/java/org/apache/xml/security/test/dom/keys/storage/StorageResolverTest.java
index 38faf86e..e3ef8652 100644
--- a/src/test/java/org/apache/xml/security/test/dom/keys/storage/StorageResolverTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/keys/storage/StorageResolverTest.java
@@ -19,6 +19,7 @@
 package org.apache.xml.security.test.dom.keys.storage;
 
 
+import java.io.File;
 import java.io.FileInputStream;
 import java.security.KeyStore;
 import java.security.cert.X509Certificate;
@@ -27,6 +28,7 @@ import java.util.NoSuchElementException;
 
 import org.apache.xml.security.keys.storage.StorageResolver;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.fail;
@@ -37,10 +39,6 @@ import static org.junit.jupiter.api.Assertions.fail;
  */
 public class StorageResolverTest {
 
-    private static final String BASEDIR =
-        System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-    private static final String SEP = System.getProperty("file.separator");
-
     @org.junit.jupiter.api.Test
     public void testStorageResolver() throws Exception {
 
@@ -51,17 +49,16 @@ public class StorageResolverTest {
             return;
         }
 
-        String inputDir = BASEDIR + SEP + "src/test/resources" + SEP
-            + "org" + SEP + "apache" + SEP + "xml" + SEP + "security" + SEP
-            + "samples" + SEP + "input";
-
-        FileInputStream inStream = new FileInputStream(inputDir + SEP + "keystore.jks");
+        File inputDir = resolveFile("src", "test", "resources", "org", "apache", "xml", "security", "samples", "input");
         KeyStore ks = KeyStore.getInstance("JKS");
-        ks.load(inStream, "xmlsecurity".toCharArray());
+        try (FileInputStream inStream = new FileInputStream(new File(inputDir, "keystore.jks"))) {
+            ks.load(inStream, "xmlsecurity".toCharArray());
+        }
 
-        FileInputStream inStream2 = new FileInputStream(inputDir + SEP + "keystore2.jks");
         KeyStore ks2 = KeyStore.getInstance("JCEKS");
-        ks2.load(inStream2, "xmlsecurity".toCharArray());
+        try (FileInputStream inStream2 = new FileInputStream(new File(inputDir, "keystore2.jks"))) {
+            ks2.load(inStream2, "xmlsecurity".toCharArray());
+        }
 
         StorageResolver storage = new StorageResolver(ks);
         storage.add(ks2);
diff --git a/src/test/java/org/apache/xml/security/test/dom/secure_val/ForbiddenAlgorithmTest.java b/src/test/java/org/apache/xml/security/test/dom/secure_val/ForbiddenAlgorithmTest.java
index 37416d2e..627b978c 100644
--- a/src/test/java/org/apache/xml/security/test/dom/secure_val/ForbiddenAlgorithmTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/secure_val/ForbiddenAlgorithmTest.java
@@ -20,7 +20,6 @@ package org.apache.xml.security.test.dom.secure_val;
 
 
 import java.io.File;
-import java.io.FileInputStream;
 
 import org.apache.xml.security.signature.XMLSignature;
 import org.apache.xml.security.signature.XMLSignatureException;
@@ -29,12 +28,12 @@ import org.apache.xml.security.utils.Constants;
 import org.apache.xml.security.utils.XMLUtils;
 import org.w3c.dom.Element;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 
 
-
 /**
  * This is a test for a forbidden algorithm (MD5) when secure validation is enabled.
  */
@@ -47,19 +46,14 @@ public class ForbiddenAlgorithmTest extends InteropTestBase {
         org.apache.xml.security.Init.init();
     }
 
-    public ForbiddenAlgorithmTest() {
-        super();
-    }
-
     @org.junit.jupiter.api.Test
     public void testMD5Digest() throws Exception {
-        boolean success =
-            readAndVerifySignature("src/test/resources/interop/c14n/Y2", "signature-joseph-exc.xml", false);
+        boolean success = readAndVerifySignature("signature-joseph-exc.xml", false);
 
         assertTrue(success);
 
         try {
-            readAndVerifySignature("src/test/resources/interop/c14n/Y2", "signature-joseph-exc.xml", true);
+            readAndVerifySignature("signature-joseph-exc.xml", true);
             fail("Failure expected when secure validation is enabled");
         } catch (XMLSignatureException ex) {
             String error = "It is forbidden to use algorithm http://www.w3.org/2001/04/xmldsig-more#md5 "
@@ -68,21 +62,13 @@ public class ForbiddenAlgorithmTest extends InteropTestBase {
         }
     }
 
-    private boolean readAndVerifySignature(
-        String directory, String file, boolean secValidation
-    ) throws Exception {
-        String basedir = System.getProperty("basedir");
-        if (basedir != null && basedir.length() != 0) {
-            directory = basedir + "/" + directory;
-        }
-
-        File f = new File(directory + "/" + file);
 
-        org.w3c.dom.Document doc = XMLUtils.read(new FileInputStream(f), false);
+    private boolean readAndVerifySignature(String file, boolean secValidation) throws Exception {
+        File f = resolveFile("src", "test", "resources", "interop", "c14n", "Y2", file);
+        org.w3c.dom.Document doc = XMLUtils.read(f, false);
 
-        Element sigElement =
-            (Element) doc.getElementsByTagNameNS(Constants.SignatureSpecNS,
-                                                 Constants._TAG_SIGNATURE).item(0);
+        Element sigElement = (Element) doc.getElementsByTagNameNS(Constants.SignatureSpecNS, Constants._TAG_SIGNATURE)
+            .item(0);
         XMLSignature signature = new XMLSignature(sigElement, f.toURI().toURL().toString(), secValidation);
         return signature.checkSignatureValue(signature.getKeyInfo().getPublicKey());
     }
diff --git a/src/test/java/org/apache/xml/security/test/dom/secure_val/ForbiddenRefCountTest.java b/src/test/java/org/apache/xml/security/test/dom/secure_val/ForbiddenRefCountTest.java
index daea5abc..f5879f3c 100644
--- a/src/test/java/org/apache/xml/security/test/dom/secure_val/ForbiddenRefCountTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/secure_val/ForbiddenRefCountTest.java
@@ -19,8 +19,6 @@
 package org.apache.xml.security.test.dom.secure_val;
 
 
-import java.io.FileInputStream;
-import java.io.InputStream;
 import java.security.KeyStore;
 import java.security.PrivateKey;
 import java.security.PublicKey;
@@ -31,6 +29,7 @@ import javax.xml.parsers.ParserConfigurationException;
 import org.apache.xml.security.exceptions.XMLSecurityException;
 import org.apache.xml.security.signature.XMLSignature;
 import org.apache.xml.security.signature.XMLSignatureException;
+import org.apache.xml.security.test.XmlSecTestEnvironment;
 import org.apache.xml.security.test.dom.TestUtils;
 import org.apache.xml.security.test.dom.interop.InteropTestBase;
 import org.apache.xml.security.transforms.Transforms;
@@ -47,23 +46,10 @@ import static org.junit.jupiter.api.Assertions.fail;
  */
 public class ForbiddenRefCountTest extends InteropTestBase {
 
-    private static final String BASEDIR =
-        System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-    public static final String KEYSTORE_DIRECTORY = BASEDIR + "/src/test/resources/";
-    public static final String KEYSTORE_PASSWORD_STRING = "changeit";
-    public static final char[] KEYSTORE_PASSWORD = KEYSTORE_PASSWORD_STRING.toCharArray();
-
-    static org.slf4j.Logger LOG =
-        org.slf4j.LoggerFactory.getLogger(ForbiddenRefCountTest.class);
-
     static {
         org.apache.xml.security.Init.init();
     }
 
-    public ForbiddenRefCountTest() {
-        super();
-    }
-
     @org.junit.jupiter.api.Test
     public void testReferenceCount() throws Exception {
         Document doc = getOriginalDocument();
@@ -100,8 +86,9 @@ public class ForbiddenRefCountTest extends InteropTestBase {
             sig.addDocument("", transforms, Constants.ALGO_ID_DIGEST_SHA1);
         }
 
-        sig.addKeyInfo(getPublicKey());
-        sig.sign(getPrivateKey());
+        KeyStore ks = XmlSecTestEnvironment.getTestKeyStore();
+        sig.addKeyInfo(getPublicKey(ks));
+        sig.sign(getPrivateKey(ks));
     }
 
     private boolean verifySignature(Document doc, boolean secValidation) throws XMLSignatureException, XMLSecurityException {
@@ -112,16 +99,8 @@ public class ForbiddenRefCountTest extends InteropTestBase {
         return signature.checkSignatureValue(signature.getKeyInfo().getPublicKey());
     }
 
-    private KeyStore getKeyStore() throws Exception {
-        KeyStore ks = KeyStore.getInstance("JKS");
-        InputStream ksis = new FileInputStream(KEYSTORE_DIRECTORY + "test.jks");
-        ks.load(ksis, KEYSTORE_PASSWORD);
-        ksis.close();
-        return ks;
-    }
 
-    private PublicKey getPublicKey() throws Exception {
-        KeyStore keyStore = getKeyStore();
+    private PublicKey getPublicKey(KeyStore keyStore) throws Exception {
         Enumeration<String> aliases = keyStore.aliases();
         while (aliases.hasMoreElements()) {
             String alias = aliases.nextElement();
@@ -132,13 +111,12 @@ public class ForbiddenRefCountTest extends InteropTestBase {
         return null;
     }
 
-    private PrivateKey getPrivateKey() throws Exception {
-        KeyStore keyStore = getKeyStore();
+    private PrivateKey getPrivateKey(KeyStore keyStore) throws Exception {
         Enumeration<String> aliases = keyStore.aliases();
         while (aliases.hasMoreElements()) {
             String alias = aliases.nextElement();
             if (keyStore.isKeyEntry(alias)) {
-                return (PrivateKey) keyStore.getKey(alias, KEYSTORE_PASSWORD);
+                return (PrivateKey) keyStore.getKey(alias, XmlSecTestEnvironment.TEST_KS_PASSWORD.toCharArray());
             }
         }
         return null;
diff --git a/src/test/java/org/apache/xml/security/test/dom/secure_val/ForbiddenReferenceTest.java b/src/test/java/org/apache/xml/security/test/dom/secure_val/ForbiddenReferenceTest.java
index b827390e..7e976948 100644
--- a/src/test/java/org/apache/xml/security/test/dom/secure_val/ForbiddenReferenceTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/secure_val/ForbiddenReferenceTest.java
@@ -20,7 +20,6 @@ package org.apache.xml.security.test.dom.secure_val;
 
 
 import java.io.File;
-import java.io.FileInputStream;
 
 import org.apache.xml.security.signature.Manifest;
 import org.apache.xml.security.signature.MissingResourceFailureException;
@@ -31,31 +30,24 @@ import org.apache.xml.security.utils.resolver.ResourceResolver;
 import org.apache.xml.security.utils.resolver.implementations.ResolverLocalFilesystem;
 import org.w3c.dom.Element;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 
 
-
 /**
  * This is a test for a forbidden Reference algorithm
  */
 public class ForbiddenReferenceTest extends InteropTestBase {
 
-    static org.slf4j.Logger LOG =
-        org.slf4j.LoggerFactory.getLogger(ForbiddenReferenceTest.class);
-
     static {
         org.apache.xml.security.Init.init();
     }
 
-    public ForbiddenReferenceTest() {
-        super();
-    }
-
     @org.junit.jupiter.api.Test
     public void testLocalFilesystem() throws Exception {
         try {
-            readAndVerifyManifest("src/test/resources/interop/c14n/Y3", "signature.xml");
+            readAndVerifyManifest("signature.xml");
             fail("Failure expected when secure validation is enabled");
         } catch (MissingResourceFailureException ex) {
             assertTrue(ex.getMessage().contains("The Reference for URI"));
@@ -63,26 +55,17 @@ public class ForbiddenReferenceTest extends InteropTestBase {
 
         // Now it should work as we have added the local file resolver
         ResourceResolver.register(new ResolverLocalFilesystem(), false);
-        boolean success =
-                readAndVerifyManifest("src/test/resources/interop/c14n/Y3", "signature.xml");
+        boolean success = readAndVerifyManifest("signature.xml");
         assertTrue(success);
     }
 
-    private boolean readAndVerifyManifest(
-        String directory, String file
-    ) throws Exception {
-        String basedir = System.getProperty("basedir");
-        if (basedir != null && basedir.length() != 0) {
-            directory = basedir + "/" + directory;
-        }
-
-        File f = new File(directory + "/" + file);
 
-        org.w3c.dom.Document doc = XMLUtils.read(new FileInputStream(f), false);
+    private boolean readAndVerifyManifest(String file) throws Exception {
+        File f = resolveFile("src", "test", "resources", "interop", "c14n", "Y3", file);
+        org.w3c.dom.Document doc = XMLUtils.read(f, false);
 
-        Element manifestElement =
-            (Element) doc.getElementsByTagNameNS(Constants.SignatureSpecNS,
-                                                 Constants._TAG_SIGNEDINFO).item(0);
+        Element manifestElement = (Element) doc
+            .getElementsByTagNameNS(Constants.SignatureSpecNS, Constants._TAG_SIGNEDINFO).item(0);
         Manifest manifest = new Manifest(manifestElement, f.toURI().toURL().toString(), true);
         return manifest.verifyReferences();
     }
diff --git a/src/test/java/org/apache/xml/security/test/dom/secure_val/ForbiddenRetrievalMethodTest.java b/src/test/java/org/apache/xml/security/test/dom/secure_val/ForbiddenRetrievalMethodTest.java
index cd665467..344bd51d 100644
--- a/src/test/java/org/apache/xml/security/test/dom/secure_val/ForbiddenRetrievalMethodTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/secure_val/ForbiddenRetrievalMethodTest.java
@@ -19,9 +19,10 @@
 package org.apache.xml.security.test.dom.secure_val;
 
 
-import java.io.FileInputStream;
+import java.io.File;
 
 import org.apache.xml.security.keys.KeyInfo;
+import org.apache.xml.security.test.XmlSecTestEnvironment;
 import org.apache.xml.security.utils.XMLUtils;
 import org.w3c.dom.Document;
 
@@ -34,23 +35,14 @@ import static org.junit.jupiter.api.Assertions.assertNull;
  */
 public class ForbiddenRetrievalMethodTest {
 
-    private static final String BASEDIR = System.getProperty("basedir");
-    private static final String SEP = System.getProperty("file.separator");
-
     public ForbiddenRetrievalMethodTest() {
         org.apache.xml.security.Init.init();
     }
 
     @org.junit.jupiter.api.Test
     public void testMultipleRetrievalMethods() throws Exception {
-        FileInputStream fis = null;
         String filename = "src/test/resources/org/apache/xml/security/keyresolver/retrievalmethod3.xml";
-        if (BASEDIR != null && BASEDIR.length() != 0) {
-            fis = new FileInputStream(BASEDIR + SEP + filename);
-        } else {
-            fis = new FileInputStream(filename);
-        }
-
+        File fis = XmlSecTestEnvironment.resolveFile(filename);
         Document doc = XMLUtils.read(fis, false);
 
         KeyInfo keyInfo = new KeyInfo(doc.getDocumentElement(), null);
diff --git a/src/test/java/org/apache/xml/security/test/dom/secure_val/WrappingAttackTest.java b/src/test/java/org/apache/xml/security/test/dom/secure_val/WrappingAttackTest.java
index fe8db6ed..0918bbb3 100644
--- a/src/test/java/org/apache/xml/security/test/dom/secure_val/WrappingAttackTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/secure_val/WrappingAttackTest.java
@@ -20,7 +20,6 @@ package org.apache.xml.security.test.dom.secure_val;
 
 
 import java.io.File;
-import java.io.FileInputStream;
 
 import org.apache.xml.security.signature.XMLSignature;
 import org.apache.xml.security.signature.XMLSignatureException;
@@ -29,6 +28,7 @@ import org.apache.xml.security.utils.Constants;
 import org.apache.xml.security.utils.XMLUtils;
 import org.w3c.dom.Element;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 
@@ -39,74 +39,43 @@ import static org.junit.jupiter.api.Assertions.fail;
  */
 public class WrappingAttackTest extends InteropTestBase {
 
-    static org.slf4j.Logger LOG =
-        org.slf4j.LoggerFactory.getLogger(WrappingAttackTest.class);
-
     static {
         org.apache.xml.security.Init.init();
     }
 
-    public WrappingAttackTest() {
-        super();
-    }
-
     @org.junit.jupiter.api.Test
     public void testWrappingAttack() throws Exception {
-        boolean success =
-            readAndVerifySignature(
-                "src/test/resources/at/iaik/ixsil/coreFeatures/signatures",
-                "manifestSignatureWrapping.xml"
-            );
-
+        boolean success = readAndVerifySignature("manifestSignatureWrapping.xml");
         assertTrue(success);
         try {
-            readAndVerifySignatureAndSetManifest(
-                "src/test/resources/at/iaik/ixsil/coreFeatures/signatures",
-                "manifestSignatureWrapping.xml"
-            );
+            readAndVerifySignatureAndSetManifest("manifestSignatureWrapping.xml");
             fail("Failure expected when secure validation is enabled");
         } catch (XMLSignatureException ex) {
             assertTrue(ex.getMessage().contains("no XMLSignatureInput"));
         }
     }
 
-    private boolean readAndVerifySignature(
-        String directory, String file
-    ) throws Exception {
-        String basedir = System.getProperty("basedir");
-        if (basedir != null && basedir.length() != 0) {
-            directory = basedir + "/" + directory;
-        }
-
-        File f = new File(directory + "/" + file);
 
-        org.w3c.dom.Document doc = XMLUtils.read(new FileInputStream(f), false);
+    private boolean readAndVerifySignature(String file) throws Exception {
+        File f = resolveFile("src", "test", "resources", "at", "iaik", "ixsil", "coreFeatures", "signatures", file);
+        org.w3c.dom.Document doc = XMLUtils.read(f, false);
 
-        Element sigElement =
-            (Element) doc.getElementsByTagNameNS(Constants.SignatureSpecNS,
-                                                 Constants._TAG_SIGNATURE).item(0);
+        Element sigElement = (Element) doc.getElementsByTagNameNS(Constants.SignatureSpecNS, Constants._TAG_SIGNATURE)
+            .item(0);
         XMLSignature signature = new XMLSignature(sigElement, f.toURI().toURL().toString());
         return signature.checkSignatureValue(signature.getKeyInfo().getPublicKey());
     }
 
-    private boolean readAndVerifySignatureAndSetManifest(
-        String directory, String file
-    ) throws Exception {
-        String basedir = System.getProperty("basedir");
-        if (basedir != null && basedir.length() != 0) {
-            directory = basedir + "/" + directory;
-        }
 
-        File f = new File(directory + "/" + file);
+    private boolean readAndVerifySignatureAndSetManifest(String file) throws Exception {
+        File f = resolveFile("src", "test", "resources", "at", "iaik", "ixsil", "coreFeatures", "signatures", file);
 
-        org.w3c.dom.Document doc = XMLUtils.read(new FileInputStream(f), false);
+        org.w3c.dom.Document doc = XMLUtils.read(f, false);
 
-        Element sigElement =
-            (Element) doc.getElementsByTagNameNS(Constants.SignatureSpecNS,
-                                                 Constants._TAG_SIGNATURE).item(0);
+        Element sigElement = (Element) doc.getElementsByTagNameNS(Constants.SignatureSpecNS, Constants._TAG_SIGNATURE)
+            .item(0);
 
-        Element manifestElement =
-            (Element) doc.getElementsByTagName("Manifest").item(0);
+        Element manifestElement = (Element) doc.getElementsByTagName("Manifest").item(0);
         manifestElement.setIdAttribute("Id", true);
 
         XMLSignature signature = new XMLSignature(sigElement, f.toURI().toURL().toString(), true);
diff --git a/src/test/java/org/apache/xml/security/test/dom/signature/CreateSignatureTest.java b/src/test/java/org/apache/xml/security/test/dom/signature/CreateSignatureTest.java
index e9e46e57..c004e7a6 100644
--- a/src/test/java/org/apache/xml/security/test/dom/signature/CreateSignatureTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/signature/CreateSignatureTest.java
@@ -44,10 +44,10 @@ import org.apache.xml.security.signature.SignatureProperty;
 import org.apache.xml.security.signature.SignedInfo;
 import org.apache.xml.security.signature.XMLSignature;
 import org.apache.xml.security.signature.XMLSignatureException;
+import org.apache.xml.security.test.XmlSecTestEnvironment;
 import org.apache.xml.security.test.dom.DSNamespaceContext;
 import org.apache.xml.security.test.dom.TestUtils;
 import org.apache.xml.security.transforms.Transforms;
-import org.apache.xml.security.transforms.params.XPath2FilterContainer;
 import org.apache.xml.security.transforms.params.XPathContainer;
 import org.apache.xml.security.utils.Constants;
 import org.apache.xml.security.utils.ElementProxy;
@@ -55,6 +55,7 @@ import org.apache.xml.security.utils.XMLUtils;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -66,13 +67,7 @@ import static org.junit.jupiter.api.Assertions.fail;
  */
 public class CreateSignatureTest {
 
-    static org.slf4j.Logger LOG =
-        org.slf4j.LoggerFactory.getLogger(CreateSignatureTest.class);
-
-    private static final String BASEDIR = System.getProperty("basedir");
-    private static final String SEP = System.getProperty("file.separator");
-
-    private KeyPair kp;
+    private final KeyPair kp;
 
     public CreateSignatureTest() throws Exception {
         org.apache.xml.security.Init.init();
@@ -118,17 +113,10 @@ public class CreateSignatureTest {
         );
 
         KeyStore ks = KeyStore.getInstance("JKS");
-        FileInputStream fis = null;
-        if (BASEDIR != null && BASEDIR.length() != 0) {
-            fis =
-                new FileInputStream(BASEDIR + SEP
-                    + "src/test/resources/org/apache/xml/security/samples/input/keystore.jks"
-                );
-        } else {
-            fis =
-                new FileInputStream("src/test/resources/org/apache/xml/security/samples/input/keystore.jks");
+        try (FileInputStream fis = new FileInputStream(
+            resolveFile("src/test/resources/org/apache/xml/security/samples/input/keystore.jks"))) {
+            ks.load(fis, "xmlsecurity".toCharArray());
         }
-        ks.load(fis, "xmlsecurity".toCharArray());
         PrivateKey privateKey = (PrivateKey) ks.getKey("test", "xmlsecurity".toCharArray());
 
         sig.sign(privateKey);
@@ -493,15 +481,7 @@ public class CreateSignatureTest {
     }
 
     private String doSignWithCert() throws Exception {
-        KeyStore ks = KeyStore.getInstance("JKS");
-        FileInputStream fis = null;
-        if (BASEDIR != null && BASEDIR.length() != 0) {
-            fis = new FileInputStream(BASEDIR + SEP +
-            "src/test/resources/test.jks");
-        } else {
-            fis = new FileInputStream("src/test/resources/test.jks");
-        }
-        ks.load(fis, "changeit".toCharArray());
+        KeyStore ks = XmlSecTestEnvironment.getTestKeyStore();
         PrivateKey privateKey = (PrivateKey) ks.getKey("mullan", "changeit".toCharArray());
         Document doc = TestUtils.newDocument();
         X509Certificate signingCert = (X509Certificate) ks.getCertificate("mullan");
diff --git a/src/test/java/org/apache/xml/security/test/dom/signature/CreateSignatureXalanTest.java b/src/test/java/org/apache/xml/security/test/dom/signature/CreateSignatureXalanTest.java
index 254e6aa2..2e598c0c 100644
--- a/src/test/java/org/apache/xml/security/test/dom/signature/CreateSignatureXalanTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/signature/CreateSignatureXalanTest.java
@@ -18,11 +18,18 @@
  */
 package org.apache.xml.security.test.dom.signature;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.security.KeyStore;
+import java.security.PrivateKey;
+
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathFactory;
 
-import org.apache.xml.security.algorithms.SignatureAlgorithm;
-import org.apache.xml.security.c14n.Canonicalizer;
-import org.apache.xml.security.keys.KeyInfo;
-import org.apache.xml.security.signature.*;
+import org.apache.xml.security.signature.XMLSignature;
 import org.apache.xml.security.test.dom.DSNamespaceContext;
 import org.apache.xml.security.test.dom.TestUtils;
 import org.apache.xml.security.transforms.Transforms;
@@ -34,35 +41,20 @@ import org.junit.jupiter.api.BeforeAll;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
-import javax.xml.xpath.XPath;
-import javax.xml.xpath.XPathConstants;
-import javax.xml.xpath.XPathFactory;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.security.*;
-
-import static org.junit.jupiter.api.Assertions.*;
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Tests that create signatures that require Xalan for the here() function
  */
 public class CreateSignatureXalanTest {
 
-    private static final String CONFIG_FILE = "config-xalan.xml";
-
-    static org.slf4j.Logger LOG =
-        org.slf4j.LoggerFactory.getLogger(CreateSignatureXalanTest.class);
-
-    private static final String BASEDIR = System.getProperty("basedir");
-    private static final String SEP = System.getProperty("file.separator");
-
-    private KeyPair kp;
+    private static final String CONFIG_FILE = "/config-xalan.xml";
 
     @BeforeAll
     public static void setup() {
         System.setProperty("org.apache.xml.security.resource.config", CONFIG_FILE);
+        org.apache.xml.security.Init.init();
     }
 
     @AfterAll
@@ -70,11 +62,6 @@ public class CreateSignatureXalanTest {
         System.clearProperty("org.apache.xml.security.resource.config");
     }
 
-    public CreateSignatureXalanTest() throws Exception {
-        org.apache.xml.security.Init.init();
-        kp = KeyPairGenerator.getInstance("RSA").genKeyPair();
-    }
-
     @org.junit.jupiter.api.Test
     public void testXFilter2Signature() throws Exception {
         Document doc = TestUtils.newDocument();
@@ -85,8 +72,7 @@ public class CreateSignatureXalanTest {
         root.appendChild(doc.createTextNode("Some simple text\n"));
 
         // Sign
-        XMLSignature sig =
-            new XMLSignature(doc, null, XMLSignature.ALGO_ID_SIGNATURE_DSA);
+        XMLSignature sig = new XMLSignature(doc, null, XMLSignature.ALGO_ID_SIGNATURE_DSA);
         root.appendChild(sig.getElement());
 
         Transforms transforms = new Transforms(doc);
@@ -99,17 +85,10 @@ public class CreateSignatureXalanTest {
         sig.addDocument("", transforms, Constants.ALGO_ID_DIGEST_SHA1);
 
         KeyStore ks = KeyStore.getInstance("JKS");
-        FileInputStream fis = null;
-        if (BASEDIR != null && BASEDIR.length() != 0) {
-            fis =
-                new FileInputStream(BASEDIR + SEP
-                    + "src/test/resources/org/apache/xml/security/samples/input/keystore.jks"
-                );
-        } else {
-            fis =
-                new FileInputStream("src/test/resources/org/apache/xml/security/samples/input/keystore.jks");
+        try (FileInputStream fis = new FileInputStream(
+            resolveFile("src/test/resources/org/apache/xml/security/samples/input/keystore.jks"))) {
+            ks.load(fis, "xmlsecurity".toCharArray());
         }
-        ks.load(fis, "xmlsecurity".toCharArray());
         PrivateKey privateKey = (PrivateKey) ks.getKey("test", "xmlsecurity".toCharArray());
 
         sig.sign(privateKey);
@@ -128,82 +107,9 @@ public class CreateSignatureXalanTest {
         xpath.setNamespaceContext(new DSNamespaceContext());
 
         String expression = "//ds:Signature[1]";
-        Element sigElement =
-            (Element) xpath.evaluate(expression, doc, XPathConstants.NODE);
+        Element sigElement = (Element) xpath.evaluate(expression, doc, XPathConstants.NODE);
 
         XMLSignature signature = new XMLSignature(sigElement, "");
         assertTrue(signature.checkSignatureValue(ks.getCertificate("test").getPublicKey()));
     }
-
-    private String doSign() throws Exception {
-        PrivateKey privateKey = kp.getPrivate();
-        Document doc = TestUtils.newDocument();
-        doc.appendChild(doc.createComment(" Comment before "));
-        Element root = doc.createElementNS("", "RootElement");
-
-        doc.appendChild(root);
-        root.appendChild(doc.createTextNode("Some simple text\n"));
-
-        Element canonElem =
-            XMLUtils.createElementInSignatureSpace(doc, Constants._TAG_CANONICALIZATIONMETHOD);
-        canonElem.setAttributeNS(
-            null, Constants._ATT_ALGORITHM, Canonicalizer.ALGO_ID_C14N_EXCL_OMIT_COMMENTS
-        );
-
-        SignatureAlgorithm signatureAlgorithm =
-            new SignatureAlgorithm(doc, XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA1);
-        XMLSignature sig =
-            new XMLSignature(doc, null, signatureAlgorithm.getElement(), canonElem);
-
-        root.appendChild(sig.getElement());
-        doc.appendChild(doc.createComment(" Comment after "));
-        Transforms transforms = new Transforms(doc);
-        transforms.addTransform(Transforms.TRANSFORM_ENVELOPED_SIGNATURE);
-        transforms.addTransform(Transforms.TRANSFORM_C14N_WITH_COMMENTS);
-        sig.addDocument("", transforms, Constants.ALGO_ID_DIGEST_SHA1);
-
-        sig.addKeyInfo(kp.getPublic());
-        sig.sign(privateKey);
-
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-
-        XMLUtils.outputDOMc14nWithComments(doc, bos);
-        return new String(bos.toByteArray());
-    }
-
-    private void doVerify(String signedXML, int expectedObjectCount) throws Exception {
-        Document doc = null;
-        try (InputStream is = new ByteArrayInputStream(signedXML.getBytes())) {
-            doc = XMLUtils.read(is, false);
-        }
-
-        XPathFactory xpf = XPathFactory.newInstance();
-        XPath xpath = xpf.newXPath();
-        xpath.setNamespaceContext(new DSNamespaceContext());
-
-        String expression = "//ds:Signature[1]";
-        Element sigElement =
-            (Element) xpath.evaluate(expression, doc, XPathConstants.NODE);
-
-        XMLSignature signature = new XMLSignature(sigElement, "");
-        KeyInfo ki = signature.getKeyInfo();
-
-        if (ki == null) {
-            throw new RuntimeException("No keyinfo");
-        }
-        PublicKey pk = signature.getKeyInfo().getPublicKey();
-
-        if (pk == null) {
-            throw new RuntimeException("No public key");
-        }
-        assertTrue(signature.checkSignatureValue(pk));
-
-        assertEquals(expectedObjectCount, signature.getObjectLength());
-        if (expectedObjectCount > 0) {
-            for (int i = 0; i < expectedObjectCount; i++) {
-                assertNotNull(signature.getObjectItem(i));
-            }
-        }
-    }
-
-}
\ No newline at end of file
+}
diff --git a/src/test/java/org/apache/xml/security/test/dom/signature/ECDSASignatureTest.java b/src/test/java/org/apache/xml/security/test/dom/signature/ECDSASignatureTest.java
index d3e1d0a1..1818fa6c 100644
--- a/src/test/java/org/apache/xml/security/test/dom/signature/ECDSASignatureTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/signature/ECDSASignatureTest.java
@@ -45,6 +45,7 @@ import org.apache.xml.security.utils.Constants;
 import org.apache.xml.security.utils.XMLUtils;
 import org.w3c.dom.Element;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assumptions.assumeTrue;
 
@@ -55,7 +56,6 @@ import static org.junit.jupiter.api.Assumptions.assumeTrue;
  */
 public class ECDSASignatureTest {
 
-    private static final String BASEDIR = System.getProperty("basedir");
     private static final String SEP = System.getProperty("file.separator");
     private static final String ECDSA_JKS =
         "src/test/resources/org/apache/xml/security/samples/input/ecdsa.jks";
@@ -101,8 +101,7 @@ public class ECDSASignatureTest {
     @org.junit.jupiter.api.Test
     @org.junit.jupiter.api.Disabled
     public void testTwo() throws Exception {
-        File file =
-            makeDataFile("src/test/resources/org/apache/xml/security/samples/input/ecdsaSignature.xml");
+        File file = resolveFile("src/test/resources/org/apache/xml/security/samples/input/ecdsaSignature.xml");
         try (InputStream is = new FileInputStream(file)) {
             doVerify(is);
         }
@@ -111,7 +110,7 @@ public class ECDSASignatureTest {
     @org.junit.jupiter.api.Test
     @org.junit.jupiter.api.Disabled
     public void testThree()  throws Exception {
-        File file = makeDataFile("src/test/resources/at/buergerkarte/testresp.xml");
+        File file = resolveFile("src/test/resources/at/buergerkarte/testresp.xml");
         try (InputStream is = new FileInputStream(file)) {
             doVerify(is);
         }
@@ -204,13 +203,6 @@ public class ECDSASignatureTest {
         }
     }
 
-    private File makeDataFile(String relPath) {
-        if (BASEDIR != null && BASEDIR.length() != 0) {
-            return new File(BASEDIR + SEP + relPath);
-        } else {
-            return new File(relPath);
-        }
-    }
 
     /**
      * DO NOT DELETE THIS COMMENTED OUT METHOD!
diff --git a/src/test/java/org/apache/xml/security/test/dom/signature/EDDSASignatureTest.java b/src/test/java/org/apache/xml/security/test/dom/signature/EDDSASignatureTest.java
index 3bfe74cc..2735ff99 100644
--- a/src/test/java/org/apache/xml/security/test/dom/signature/EDDSASignatureTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/signature/EDDSASignatureTest.java
@@ -18,32 +18,33 @@
  */
 package org.apache.xml.security.test.dom.signature;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.security.KeyStore;
+import java.security.PrivateKey;
+import java.security.PublicKey;
+import java.security.cert.X509Certificate;
+
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathFactory;
+
 import org.apache.xml.security.algorithms.SignatureAlgorithm;
 import org.apache.xml.security.c14n.Canonicalizer;
 import org.apache.xml.security.keys.KeyInfo;
 import org.apache.xml.security.signature.XMLSignature;
 import org.apache.xml.security.test.dom.DSNamespaceContext;
 import org.apache.xml.security.test.dom.TestUtils;
+import org.apache.xml.security.test.javax.xml.crypto.dsig.EdDSATestAbstract;
 import org.apache.xml.security.transforms.Transforms;
 import org.apache.xml.security.utils.Constants;
 import org.apache.xml.security.utils.XMLUtils;
 import org.junit.jupiter.api.Assertions;
 import org.w3c.dom.Element;
 
-import javax.xml.crypto.test.dsig.EdDSATestAbstract;
-import javax.xml.xpath.XPath;
-import javax.xml.xpath.XPathConstants;
-import javax.xml.xpath.XPathFactory;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.InputStream;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.security.KeyStore;
-import java.security.PrivateKey;
-import java.security.PublicKey;
-import java.security.cert.X509Certificate;
-
 
 /**
  * Tests of the EDDSA Ed25519 and Ed448 signatures.
diff --git a/src/test/java/org/apache/xml/security/test/dom/signature/HMACOutputLengthTest.java b/src/test/java/org/apache/xml/security/test/dom/signature/HMACOutputLengthTest.java
index 744c2004..ab0f7920 100644
--- a/src/test/java/org/apache/xml/security/test/dom/signature/HMACOutputLengthTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/signature/HMACOutputLengthTest.java
@@ -21,14 +21,10 @@ package org.apache.xml.security.test.dom.signature;
 
 import java.io.ByteArrayOutputStream;
 import java.io.File;
-import java.io.FileInputStream;
 import java.nio.charset.StandardCharsets;
 
 import javax.crypto.SecretKey;
 
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
 import org.apache.xml.security.Init;
 import org.apache.xml.security.algorithms.MessageDigestAlgorithm;
 import org.apache.xml.security.c14n.Canonicalizer;
@@ -38,20 +34,16 @@ import org.apache.xml.security.test.dom.TestUtils;
 import org.apache.xml.security.transforms.Transforms;
 import org.apache.xml.security.utils.Constants;
 import org.apache.xml.security.utils.XMLUtils;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 
 public class HMACOutputLengthTest {
 
-    static org.slf4j.Logger LOG =
-        org.slf4j.LoggerFactory.getLogger
-            (HMACOutputLengthTest.class);
-
-    private static final String BASEDIR =
-        System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-    private static final String SEP = System.getProperty("file.separator");
-
     public HMACOutputLengthTest() throws Exception {
         Init.init();
     }
@@ -146,13 +138,10 @@ public class HMACOutputLengthTest {
     }
 
     private boolean validate(String data) throws Exception {
-        File file =
-            new File(BASEDIR + SEP + "src/test/resources" + SEP + "javax" + SEP + "xml"
-                     + SEP + "crypto" + SEP + "dsig" + SEP, data);
-
-        Document doc = XMLUtils.read(new FileInputStream(file), false);
-        NodeList nl =
-            doc.getElementsByTagNameNS(Constants.SignatureSpecNS, "Signature");
+        File file = resolveFile("src", "test", "resources", "org", "apache", "xml", "security", "test", "javax", "xml",
+            "crypto", "dsig", data);
+        Document doc = XMLUtils.read(file, false);
+        NodeList nl = doc.getElementsByTagNameNS(Constants.SignatureSpecNS, "Signature");
         if (nl.getLength() == 0) {
             throw new Exception("Couldn't find signature Element");
         }
diff --git a/src/test/java/org/apache/xml/security/test/dom/signature/InvalidKeyTest.java b/src/test/java/org/apache/xml/security/test/dom/signature/InvalidKeyTest.java
index ce49145b..cf1ce127 100644
--- a/src/test/java/org/apache/xml/security/test/dom/signature/InvalidKeyTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/signature/InvalidKeyTest.java
@@ -18,6 +18,7 @@
  */
 package org.apache.xml.security.test.dom.signature;
 
+import java.io.File;
 import java.io.FileInputStream;
 import java.security.KeyStore;
 import java.security.PublicKey;
@@ -30,6 +31,8 @@ import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
+
 /**
  * Test case contributed by Matthias Germann for testing that bug 43239 is
  * fixed: "No installed provider supports this key" when checking a RSA
@@ -37,20 +40,17 @@ import org.w3c.dom.Node;
  */
 public class InvalidKeyTest {
 
-    private static final String BASEDIR =
-        System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-    private static final String SEP = System.getProperty("file.separator");
-
     static {
         Init.init();
     }
 
     @org.junit.jupiter.api.Test
     public void test() throws Exception {
-        FileInputStream input = new FileInputStream(BASEDIR + SEP +
-            "src/test/resources/org/apache/xml/security/samples/input/truststore.jks");
         KeyStore trustStore = KeyStore.getInstance("JKS");
-        trustStore.load(input, "testpw".toCharArray());
+        try (FileInputStream input = new FileInputStream(
+            resolveFile("src/test/resources/org/apache/xml/security/samples/input/truststore.jks"))) {
+            trustStore.load(input, "testpw".toCharArray());
+        }
 
         try {
             validate(trustStore.getCertificate("bedag-test").getPublicKey());
@@ -62,11 +62,8 @@ public class InvalidKeyTest {
     }
 
     private void validate(PublicKey pk) throws Exception {
-        FileInputStream is = new FileInputStream(BASEDIR + SEP +
-            "src/test/resources/org/apache/xml/security/samples/input/test-assertion.xml");
-
-        Document e = XMLUtils.read(is, false);
-
+        File file = resolveFile("src/test/resources/org/apache/xml/security/samples/input/test-assertion.xml");
+        Document e = XMLUtils.read(file, false);
         Node assertion = e.getFirstChild();
         while (!(assertion instanceof Element)) {
             assertion = assertion.getNextSibling();
diff --git a/src/test/java/org/apache/xml/security/test/dom/signature/KeyValueTest.java b/src/test/java/org/apache/xml/security/test/dom/signature/KeyValueTest.java
index 0263b61c..eb70c9e7 100644
--- a/src/test/java/org/apache/xml/security/test/dom/signature/KeyValueTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/signature/KeyValueTest.java
@@ -20,24 +20,23 @@ package org.apache.xml.security.test.dom.signature;
 
 
 import java.io.File;
-import java.io.FileInputStream;
 import java.security.PublicKey;
 
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
 import org.apache.xml.security.Init;
 import org.apache.xml.security.keys.KeyInfo;
 import org.apache.xml.security.keys.content.KeyValue;
 import org.apache.xml.security.signature.XMLSignature;
+import org.apache.xml.security.test.XmlSecTestEnvironment;
 import org.apache.xml.security.utils.Constants;
 import org.apache.xml.security.utils.XMLUtils;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
 
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 public class KeyValueTest {
 
-    private static final String BASEDIR = System.getProperty("basedir");
     private static final String SEP = System.getProperty("file.separator");
 
     static {
@@ -46,18 +45,12 @@ public class KeyValueTest {
 
     @org.junit.jupiter.api.Test
     public void testDSAPublicKey() throws Exception {
-        File f = null;
-        String filename =
+        String path =
             "src/test/resources/ie/baltimore/merlin-examples/merlin-xmldsig-twenty-three/signature-enveloping-dsa.xml";
-        if (BASEDIR != null && BASEDIR.length() != 0) {
-            f = new File(BASEDIR + SEP + filename);
-        } else {
-            f = new File(filename);
-        }
-        Document doc = XMLUtils.read(new FileInputStream(f), false);
+        File f = XmlSecTestEnvironment.resolveFile(path);
+        Document doc = XMLUtils.read(f, false);
         NodeList nl = doc.getElementsByTagNameNS(Constants.SignatureSpecNS, "Signature");
-        XMLSignature sig = new XMLSignature
-            ((Element) nl.item(0), f.toURI().toURL().toString());
+        XMLSignature sig = new XMLSignature((Element) nl.item(0), f.toURI().toURL().toString());
         KeyInfo ki = sig.getKeyInfo();
         KeyValue kv = ki.itemKeyValue(0);
         PublicKey pk = kv.getPublicKey();
diff --git a/src/test/java/org/apache/xml/security/test/dom/signature/NoKeyInfoTest.java b/src/test/java/org/apache/xml/security/test/dom/signature/NoKeyInfoTest.java
index 73210894..cbee8626 100644
--- a/src/test/java/org/apache/xml/security/test/dom/signature/NoKeyInfoTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/signature/NoKeyInfoTest.java
@@ -20,42 +20,32 @@ package org.apache.xml.security.test.dom.signature;
 
 
 import java.io.File;
-import java.io.FileInputStream;
 
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
 import org.apache.xml.security.Init;
 import org.apache.xml.security.keys.KeyInfo;
 import org.apache.xml.security.signature.XMLSignature;
+import org.apache.xml.security.test.XmlSecTestEnvironment;
 import org.apache.xml.security.utils.Constants;
 import org.apache.xml.security.utils.XMLUtils;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
 
 import static org.junit.jupiter.api.Assertions.assertNull;
 
 public class NoKeyInfoTest {
 
-    private static final String BASEDIR = System.getProperty("basedir");
-    private static final String SEP = System.getProperty("file.separator");
-
     static {
         Init.init();
     }
 
     @org.junit.jupiter.api.Test
     public void testNullKeyInfo() throws Exception {
-        File f = null;
-        String filename =
-            "src/test/resources/ie/baltimore/merlin-examples/merlin-xmldsig-twenty-three/signature-enveloping-hmac-sha1.xml";
-        if (BASEDIR != null && BASEDIR.length() != 0) {
-            f = new File(BASEDIR + SEP + filename);
-        } else {
-            f = new File(filename);
-        }
-        Document doc = XMLUtils.read(new FileInputStream(f), false);
+        String filename = "src/test/resources/ie/baltimore/merlin-examples/merlin-xmldsig-twenty-three/signature-enveloping-hmac-sha1.xml";
+        File f = XmlSecTestEnvironment.resolveFile(filename);
+        Document doc = XMLUtils.read(f, false);
         NodeList nl = doc.getElementsByTagNameNS(Constants.SignatureSpecNS, "Signature");
-        XMLSignature sig = new XMLSignature
-            ((Element) nl.item(0), f.toURI().toURL().toString());
+        XMLSignature sig = new XMLSignature((Element) nl.item(0), f.toURI().toURL().toString());
         KeyInfo ki = sig.getKeyInfo();
         assertNull(ki);
     }
diff --git a/src/test/java/org/apache/xml/security/test/dom/signature/PreCalculatedDigestSignatureTest.java b/src/test/java/org/apache/xml/security/test/dom/signature/PreCalculatedDigestSignatureTest.java
index 1c9681a8..43635bdd 100644
--- a/src/test/java/org/apache/xml/security/test/dom/signature/PreCalculatedDigestSignatureTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/signature/PreCalculatedDigestSignatureTest.java
@@ -18,9 +18,23 @@
  */
 package org.apache.xml.security.test.dom.signature;
 
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.security.KeyStore;
+import java.security.PrivateKey;
+import java.security.PublicKey;
+import java.security.cert.X509Certificate;
+
+import javax.xml.parsers.ParserConfigurationException;
+
 import org.apache.xml.security.exceptions.XMLSecurityException;
 import org.apache.xml.security.signature.XMLSignature;
 import org.apache.xml.security.signature.XMLSignatureInput;
+import org.apache.xml.security.test.XmlSecTestEnvironment;
 import org.apache.xml.security.test.dom.TestUtils;
 import org.apache.xml.security.transforms.TransformationException;
 import org.apache.xml.security.transforms.Transforms;
@@ -38,17 +52,7 @@ import org.w3c.dom.Attr;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
-import javax.xml.parsers.ParserConfigurationException;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.security.*;
-import java.security.cert.CertificateException;
-import java.security.cert.X509Certificate;
-
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
@@ -69,7 +73,7 @@ public class PreCalculatedDigestSignatureTest {
 
     private static final char[] PASSWORD = "changeit".toCharArray();
     private static final String ALIAS = "mullan";
-    private String signatureFilePath;
+    private File signatureFile;
 
     @TempDir
     public Path testFolder;
@@ -79,15 +83,15 @@ public class PreCalculatedDigestSignatureTest {
     @BeforeEach
     public void setUp() throws Exception {
         org.apache.xml.security.Init.init();
-        signatureFilePath = getAbsolutePath("src/test/resources/org/apache/xml/security/samples/input/signatureWithExternalReference.xml");
-        KeyStore keyStore = openKeyStore();
+        signatureFile = resolveFile("src/test/resources/org/apache/xml/security/samples/input/signatureWithExternalReference.xml");
+        KeyStore keyStore = XmlSecTestEnvironment.getTestKeyStore();
         privateKey = (PrivateKey) keyStore.getKey(ALIAS, PASSWORD);
         signingCert = (X509Certificate) keyStore.getCertificate(ALIAS);
     }
 
     @Test
     public void validateSignatureWithCorrectDigestShouldBeValid() throws Exception {
-        XMLSignature signature = openSignature(signatureFilePath);
+        XMLSignature signature = openSignature(signatureFile);
         //Add resource resolver for the external document (test.txt) with the pre-calculated digest (valid for this test)
         ExternalResourceResolver resolver = new ExternalResourceResolver(EXTERNAL_DOCUMENT_URI, PRE_CALCULATED_DIGEST);
         signature.addResourceResolver(resolver);
@@ -97,7 +101,7 @@ public class PreCalculatedDigestSignatureTest {
 
     @Test
     public void validateSignatureWithWrongDigestShouldBeInvalid() throws Exception {
-        XMLSignature signature = openSignature(signatureFilePath);
+        XMLSignature signature = openSignature(signatureFile);
         //Add resource resolver for the external document (test.txt) with the pre-calculated digest (invalid for this test)
         ExternalResourceResolver resolver = new ExternalResourceResolver(EXTERNAL_DOCUMENT_URI, "BjVs1oFu54LZwQuUA+kHgZApH0pIc8PGOoo0YrLrNUI=");
         signature.addResourceResolver(resolver);
@@ -121,8 +125,8 @@ public class PreCalculatedDigestSignatureTest {
         assertTrue(signature.checkSignatureValue(signingCert));
     }
 
-    private XMLSignature openSignature(String signatureFile) throws Exception {
-        Document document = XMLUtils.read(new FileInputStream(new File(signatureFile)), false);
+    private XMLSignature openSignature(File signatureFile) throws Exception {
+        Document document = XMLUtils.read(new FileInputStream(signatureFile), false);
         Element root = document.getDocumentElement();
         Element signatureDocument = (Element) root.getFirstChild();
         String baseURI = "";
@@ -176,33 +180,13 @@ public class PreCalculatedDigestSignatureTest {
         }
     }
 
-    private KeyStore openKeyStore() throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException {
-        FileInputStream fileInputStream = null;
-        try {
-            KeyStore keyStore = KeyStore.getInstance("JKS");
-            fileInputStream = new FileInputStream(getAbsolutePath("src/test/resources/test.jks"));
-            keyStore.load(fileInputStream, PASSWORD);
-            return keyStore;
-        } finally {
-            fileInputStream.close();
-        }
-    }
-
-    private String getAbsolutePath(String path) {
-        String basedir = System.getProperty("basedir");
-        if (basedir != null && basedir.length() != 0) {
-            path = basedir + "/" + path;
-        }
-        return path;
-    }
-
     /**
      * Resolves external resources with pre-calculated digest.
      */
     public static class ExternalResourceResolver extends ResourceResolverSpi {
 
         private final String externalDocumentUri;
-        private String preCalculatedDigest;
+        private final String preCalculatedDigest;
 
         /**
          * Constructor for resolving external resources with pre-calculated digest.
diff --git a/src/test/java/org/apache/xml/security/test/dom/signature/ProcessingInstructionTest.java b/src/test/java/org/apache/xml/security/test/dom/signature/ProcessingInstructionTest.java
index 8a54b2cc..7491d71e 100644
--- a/src/test/java/org/apache/xml/security/test/dom/signature/ProcessingInstructionTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/signature/ProcessingInstructionTest.java
@@ -31,14 +31,16 @@ import javax.xml.xpath.XPathFactory;
 import org.apache.xml.security.signature.XMLSignature;
 import org.apache.xml.security.signature.XMLSignatureInput;
 import org.apache.xml.security.test.dom.DSNamespaceContext;
-import org.w3c.dom.Attr;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
 import org.apache.xml.security.utils.XMLUtils;
 import org.apache.xml.security.utils.resolver.ResourceResolverContext;
 import org.apache.xml.security.utils.resolver.ResourceResolverException;
 import org.apache.xml.security.utils.resolver.ResourceResolverSpi;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
 
 /**
  * A test-case for Bugzilla bug 45744 - "XPath transform and xml-stylesheet".
@@ -49,21 +51,16 @@ public class ProcessingInstructionTest {
         org.apache.xml.security.Init.init();
     }
 
-    private static String dir;
+    private static File dir;
 
     public ProcessingInstructionTest() {
-        String base = System.getProperty("basedir") == null
-            ? "./" : System.getProperty("basedir");
-        String fs = System.getProperty("file.separator");
-        dir = base + fs + "src/test/resources" + fs + "org" + fs + "apache" + fs + "xml" +
-            fs + "security" + fs + "testcases" + fs;
+        dir = resolveFile("src", "test", "resources", "org", "apache", "xml", "security", "testcases");
     }
 
     @org.junit.jupiter.api.Test
     public void testProcessingInstruction() throws Exception {
-        String signatureFileName = dir + "upp_sign.xml";
-        File f = new File(signatureFileName);
-        Document doc = XMLUtils.read(new FileInputStream(f), false);
+        File f = new File(dir, "upp_sign.xml");
+        Document doc = XMLUtils.read(f, false);
 
         Node obj =
             doc.getElementsByTagNameNS("http://uri.etsi.org/01903/v1.3.2#", "QualifyingProperties").item(0);
@@ -117,8 +114,7 @@ public class ProcessingInstructionTest {
             try {
                 URI uriNew = getNewURI(context.uriToResolve, context.baseUri);
 
-                FileInputStream inputStream =
-                    new FileInputStream(dir + "out.xml");
+                FileInputStream inputStream = new FileInputStream(new File(dir, "out.xml"));
                 XMLSignatureInput result = new XMLSignatureInput(inputStream);
 
                 result.setSourceURI(uriNew.toString());
@@ -133,7 +129,7 @@ public class ProcessingInstructionTest {
 
         @Override
         public boolean engineCanResolveURI(ResourceResolverContext context) {
-            return !(context.uriToResolve == null || !"out.xml".equals(context.uriToResolve));
+            return "out.xml".equals(context.uriToResolve);
         }
 
         private static URI getNewURI(String uri, String baseURI) throws URISyntaxException {
diff --git a/src/test/java/org/apache/xml/security/test/dom/signature/Santuario499Test.java b/src/test/java/org/apache/xml/security/test/dom/signature/Santuario499Test.java
index 9e16dac0..d104c1bf 100644
--- a/src/test/java/org/apache/xml/security/test/dom/signature/Santuario499Test.java
+++ b/src/test/java/org/apache/xml/security/test/dom/signature/Santuario499Test.java
@@ -40,9 +40,6 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
  */
 public class Santuario499Test {
 
-    static org.slf4j.Logger LOG =
-        org.slf4j.LoggerFactory.getLogger(Santuario499Test.class);
-
     static {
         Init.init();
     }
diff --git a/src/test/java/org/apache/xml/security/test/dom/signature/SignatureReferenceTest.java b/src/test/java/org/apache/xml/security/test/dom/signature/SignatureReferenceTest.java
index 1c65f89b..bec03970 100644
--- a/src/test/java/org/apache/xml/security/test/dom/signature/SignatureReferenceTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/signature/SignatureReferenceTest.java
@@ -19,7 +19,6 @@
 package org.apache.xml.security.test.dom.signature;
 
 
-import java.io.FileInputStream;
 import java.io.InputStream;
 import java.security.KeyStore;
 import java.security.PrivateKey;
@@ -33,8 +32,6 @@ import javax.xml.xpath.XPath;
 import javax.xml.xpath.XPathConstants;
 import javax.xml.xpath.XPathFactory;
 
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
 import org.apache.xml.security.Init;
 import org.apache.xml.security.exceptions.XMLSecurityException;
 import org.apache.xml.security.keys.KeyInfo;
@@ -46,6 +43,7 @@ import org.apache.xml.security.signature.XMLSignature;
 import org.apache.xml.security.signature.XMLSignatureInput;
 import org.apache.xml.security.signature.reference.ReferenceData;
 import org.apache.xml.security.signature.reference.ReferenceNodeSetData;
+import org.apache.xml.security.test.XmlSecTestEnvironment;
 import org.apache.xml.security.test.dom.DSNamespaceContext;
 import org.apache.xml.security.test.dom.TestUtils;
 import org.apache.xml.security.transforms.Transforms;
@@ -56,6 +54,8 @@ import org.apache.xml.security.utils.resolver.ResourceResolverContext;
 import org.apache.xml.security.utils.resolver.ResourceResolverException;
 import org.apache.xml.security.utils.resolver.ResourceResolverSpi;
 import org.apache.xml.security.utils.resolver.implementations.ResolverXPointer;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -71,12 +71,6 @@ import static org.junit.jupiter.api.Assertions.fail;
 public class SignatureReferenceTest {
     public static final String DS_NS = "http://www.w3.org/2000/09/xmldsig#";
 
-    private static final String BASEDIR =
-        System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-    public static final String KEYSTORE_DIRECTORY = BASEDIR + "/src/test/resources/";
-    public static final String KEYSTORE_PASSWORD_STRING = "changeit";
-    public static final char[] KEYSTORE_PASSWORD = KEYSTORE_PASSWORD_STRING.toCharArray();
-
     public SignatureReferenceTest() throws Exception {
         Init.init();
         ElementProxy.setDefaultPrefix(Constants.SignatureSpecNS, "ds");
@@ -87,7 +81,7 @@ public class SignatureReferenceTest {
         Document doc = getOriginalDocument();
         XMLSignature signature = signDocument(doc);
 
-        PublicKey pubKey = getPublicKey();
+        PublicKey pubKey = getPublicKey(XmlSecTestEnvironment.getTestKeyStore());
         assertTrue(signature.checkSignatureValue(pubKey));
 
         // Check the reference(s)
@@ -192,22 +186,8 @@ public class SignatureReferenceTest {
         assertFalse(verifiedReferences.get(0).getManifestReferences().get(0).isValid());
     }
 
-    /**
-     * Loads the 'localhost' keystore from the test keystore.
-     *
-     * @return test keystore.
-     * @throws Exception
-     */
-    private KeyStore getKeyStore() throws Exception {
-        KeyStore ks = KeyStore.getInstance("JKS");
-        InputStream ksis = new FileInputStream(KEYSTORE_DIRECTORY + "test.jks");
-        ks.load(ksis, KEYSTORE_PASSWORD);
-        ksis.close();
-        return ks;
-    }
 
-    private PublicKey getPublicKey() throws Exception {
-        KeyStore keyStore = getKeyStore();
+    private PublicKey getPublicKey(KeyStore keyStore) throws Exception {
         Enumeration<String> aliases = keyStore.aliases();
         while (aliases.hasMoreElements()) {
             String alias = aliases.nextElement();
@@ -218,13 +198,12 @@ public class SignatureReferenceTest {
         return null;
     }
 
-    private PrivateKey getPrivateKey() throws Exception {
-        KeyStore keyStore = getKeyStore();
+    private PrivateKey getPrivateKey(KeyStore keyStore) throws Exception {
         Enumeration<String> aliases = keyStore.aliases();
         while (aliases.hasMoreElements()) {
             String alias = aliases.nextElement();
             if (keyStore.isKeyEntry(alias)) {
-                return (PrivateKey) keyStore.getKey(alias, KEYSTORE_PASSWORD);
+                return (PrivateKey) keyStore.getKey(alias, XmlSecTestEnvironment.TEST_KS_PASSWORD.toCharArray());
             }
         }
         return null;
@@ -251,9 +230,9 @@ public class SignatureReferenceTest {
         transforms.addTransform(Transforms.TRANSFORM_ENVELOPED_SIGNATURE);
         transforms.addTransform(Transforms.TRANSFORM_C14N_WITH_COMMENTS);
         sig.addDocument("", transforms, Constants.ALGO_ID_DIGEST_SHA1);
-
-        sig.addKeyInfo(getPublicKey());
-        sig.sign(getPrivateKey());
+        KeyStore keyStore = XmlSecTestEnvironment.getTestKeyStore();
+        sig.addKeyInfo(getPublicKey(keyStore));
+        sig.sign(getPrivateKey(keyStore));
 
         return sig;
     }
diff --git a/src/test/java/org/apache/xml/security/test/dom/signature/SignatureTest.java b/src/test/java/org/apache/xml/security/test/dom/signature/SignatureTest.java
index 1c3a7287..2cf66cdd 100644
--- a/src/test/java/org/apache/xml/security/test/dom/signature/SignatureTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/signature/SignatureTest.java
@@ -18,10 +18,6 @@
  */
 package org.apache.xml.security.test.dom.signature;
 
-import java.io.InputStream;
-
-
-import java.io.FileInputStream;
 import java.security.KeyStore;
 import java.security.PrivateKey;
 import java.security.Provider;
@@ -31,6 +27,7 @@ import java.util.Enumeration;
 import org.apache.xml.security.Init;
 import org.apache.xml.security.signature.XMLSignature;
 import org.apache.xml.security.signature.XMLSignatureException;
+import org.apache.xml.security.test.XmlSecTestEnvironment;
 import org.apache.xml.security.test.dom.TestUtils;
 import org.apache.xml.security.transforms.Transforms;
 import org.apache.xml.security.utils.Constants;
@@ -44,16 +41,12 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class SignatureTest {
     public static final String DS_NS = "http://www.w3.org/2000/09/xmldsig#";
-
-    private static final String BASEDIR =
-        System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-    public static final String KEYSTORE_DIRECTORY = BASEDIR + "/src/test/resources/";
-    public static final String KEYSTORE_PASSWORD_STRING = "changeit";
-    public static final char[] KEYSTORE_PASSWORD = KEYSTORE_PASSWORD_STRING.toCharArray();
+    private final KeyStore keyStore;
 
     public SignatureTest() throws Exception {
         Init.init();
         ElementProxy.setDefaultPrefix(Constants.SignatureSpecNS, "ds");
+        keyStore = XmlSecTestEnvironment.getTestKeyStore();
     }
 
     @org.junit.jupiter.api.Test
@@ -144,14 +137,15 @@ public class SignatureTest {
     public static class VerifyingRunnable implements Runnable {
         public volatile Throwable throwable;
         public volatile boolean result;
-        private XMLSignature signature;
-        private PublicKey pubKey;
+        private final XMLSignature signature;
+        private final PublicKey pubKey;
 
         public VerifyingRunnable(XMLSignature signature, PublicKey pubKey) {
             this.signature = signature;
             this.pubKey = pubKey;
         }
 
+        @Override
         public void run() {
             try {
                 result = signature.checkSignatureValue(pubKey);
@@ -161,22 +155,7 @@ public class SignatureTest {
         }
     }
 
-    /**
-     * Loads the 'localhost' keystore from the test keystore.
-     *
-     * @return test keystore.
-     * @throws Exception
-     */
-    private KeyStore getKeyStore() throws Exception {
-        KeyStore ks = KeyStore.getInstance("JKS");
-        InputStream ksis = new FileInputStream(KEYSTORE_DIRECTORY + "test.jks");
-        ks.load(ksis, KEYSTORE_PASSWORD);
-        ksis.close();
-        return ks;
-    }
-
     private PublicKey getPublicKey() throws Exception {
-        KeyStore keyStore = getKeyStore();
         Enumeration<String> aliases = keyStore.aliases();
         while (aliases.hasMoreElements()) {
             String alias = aliases.nextElement();
@@ -188,12 +167,11 @@ public class SignatureTest {
     }
 
     private PrivateKey getPrivateKey() throws Exception {
-        KeyStore keyStore = getKeyStore();
         Enumeration<String> aliases = keyStore.aliases();
         while (aliases.hasMoreElements()) {
             String alias = aliases.nextElement();
             if (keyStore.isKeyEntry(alias)) {
-                return (PrivateKey) keyStore.getKey(alias, KEYSTORE_PASSWORD);
+                return (PrivateKey) keyStore.getKey(alias, XmlSecTestEnvironment.TEST_KS_PASSWORD.toCharArray());
             }
         }
         return null;
diff --git a/src/test/java/org/apache/xml/security/test/dom/signature/UnknownAlgoSignatureTest.java b/src/test/java/org/apache/xml/security/test/dom/signature/UnknownAlgoSignatureTest.java
index 65f8a207..b122f1f5 100644
--- a/src/test/java/org/apache/xml/security/test/dom/signature/UnknownAlgoSignatureTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/signature/UnknownAlgoSignatureTest.java
@@ -32,11 +32,13 @@ import javax.xml.xpath.XPathFactory;
 import org.apache.xml.security.Init;
 import org.apache.xml.security.signature.XMLSignature;
 import org.apache.xml.security.signature.XMLSignatureException;
+import org.apache.xml.security.test.XmlSecTestEnvironment;
 import org.apache.xml.security.test.dom.DSNamespaceContext;
 import org.apache.xml.security.utils.XMLUtils;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 
@@ -49,18 +51,10 @@ import static org.junit.jupiter.api.Assertions.fail;
  */
 public class UnknownAlgoSignatureTest {
 
-    private static final String BASEDIR = System.getProperty("basedir");
-    private static final String SEP = System.getProperty("file.separator");
-
     protected static final String KEYSTORE_TYPE = "JKS";
-
-    protected static final String KEYSTORE_FILE =
-        "src/test/resources/org/apache/xml/security/samples/input/keystore.jks";
-
+    protected static final String KEYSTORE_FILE = "src/test/resources/org/apache/xml/security/samples/input/keystore.jks";
     protected static final String CERT_ALIAS = "test";
-
-    protected static final String SIGNATURE_SOURCE_PATH =
-        "src/test/resources/org/apache/xml/security/temp/signature";
+    protected static final String SIGNATURE_SOURCE_PATH = "src/test/resources/org/apache/xml/security/temp/signature";
 
     protected PublicKey publicKey;
 
@@ -69,14 +63,10 @@ public class UnknownAlgoSignatureTest {
     }
 
     public UnknownAlgoSignatureTest() throws Exception {
-        FileInputStream fis = null;
-        if (BASEDIR != null && BASEDIR.length() != 0) {
-            fis = new FileInputStream(BASEDIR + SEP + KEYSTORE_FILE);
-        } else {
-            fis = new FileInputStream(KEYSTORE_FILE);
-        }
         KeyStore keyStore = KeyStore.getInstance(KEYSTORE_TYPE);
-        keyStore.load(fis, null);
+        try (FileInputStream fis = new FileInputStream(resolveFile(KEYSTORE_FILE))) {
+            keyStore.load(fis, null);
+        }
         X509Certificate cert = (X509Certificate) keyStore.getCertificate(CERT_ALIAS);
         publicKey = cert.getPublicKey();
     }
@@ -127,12 +117,7 @@ public class UnknownAlgoSignatureTest {
     }
 
     private XMLSignature unmarshalXMLSignature(String fileName) throws Exception {
-        File file = null;
-        if (BASEDIR != null && BASEDIR.length() != 0) {
-            file = new File(BASEDIR + SEP + SIGNATURE_SOURCE_PATH, fileName);
-        } else {
-            file = new File(SIGNATURE_SOURCE_PATH, fileName);
-        }
+        File file = XmlSecTestEnvironment.resolveFile(SIGNATURE_SOURCE_PATH, fileName);
         Document doc = getDocument(file);
 
         XPathFactory xpf = XPathFactory.newInstance();
@@ -140,13 +125,12 @@ public class UnknownAlgoSignatureTest {
         xpath.setNamespaceContext(new DSNamespaceContext());
 
         String expression = "//ds:Signature[1]";
-        Element sigElement =
-            (Element) xpath.evaluate(expression, doc, XPathConstants.NODE);
+        Element sigElement = (Element) xpath.evaluate(expression, doc, XPathConstants.NODE);
         return new XMLSignature(sigElement, file.toURI().toURL().toString());
     }
 
     public static Document getDocument(File file) throws Exception {
-        return XMLUtils.read(new FileInputStream(file), false);
+        return XMLUtils.read(file, false);
     }
 
 }
\ No newline at end of file
diff --git a/src/test/java/org/apache/xml/security/test/dom/signature/X509DataTest.java b/src/test/java/org/apache/xml/security/test/dom/signature/X509DataTest.java
index 7138f1d5..4ec469b9 100644
--- a/src/test/java/org/apache/xml/security/test/dom/signature/X509DataTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/signature/X509DataTest.java
@@ -29,6 +29,7 @@ import java.security.cert.X509Certificate;
 
 import org.apache.xml.security.Init;
 import org.apache.xml.security.signature.XMLSignature;
+import org.apache.xml.security.test.XmlSecTestEnvironment;
 import org.apache.xml.security.test.dom.TestUtils;
 import org.apache.xml.security.utils.XMLUtils;
 import org.w3c.dom.Document;
@@ -40,9 +41,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 public class X509DataTest {
 
-    private static final String BASEDIR = System.getProperty("basedir");
-
-    KeyStore ks = null;
+    KeyStore ks;
 
     @org.junit.jupiter.api.Test
     public void testAddX509SubjectName() throws Exception {
@@ -90,18 +89,11 @@ public class X509DataTest {
         if (ks != null) {
             return ks;
         }
-        String keystoreType = "JKS";
         String keystoreFile = "src/test/resources/org/apache/xml/security/samples/input/keystore.jks";
-        String keystorePass = "xmlsecurity";
-        ks = KeyStore.getInstance(keystoreType);
-        FileInputStream fis = null;
-        if (BASEDIR != null && BASEDIR.length() != 0) {
-            fis = new FileInputStream(BASEDIR + "/" + keystoreFile);
-        } else {
-            fis = new FileInputStream(keystoreFile);
+        ks = KeyStore.getInstance("JKS");
+        try (FileInputStream fis = new FileInputStream(XmlSecTestEnvironment.resolveFile(keystoreFile))) {
+            ks.load(fis, "xmlsecurity".toCharArray());
         }
-        //load the keystore
-        ks.load(fis, keystorePass.toCharArray());
         return ks;
     }
 
diff --git a/src/test/java/org/apache/xml/security/test/dom/signature/XMLSignatureInputTest.java b/src/test/java/org/apache/xml/security/test/dom/signature/XMLSignatureInputTest.java
index 36615e2f..15beb151 100644
--- a/src/test/java/org/apache/xml/security/test/dom/signature/XMLSignatureInputTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/signature/XMLSignatureInputTest.java
@@ -45,9 +45,6 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
  */
 public class XMLSignatureInputTest {
 
-    static org.slf4j.Logger LOG =
-        org.slf4j.LoggerFactory.getLogger(XMLSignatureInputTest.class);
-
     static final String _octetStreamTextInput = "Kleiner Test";
     static final String _nodeSetInput1 =
         "<?xml version=\"1.0\"?>\n"
diff --git a/src/test/java/org/apache/xml/security/test/dom/signature/XPointerResourceResolver.java b/src/test/java/org/apache/xml/security/test/dom/signature/XPointerResourceResolver.java
index 8fd92790..8a792737 100644
--- a/src/test/java/org/apache/xml/security/test/dom/signature/XPointerResourceResolver.java
+++ b/src/test/java/org/apache/xml/security/test/dom/signature/XPointerResourceResolver.java
@@ -49,7 +49,7 @@ public class XPointerResourceResolver extends ResourceResolverSpi {
     private static final String XP_OPEN = "xpointer(";
     private static final String XNS_OPEN = "xmlns(";
 
-    private Node baseNode;
+    private final Node baseNode;
 
     public XPointerResourceResolver(Node baseNode) {
         this.baseNode = baseNode;
@@ -59,7 +59,7 @@ public class XPointerResourceResolver extends ResourceResolverSpi {
     public boolean engineCanResolveURI(ResourceResolverContext context) {
         String v = context.uriToResolve;
 
-        if (v == null || v.length() <= 0) {
+        if (v == null || v.isEmpty()) {
             return false;
         }
 
diff --git a/src/test/java/org/apache/xml/security/test/dom/signature/XmlSecTest.java b/src/test/java/org/apache/xml/security/test/dom/signature/XmlSecTest.java
index cb6b6031..e1cf8c84 100644
--- a/src/test/java/org/apache/xml/security/test/dom/signature/XmlSecTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/signature/XmlSecTest.java
@@ -18,7 +18,6 @@
  */
 package org.apache.xml.security.test.dom.signature;
 
-import java.io.FileInputStream;
 import java.security.KeyPair;
 import java.security.KeyPairGenerator;
 import java.security.KeyStore;
@@ -34,6 +33,7 @@ import org.apache.xml.security.Init;
 import org.apache.xml.security.algorithms.MessageDigestAlgorithm;
 import org.apache.xml.security.c14n.Canonicalizer;
 import org.apache.xml.security.signature.XMLSignature;
+import org.apache.xml.security.test.XmlSecTestEnvironment;
 import org.apache.xml.security.test.dom.DSNamespaceContext;
 import org.apache.xml.security.test.dom.TestUtils;
 import org.apache.xml.security.transforms.Transforms;
@@ -52,13 +52,6 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
  */
 public class XmlSecTest {
 
-    private static final String BASEDIR =
-        System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-
-    static org.slf4j.Logger LOG =
-        org.slf4j.LoggerFactory.getLogger
-            (XmlSecTest.class.getName());
-
     @org.junit.jupiter.api.Test
     public void testCheckXmlSignatureSoftwareStack() throws Exception {
         checkXmlSignatureSoftwareStack(false);
@@ -89,12 +82,7 @@ public class XmlSecTest {
         PublicKey publicKey = null;
         X509Certificate signingCert = null;
         if (cert) {
-            // get key & self-signed certificate from keystore
-            String fs = System.getProperty("file.separator");
-            FileInputStream fis =
-                new FileInputStream(BASEDIR + fs + "src/test/resources" + fs + "test.jks");
-            KeyStore ks = KeyStore.getInstance("JKS");
-            ks.load(fis, "changeit".toCharArray());
+            KeyStore ks = XmlSecTestEnvironment.getTestKeyStore();
             signingCert = (X509Certificate) ks.getCertificate("mullan");
             publicKey = signingCert.getPublicKey();
             privateKey = (PrivateKey) ks.getKey("mullan", "changeit".toCharArray());
diff --git a/src/test/java/org/apache/xml/security/test/dom/transforms/implementations/TransformXSLTTest.java b/src/test/java/org/apache/xml/security/test/dom/transforms/implementations/TransformXSLTTest.java
index 7394461a..400ed345 100644
--- a/src/test/java/org/apache/xml/security/test/dom/transforms/implementations/TransformXSLTTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/transforms/implementations/TransformXSLTTest.java
@@ -19,7 +19,6 @@
 package org.apache.xml.security.test.dom.transforms.implementations;
 
 import java.io.File;
-import java.io.FileInputStream;
 
 import javax.xml.xpath.XPath;
 import javax.xml.xpath.XPathConstants;
@@ -33,20 +32,14 @@ import org.apache.xml.security.utils.XMLUtils;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
+
 public class TransformXSLTTest {
 
-    private static final String BASEDIR =
-        System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-    private static final String SEP = System.getProperty("file.separator");
-    private static final String SOURCE_PATH =
-        "src/test/resources/com/phaos/phaos-xmldsig-three/";
-    private static final String SIGNATURE_FILE =
-        "signature-rsa-detached-xslt-transform.xml";
+    private static final String SOURCE_PATH = "src/test/resources/com/phaos/phaos-xmldsig-three";
+    private static final String SIGNATURE_FILE = "signature-rsa-detached-xslt-transform.xml";
     private static final String STYLESHEET_FILE = "document-stylesheet.xml";
 
-    static org.slf4j.Logger LOG =
-        org.slf4j.LoggerFactory.getLogger(TransformXSLTTest.class);
-
     static {
         org.apache.xml.security.Init.init();
     }
@@ -57,34 +50,22 @@ public class TransformXSLTTest {
      */
     @org.junit.jupiter.api.Test
     public void test1() throws Exception {
-        File file1 = null;
-        File file2 = null;
-        if (BASEDIR != null && BASEDIR.length() != 0) {
-            file1 = new File(BASEDIR + SEP + SOURCE_PATH, SIGNATURE_FILE);
-            file2 = new File(BASEDIR + SEP + SOURCE_PATH, STYLESHEET_FILE);
-        } else {
-            file1 = new File(SOURCE_PATH, SIGNATURE_FILE);
-            file1 = new File(SOURCE_PATH, STYLESHEET_FILE);
-        }
-        Document doc1 = getDocument(file1);
-        Document doc2 = getDocument(file2);
+        Document doc1 = getDocument(SIGNATURE_FILE);
+        Document doc2 = getDocument(STYLESHEET_FILE);
 
         XPathFactory xpf = XPathFactory.newInstance();
         XPath xpath = xpf.newXPath();
         xpath.setNamespaceContext(new DSNamespaceContext());
 
         String expression = "//ds:Transform[1]";
-        Element transformEl =
-            (Element) xpath.evaluate(expression, doc1, XPathConstants.NODE);
-
-        Transform transform =
-            new Transform(doc1, Transforms.TRANSFORM_XSLT, transformEl.getChildNodes());
+        Element transformEl = (Element) xpath.evaluate(expression, doc1, XPathConstants.NODE);
 
+        Transform transform = new Transform(doc1, Transforms.TRANSFORM_XSLT, transformEl.getChildNodes());
         transform.performTransform(new XMLSignatureInput(doc2), false);
     }
 
-    private static Document getDocument(File file) throws Exception {
-        return XMLUtils.read(new FileInputStream(file), false);
+    private static Document getDocument(String fileName) throws Exception {
+        return XMLUtils.read(new File(resolveFile(SOURCE_PATH), fileName), false);
     }
 
 }
diff --git a/src/test/java/org/apache/xml/security/test/dom/utils/JDKXPathFactoryTest.java b/src/test/java/org/apache/xml/security/test/dom/utils/JDKXPathFactoryTest.java
index e27400df..7328373d 100644
--- a/src/test/java/org/apache/xml/security/test/dom/utils/JDKXPathFactoryTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/utils/JDKXPathFactoryTest.java
@@ -58,10 +58,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
  */
 public class JDKXPathFactoryTest {
 
-    static org.slf4j.Logger LOG =
-        org.slf4j.LoggerFactory.getLogger(JDKXPathFactoryTest.class);
-
-    private KeyPair kp;
+    private final KeyPair kp;
 
     public JDKXPathFactoryTest() throws Exception {
         // org.apache.xml.security.Init.init();
diff --git a/src/test/java/org/apache/xml/security/test/dom/utils/resolver/OfflineResolver.java b/src/test/java/org/apache/xml/security/test/dom/utils/resolver/OfflineResolver.java
index 62577cda..97db09cf 100644
--- a/src/test/java/org/apache/xml/security/test/dom/utils/resolver/OfflineResolver.java
+++ b/src/test/java/org/apache/xml/security/test/dom/utils/resolver/OfflineResolver.java
@@ -27,6 +27,7 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.xml.security.signature.XMLSignatureInput;
+import org.apache.xml.security.test.XmlSecTestEnvironment;
 import org.apache.xml.security.utils.resolver.ResourceResolverContext;
 import org.apache.xml.security.utils.resolver.ResourceResolverException;
 import org.apache.xml.security.utils.resolver.ResourceResolverSpi;
@@ -58,8 +59,7 @@ public class OfflineResolver extends ResourceResolverSpi {
         _uriMap = new HashMap<>();
         _mimeMap = new HashMap<>();
 
-        String basedir =
-            System.getProperty("basedir") == null ? "./": System.getProperty("basedir") + "/";
+        String basedir = XmlSecTestEnvironment.resolvePath(".") + "/";
 
         OfflineResolver.register(
             "http://www.w3.org/TR/xml-stylesheet",
@@ -101,7 +101,6 @@ public class OfflineResolver extends ResourceResolverSpi {
         throws ResourceResolverException {
         try {
             String URI = context.uriToResolve;
-
             if (OfflineResolver._uriMap.containsKey(URI)) {
                 String newURI = OfflineResolver._uriMap.get(URI);
 
@@ -117,17 +116,11 @@ public class OfflineResolver extends ResourceResolverSpi {
                 result.setMIMEType(OfflineResolver._mimeMap.get(URI));
 
                 return result;
-            } else {
-                Object[] exArgs = {"The URI " + URI + " is not configured for offline work" };
-
-                throw new ResourceResolverException(
-                    "generic.EmptyMessage", exArgs, context.uriToResolve, context.baseUri
-                );
             }
+            Object[] exArgs = {"The URI " + URI + " is not configured for offline work" };
+            throw new ResourceResolverException("generic.EmptyMessage", exArgs, context.uriToResolve, context.baseUri);
         } catch (IOException ex) {
-            throw new ResourceResolverException(
-                ex, context.uriToResolve, context.baseUri, "generic.EmptyMessage"
-            );
+            throw new ResourceResolverException(ex, context.uriToResolve, context.baseUri, "generic.EmptyMessage");
         }
     }
 
@@ -143,18 +136,15 @@ public class OfflineResolver extends ResourceResolverSpi {
             return false;
         }
 
-        URI uriNew = null;
         try {
-            uriNew = getNewURI(context.uriToResolve, context.baseUri);
+            URI uriNew = getNewURI(context.uriToResolve, context.baseUri);
             if ("http".equals(uriNew.getScheme())) {
                 LOG.debug("I state that I can resolve " + uriNew.toString());
                 return true;
             }
-
         } catch (URISyntaxException ex) {
             //
         }
-
         return false;
     }
 
@@ -172,7 +162,7 @@ public class OfflineResolver extends ResourceResolverSpi {
 
     private static URI getNewURI(String uri, String baseURI) throws URISyntaxException {
         URI newUri = null;
-        if (baseURI == null || baseURI.length() == 0) {
+        if (baseURI == null || baseURI.isEmpty()) {
             newUri = new URI(uri);
         } else {
             newUri = new URI(baseURI).resolve(uri);
@@ -180,8 +170,7 @@ public class OfflineResolver extends ResourceResolverSpi {
 
         // if the URI contains a fragment, ignore it
         if (newUri.getFragment() != null) {
-            URI uriNewNoFrag =
-                new URI(newUri.getScheme(), newUri.getSchemeSpecificPart(), null);
+            URI uriNewNoFrag = new URI(newUri.getScheme(), newUri.getSchemeSpecificPart(), null);
             return uriNewNoFrag;
         }
         return newUri;
diff --git a/src/test/java/org/apache/xml/security/test/dom/utils/resolver/ResourceResolverTest.java b/src/test/java/org/apache/xml/security/test/dom/utils/resolver/ResourceResolverTest.java
index 192585b0..35d669d3 100644
--- a/src/test/java/org/apache/xml/security/test/dom/utils/resolver/ResourceResolverTest.java
+++ b/src/test/java/org/apache/xml/security/test/dom/utils/resolver/ResourceResolverTest.java
@@ -28,6 +28,7 @@ import org.apache.xml.security.utils.resolver.implementations.ResolverLocalFiles
 import org.w3c.dom.Attr;
 import org.w3c.dom.Document;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -83,8 +84,7 @@ public class ResourceResolverTest {
     public void testLocalFileWithEmptyBaseURI() throws Exception {
         Document doc = TestUtils.newDocument();
         Attr uriAttr = doc.createAttribute("URI");
-        String basedir = System.getProperty("basedir");
-        String file = new File(basedir, "pom.xml").toURI().toString();
+        String file = resolveFile("pom.xml").toURI().toString();
         uriAttr.setValue(file);
 
         ResourceResolver.register(new ResolverLocalFilesystem(), false);
@@ -102,8 +102,7 @@ public class ResourceResolverTest {
     public void testIsSafeURIToResolveFile() throws Exception {
         Document doc = TestUtils.newDocument();
         Attr uriAttr = doc.createAttribute("URI");
-        String basedir = System.getProperty("basedir");
-        String file = new File(basedir, "pom.xml").toURI().toString();
+        String file = resolveFile("pom.xml").toURI().toString();
         uriAttr.setValue(file);
 
         ResourceResolverContext resolverContext =
@@ -115,8 +114,7 @@ public class ResourceResolverTest {
     public void testIsSafeURIToResolveFileBaseURI() throws Exception {
         Document doc = TestUtils.newDocument();
         Attr uriAttr = doc.createAttribute("URI");
-        String basedir = System.getProperty("basedir");
-        String file = new File(basedir, "pom.xml").toURI().toString();
+        String file = resolveFile("pom.xml").toURI().toString();
         uriAttr.setValue("xyz");
 
         ResourceResolverContext resolverContext =
diff --git a/src/test/java/org/apache/xml/security/test/dom/xalan/XalanXPathAPI.java b/src/test/java/org/apache/xml/security/test/dom/xalan/XalanXPathAPI.java
index 69b6e0fa..f5fb9914 100644
--- a/src/test/java/org/apache/xml/security/test/dom/xalan/XalanXPathAPI.java
+++ b/src/test/java/org/apache/xml/security/test/dom/xalan/XalanXPathAPI.java
@@ -73,6 +73,7 @@ class XalanXPathAPI implements XPathAPI {
      *
      * @throws TransformerException
      */
+    @Override
     public NodeList selectNodeList(
         Node contextNode, Node xpathnode, String str, Node namespaceNode
     ) throws TransformerException {
@@ -91,6 +92,7 @@ class XalanXPathAPI implements XPathAPI {
      *  @param str The XPath expression
      *  @param namespaceNode The node from which prefixes in the XPath will be resolved to namespaces.
      */
+    @Override
     public boolean evaluate(Node contextNode, Node xpathnode, String str, Node namespaceNode)
         throws TransformerException {
         XObject object = eval(contextNode, xpathnode, str, namespaceNode);
@@ -100,6 +102,7 @@ class XalanXPathAPI implements XPathAPI {
     /**
      * Clear any context information from this object
      */
+    @Override
     public void clear() {
         xpathStr = null;
         xpath = null;
@@ -150,7 +153,7 @@ class XalanXPathAPI implements XPathAPI {
             Constructor<?> constructor = XPath.class.getConstructor(classes);
             xpath = (XPath) constructor.newInstance(objects);
         } catch (Exception ex) {
-            LOG.debug(ex.getMessage(), ex);
+            throw new IllegalStateException("Could not construct xpath for " + str, ex);
         }
         if (xpath == null) {
             xpath = new XPath(str, null, prefixResolver, XPath.SELECT, null);
diff --git a/src/test/java/javax/xml/crypto/test/KeySelectorExceptionTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/KeySelectorExceptionTest.java
similarity index 98%
rename from src/test/java/javax/xml/crypto/test/KeySelectorExceptionTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/KeySelectorExceptionTest.java
index 87063ce9..bef3f0af 100644
--- a/src/test/java/javax/xml/crypto/test/KeySelectorExceptionTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/KeySelectorExceptionTest.java
@@ -19,7 +19,7 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test;
+package org.apache.xml.security.test.javax.xml.crypto;
 
 
 import java.io.ByteArrayOutputStream;
diff --git a/src/test/java/javax/xml/crypto/test/KeySelectorTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/KeySelectorTest.java
similarity index 98%
rename from src/test/java/javax/xml/crypto/test/KeySelectorTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/KeySelectorTest.java
index c404da92..cf0bb96f 100644
--- a/src/test/java/javax/xml/crypto/test/KeySelectorTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/KeySelectorTest.java
@@ -19,7 +19,7 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test;
+package org.apache.xml.security.test.javax.xml.crypto;
 
 import java.util.*;
 
diff --git a/src/test/java/javax/xml/crypto/test/KeySelectors.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/KeySelectors.java
similarity index 99%
rename from src/test/java/javax/xml/crypto/test/KeySelectors.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/KeySelectors.java
index 2f3d7742..f1b642ef 100644
--- a/src/test/java/javax/xml/crypto/test/KeySelectors.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/KeySelectors.java
@@ -19,7 +19,7 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test;
+package org.apache.xml.security.test.javax.xml.crypto;
 
 import java.io.*;
 import java.security.*;
diff --git a/src/test/java/javax/xml/crypto/test/OctetStreamDataTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/OctetStreamDataTest.java
similarity index 98%
rename from src/test/java/javax/xml/crypto/test/OctetStreamDataTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/OctetStreamDataTest.java
index 4846328c..a8fc2634 100644
--- a/src/test/java/javax/xml/crypto/test/OctetStreamDataTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/OctetStreamDataTest.java
@@ -19,7 +19,7 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test;
+package org.apache.xml.security.test.javax.xml.crypto;
 
 
 import java.io.*;
diff --git a/src/test/java/javax/xml/crypto/test/dsig/AppA.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/AppA.java
similarity index 94%
rename from src/test/java/javax/xml/crypto/test/dsig/AppA.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/AppA.java
index c7db63f4..79f26a96 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/AppA.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/AppA.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 import java.security.Security;
 
diff --git a/src/test/java/javax/xml/crypto/test/dsig/AppB.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/AppB.java
similarity index 95%
rename from src/test/java/javax/xml/crypto/test/dsig/AppB.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/AppB.java
index b99b302d..b649e3ca 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/AppB.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/AppB.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 import java.security.Provider;
 import java.security.Security;
diff --git a/src/test/java/javax/xml/crypto/test/dsig/Baltimore18Test.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/Baltimore18Test.java
similarity index 90%
rename from src/test/java/javax/xml/crypto/test/dsig/Baltimore18Test.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/Baltimore18Test.java
index fc7dc687..4d83b36a 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/Baltimore18Test.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/Baltimore18Test.java
@@ -19,7 +19,7 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 
 import java.io.File;
@@ -28,7 +28,9 @@ import java.security.cert.CertificateException;
 
 import javax.xml.crypto.KeySelector;
 import javax.xml.crypto.URIDereferencer;
-import javax.xml.crypto.test.KeySelectors;
+
+import org.apache.xml.security.test.XmlSecTestEnvironment;
+import org.apache.xml.security.test.javax.xml.crypto.KeySelectors;
 
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
@@ -39,9 +41,9 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
  */
 public class Baltimore18Test {
 
-    private File dir;
-    private KeySelector cks;
-    private URIDereferencer ud;
+    private final File dir;
+    private final KeySelector cks;
+    private final URIDereferencer ud;
 
     static {
         Security.insertProviderAt
@@ -49,11 +51,7 @@ public class Baltimore18Test {
     }
 
     public Baltimore18Test() throws CertificateException {
-        String base = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-
-        String fs = System.getProperty("file.separator");
-        dir = new File(base + fs + "src/test/resources" + fs + "ie" +
-            fs + "baltimore" + fs + "merlin-examples",
+        dir = XmlSecTestEnvironment.resolveFile("src", "test", "resources", "ie", "baltimore", "merlin-examples",
             "merlin-xmldsig-eighteen");
         cks = new KeySelectors.CollectionKeySelector(dir);
         ud = new LocalHttpCacheURIDereferencer();
diff --git a/src/test/java/javax/xml/crypto/test/dsig/Baltimore23Test.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/Baltimore23Test.java
similarity index 95%
rename from src/test/java/javax/xml/crypto/test/dsig/Baltimore23Test.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/Baltimore23Test.java
index 8432a2cc..4368590e 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/Baltimore23Test.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/Baltimore23Test.java
@@ -19,7 +19,7 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 
 import java.io.File;
@@ -29,7 +29,8 @@ import javax.xml.crypto.KeySelector;
 import javax.xml.crypto.URIDereferencer;
 import javax.xml.crypto.dsig.XMLSignatureException;
 
-import javax.xml.crypto.test.KeySelectors;
+import org.apache.xml.security.test.XmlSecTestEnvironment;
+import org.apache.xml.security.test.javax.xml.crypto.KeySelectors;
 
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
@@ -42,7 +43,7 @@ import static org.junit.jupiter.api.Assertions.fail;
  */
 public class Baltimore23Test {
 
-    private File dir;
+    private final File dir;
     private final URIDereferencer ud;
 
     static {
@@ -51,11 +52,7 @@ public class Baltimore23Test {
     }
 
     public Baltimore23Test() {
-        String fs = System.getProperty("file.separator");
-        String base = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-
-        dir = new File(base + fs + "src/test/resources" + fs
-            + "ie" + fs + "baltimore" + fs + "merlin-examples",
+        dir = XmlSecTestEnvironment.resolveFile("src", "test", "resources", "ie", "baltimore", "merlin-examples",
             "merlin-xmldsig-twenty-three");
         ud = new LocalHttpCacheURIDereferencer();
     }
diff --git a/src/test/java/javax/xml/crypto/test/dsig/Baltimore23XalanTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/Baltimore23XalanTest.java
similarity index 75%
rename from src/test/java/javax/xml/crypto/test/dsig/Baltimore23XalanTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/Baltimore23XalanTest.java
index 2bd744c0..b85309a4 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/Baltimore23XalanTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/Baltimore23XalanTest.java
@@ -19,18 +19,20 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.BeforeAll;
-
-import javax.xml.crypto.URIDereferencer;
 import java.io.File;
 import java.io.FileInputStream;
 import java.security.KeyStore;
 import java.security.Security;
 
+import javax.xml.crypto.URIDereferencer;
+
+import org.apache.xml.security.test.XmlSecTestEnvironment;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 
@@ -43,12 +45,11 @@ public class Baltimore23XalanTest {
 
     private static final String CONFIG_FILE = "config-xalan.xml";
 
-    private File dir;
+    private final File dir;
     private final URIDereferencer ud;
 
     static {
-        Security.insertProviderAt
-            (new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI(), 1);
+        Security.insertProviderAt(new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI(), 1);
     }
 
     @BeforeAll
@@ -62,11 +63,7 @@ public class Baltimore23XalanTest {
     }
 
     public Baltimore23XalanTest() {
-        String fs = System.getProperty("file.separator");
-        String base = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-
-        dir = new File(base + fs + "src/test/resources" + fs
-            + "ie" + fs + "baltimore" + fs + "merlin-examples",
+        dir = XmlSecTestEnvironment.resolveFile("src", "test", "resources", "ie", "baltimore", "merlin-examples",
             "merlin-xmldsig-twenty-three");
         ud = new LocalHttpCacheURIDereferencer();
     }
@@ -82,12 +79,7 @@ public class Baltimore23XalanTest {
         }
 
         String file = "signature.xml";
-        String fs = System.getProperty("file.separator");
-        String base = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-
-        String keystore = base + fs + "src/test/resources" + fs +
-                "ie" + fs + "baltimore" + fs + "merlin-examples" + fs +
-                "merlin-xmldsig-twenty-three" + fs + "certs" + fs + "xmldsig.jks";
+        File keystore = XmlSecTestEnvironment.resolveFile(dir.toPath(), "certs", "xmldsig.jks");
         KeyStore ks = KeyStore.getInstance("JKS");
         ks.load(new FileInputStream(keystore), "changeit".toCharArray());
 
diff --git a/src/test/java/javax/xml/crypto/test/dsig/BaltimoreExcC14n1Test.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/BaltimoreExcC14n1Test.java
similarity index 66%
rename from src/test/java/javax/xml/crypto/test/dsig/BaltimoreExcC14n1Test.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/BaltimoreExcC14n1Test.java
index 275fa013..3535f84a 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/BaltimoreExcC14n1Test.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/BaltimoreExcC14n1Test.java
@@ -19,13 +19,14 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 
 import java.io.File;
 import java.security.Security;
 
-import javax.xml.crypto.test.KeySelectors;
+import org.apache.xml.security.test.XmlSecTestEnvironment;
+import org.apache.xml.security.test.javax.xml.crypto.KeySelectors;
 
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
@@ -36,29 +37,22 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
  */
 public class BaltimoreExcC14n1Test {
 
-    private SignatureValidator validator;
+    private final SignatureValidator validator;
 
     static {
-        Security.insertProviderAt
-            (new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI(), 1);
+        Security.insertProviderAt(new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI(), 1);
     }
 
     public BaltimoreExcC14n1Test() {
-        String fs = System.getProperty("file.separator");
-        String base = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-
-        base += fs + "src/test/resources" + fs + "ie" +
-            fs + "baltimore" + fs + "merlin-examples";
-        validator = new SignatureValidator(new File
-            (base, "merlin-exc-c14n-one"));
+        File base = XmlSecTestEnvironment.resolveFile("src", "test", "resources", "ie", "baltimore", "merlin-examples",
+            "merlin-exc-c14n-one");
+        validator = new SignatureValidator(base);
     }
 
     @org.junit.jupiter.api.Test
     public void testExcSignature() throws Exception {
         String file = "exc-signature.xml";
-
-        boolean coreValidity = validator.validate
-            (file, new KeySelectors.KeyValueKeySelector());
+        boolean coreValidity = validator.validate(file, new KeySelectors.KeyValueKeySelector());
         assertTrue(coreValidity, "Signature failed core validation");
     }
 
diff --git a/src/test/java/javax/xml/crypto/test/dsig/BaltimoreIaik2Test.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/BaltimoreIaik2Test.java
similarity index 72%
rename from src/test/java/javax/xml/crypto/test/dsig/BaltimoreIaik2Test.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/BaltimoreIaik2Test.java
index 26433be3..4cf75a94 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/BaltimoreIaik2Test.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/BaltimoreIaik2Test.java
@@ -19,14 +19,14 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 
 import java.io.File;
 import java.security.Security;
 
-import javax.xml.crypto.test.KeySelectors;
-
+import org.apache.xml.security.test.XmlSecTestEnvironment;
+import org.apache.xml.security.test.javax.xml.crypto.KeySelectors;
 import org.apache.xml.security.utils.resolver.ResourceResolver;
 import org.apache.xml.security.utils.resolver.implementations.ResolverLocalFilesystem;
 
@@ -39,21 +39,16 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
  */
 public class BaltimoreIaik2Test {
 
-    private SignatureValidator validator;
-    private File dir;
+    private final SignatureValidator validator;
+    private final File dir;
 
     static {
-        Security.insertProviderAt
-            (new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI(), 1);
+        Security.insertProviderAt(new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI(), 1);
         ResourceResolver.register(new ResolverLocalFilesystem(), false);
     }
 
     public BaltimoreIaik2Test() {
-        String fs = System.getProperty("file.separator");
-        String base = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-
-        dir = new File(base + fs + "src/test/resources" + fs +
-            "ie" + fs + "baltimore" + fs + "merlin-examples",
+        dir = XmlSecTestEnvironment.resolveFile("src", "test", "resources", "ie", "baltimore", "merlin-examples",
             "ec-merlin-iaikTests-two");
         validator = new SignatureValidator(dir);
     }
@@ -61,8 +56,7 @@ public class BaltimoreIaik2Test {
     @org.junit.jupiter.api.Test
     public void testSignature() throws Exception {
         String file = "signature.xml";
-        boolean coreValidity = validator.validate
-            (file, new KeySelectors.KeyValueKeySelector());
+        boolean coreValidity = validator.validate(file, new KeySelectors.KeyValueKeySelector());
         assertTrue(coreValidity, "Signature failed core validation");
     }
 
diff --git a/src/test/java/javax/xml/crypto/test/dsig/BaltimoreXPathFilter2ThreeTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/BaltimoreXPathFilter2ThreeTest.java
similarity index 79%
rename from src/test/java/javax/xml/crypto/test/dsig/BaltimoreXPathFilter2ThreeTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/BaltimoreXPathFilter2ThreeTest.java
index 83f4133a..6b0c330c 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/BaltimoreXPathFilter2ThreeTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/BaltimoreXPathFilter2ThreeTest.java
@@ -19,14 +19,15 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 
 import java.io.File;
 import java.security.Security;
 
-import javax.xml.crypto.test.KeySelectors;
+import org.apache.xml.security.test.javax.xml.crypto.KeySelectors;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
@@ -36,20 +37,15 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
  */
 public class BaltimoreXPathFilter2ThreeTest {
 
-    private SignatureValidator validator;
+    private final SignatureValidator validator;
 
     static {
-        Security.insertProviderAt
-            (new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI(), 1);
+        Security.insertProviderAt(new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI(), 1);
     }
 
     public BaltimoreXPathFilter2ThreeTest() {
-        String fs = System.getProperty("file.separator");
-        String base = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-        base += fs + "src/test/resources"
-            + fs + "interop" + fs + "xfilter2";
-        validator = new SignatureValidator(new File
-            (base, "merlin-xpath-filter2-three"));
+        File file = resolveFile("src", "test", "resources", "interop", "xfilter2", "merlin-xpath-filter2-three");
+        validator = new SignatureValidator(file);
     }
 
     @org.junit.jupiter.api.Test
diff --git a/src/test/java/javax/xml/crypto/test/dsig/C14N11Test.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/C14N11Test.java
similarity index 87%
rename from src/test/java/javax/xml/crypto/test/dsig/C14N11Test.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/C14N11Test.java
index 773e9d0c..0df90cc8 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/C14N11Test.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/C14N11Test.java
@@ -16,15 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 import java.io.File;
 import java.nio.charset.StandardCharsets;
 import java.security.Security;
 import javax.xml.crypto.KeySelector;
 
-import javax.xml.crypto.test.KeySelectors;
-
+import org.apache.xml.security.test.XmlSecTestEnvironment;
+import org.apache.xml.security.test.javax.xml.crypto.KeySelectors;
 import org.apache.xml.security.utils.resolver.ResourceResolver;
 import org.apache.xml.security.utils.resolver.implementations.ResolverLocalFilesystem;
 
@@ -37,9 +37,9 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
  */
 public class C14N11Test {
 
-    private SignatureValidator validator;
-    private File dir;
-    private KeySelector sks;
+    private final SignatureValidator validator;
+    private final File dir;
+    private final KeySelector sks;
     private static String[] vendors = { "IAIK", "IBM", "ORCL", "SUN", "UPC" };
 
     static {
@@ -49,11 +49,8 @@ public class C14N11Test {
     }
 
     public C14N11Test() throws Exception {
-        String fs = System.getProperty("file.separator");
-        String base = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-        dir = new File(base + fs + "src/test/resources" + fs
-            + "org" + fs + "w3c" + fs + "www" + fs
-            + "interop" + fs + "xmldsig" + fs + "c14n11");
+        dir = XmlSecTestEnvironment.resolveFile("src", "test", "resources", "org", "w3c", "www", "interop", "xmldsig",
+            "c14n11");
         validator = new SignatureValidator(dir);
         sks = new KeySelectors.SecretKeySelector("secret".getBytes(StandardCharsets.US_ASCII));
     }
@@ -162,8 +159,8 @@ public class C14N11Test {
     }
 
     private void test_c14n11(String test) throws Exception {
-        for (int i = 0; i < vendors.length; i++) {
-            String file = test + "-" + vendors[i] + ".xml";
+        for (String vendor : vendors) {
+            String file = test + "-" + vendor + ".xml";
             // System.out.println("Validating " + file);
             boolean coreValidity = validator.validate(file, sks);
             assertTrue(coreValidity, file + " failed core validation");
@@ -171,8 +168,8 @@ public class C14N11Test {
     }
 
     private void test_c14n11(String test, String[] vendors) throws Exception {
-        for (int i = 0; i < vendors.length; i++) {
-            String file = test + "-" + vendors[i] + ".xml";
+        for (String vendor : vendors) {
+            String file = test + "-" + vendor + ".xml";
             // System.out.println("Validating " + file);
             boolean coreValidity = validator.validate(file, sks, null, false);
             assertTrue(coreValidity, file + " failed core validation");
diff --git a/src/test/java/javax/xml/crypto/test/dsig/CanonicalizationMethodTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/CanonicalizationMethodTest.java
similarity index 98%
rename from src/test/java/javax/xml/crypto/test/dsig/CanonicalizationMethodTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/CanonicalizationMethodTest.java
index 41476d08..383154b4 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/CanonicalizationMethodTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/CanonicalizationMethodTest.java
@@ -19,7 +19,7 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 
 import java.security.*;
diff --git a/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/ClassLoaderTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/ClassLoaderTest.java
new file mode 100644
index 00000000..1f65f1c0
--- /dev/null
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/ClassLoaderTest.java
@@ -0,0 +1,118 @@
+/**
+ * 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.xml.security.test.javax.xml.crypto.dsig;
+
+import java.io.File;
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.security.AccessController;
+import java.security.Provider;
+import java.security.Security;
+
+import javax.xml.crypto.dsig.CanonicalizationMethod;
+
+import org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI;
+
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
+
+/**
+ * This test uses more than one classloader to load a class (Driver) that
+ * invokes the XMLSignature API. It tests that there are not provider class
+ * loading issues with more than one classloader (see 6380953).
+ */
+public class ClassLoaderTest {
+
+    private static final org.slf4j.Logger LOG =
+        org.slf4j.LoggerFactory.getLogger(ClassLoaderTest.class);
+
+    @org.junit.jupiter.api.Test
+    public void testMultipleLoaders() throws Exception {
+        File file0 = resolveFile("build", "classes");
+        File file1 = resolveFile("build", "test");
+        URL[] urls = new URL[2];
+        urls[0] = file0.toURI().toURL();
+        urls[1] = file1.toURI().toURL();
+        try (URLClassLoader uc1 = new URLClassLoader(urls, Thread.currentThread().getContextClassLoader());
+            URLClassLoader uc2 = new URLClassLoader(urls, Thread.currentThread().getContextClassLoader())) {
+            Class<?> c1 = uc1.loadClass("org.apache.xml.security.test.javax.xml.crypto.dsig.Driver");
+            Class<?> c2 = uc2.loadClass("org.apache.xml.security.test.javax.xml.crypto.dsig.Driver");
+            Object o1 = c1.getDeclaredConstructor().newInstance();
+            Object o2 = c2.getDeclaredConstructor().newInstance();
+            Method m1 = c1.getMethod("dsig", (Class[]) null);
+            Method m2 = c2.getMethod("dsig", (Class[]) null);
+            m1.invoke(o1, (Object[]) null);
+            m2.invoke(o2, (Object[]) null);
+        }
+    }
+
+    @org.junit.jupiter.api.Test
+    public void testProviderMultipleLoaders() throws Exception {
+        File file0 = resolveFile("build", "classes");
+        File file1 = resolveFile("build", "test");
+        URL[] urls = new URL[2];
+        urls[0] = file0.toURI().toURL();
+        urls[1] = file1.toURI().toURL();
+
+        try (URLClassLoader uc1 = new URLClassLoader(urls, Thread.currentThread().getContextClassLoader())) {
+            //load security provider using current class loader
+            final Provider provider = new XMLDSigRI();
+            AccessController.doPrivileged((java.security.PrivilegedAction<Object>)
+                () -> Security.addProvider(provider));
+            // get the provider from java.security.Security using URLClassLoader.
+            // Need to use introspection to invoke methods to avoid using the
+            // current class loader
+            String factoryName = "javax.xml.crypto.dsig.XMLSignatureFactory";
+            Class<?> factoryClass = uc1.loadClass(factoryName);
+            Method factoryMethod = factoryClass.getDeclaredMethod("getInstance", new Class[] {String.class});
+            Class<?> methodParameterClass = uc1.loadClass("javax.xml.crypto.dsig.spec.C14NMethodParameterSpec");
+            Method canonicalizationMethod = factoryClass.getDeclaredMethod("newCanonicalizationMethod",
+                new Class[] {String.class, methodParameterClass});
+            Object factory = factoryMethod.invoke(null, "DOM");
+            long start = System.currentTimeMillis();
+            for (int i = 0; i < 100; i++) {
+                canonicalizationMethod.invoke(factory, new Object[] {CanonicalizationMethod.EXCLUSIVE, null});
+            }
+            long end = System.currentTimeMillis();
+            long elapsed = end-start;
+            LOG.debug("Elapsed: {}", elapsed);
+        }
+    }
+
+    @org.junit.jupiter.api.Test
+    public void testProviderMultipleLoadersTwo() throws Exception {
+        File file0 = resolveFile("build", "classes");
+        File file1 = resolveFile("build", "test");
+        URL[] urls = new URL[2];
+        urls[0] = file0.toURI().toURL();
+        urls[1] = file1.toURI().toURL();
+        try (URLClassLoader uc1 = new URLClassLoader(urls, Thread.currentThread().getContextClassLoader());
+            URLClassLoader uc2 = new URLClassLoader(urls, Thread.currentThread().getContextClassLoader())) {
+            Class<?> c1 = uc1.loadClass("org.apache.xml.security.test.javax.xml.crypto.dsig.AppA");
+            Class<?> c2 = uc2.loadClass("org.apache.xml.security.test.javax.xml.crypto.dsig.AppB");
+            Object o1 = c1.getDeclaredConstructor().newInstance();
+            Object o2 = c2.getDeclaredConstructor().newInstance();
+            Method m1 = c1.getMethod("dsig", (Class[]) null);
+            Method m2 = c2.getMethod("dsig", (Class[]) null);
+            m1.invoke(o1, (Object[]) null);
+            m2.invoke(o2, (Object[]) null);
+        }
+    }
+
+}
diff --git a/src/test/java/javax/xml/crypto/test/dsig/ComRSASecurityTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/ComRSASecurityTest.java
similarity index 67%
rename from src/test/java/javax/xml/crypto/test/dsig/ComRSASecurityTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/ComRSASecurityTest.java
index bbd26832..38e6ed90 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/ComRSASecurityTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/ComRSASecurityTest.java
@@ -19,13 +19,14 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 
 import java.io.File;
 import java.security.Security;
 
-import javax.xml.crypto.test.KeySelectors;
+import org.apache.xml.security.test.XmlSecTestEnvironment;
+import org.apache.xml.security.test.javax.xml.crypto.KeySelectors;
 
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
@@ -36,37 +37,32 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
  */
 public class ComRSASecurityTest {
 
-    private SignatureValidator validator;
+    private final SignatureValidator validator;
 
     static {
-        Security.insertProviderAt
-            (new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI(), 1);
+        Security.insertProviderAt(new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI(), 1);
     }
 
     public ComRSASecurityTest() {
-        String fs = System.getProperty("file.separator");
-        String base = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-
-        base += fs + "src/test/resources" + fs + "com";
-        validator = new SignatureValidator(new File
-            (base, "rsasecurity/bdournaee"));
+        File base = XmlSecTestEnvironment.resolveFile("src", "test", "resources", "com", "rsasecurity", "bdournaee");
+        validator = new SignatureValidator(base);
     }
 
+
     @org.junit.jupiter.api.Test
     public void test_certj201_enveloping() throws Exception {
         String file = "certj201_enveloping.xml";
 
-        boolean coreValidity = validator.validate
-            (file, new KeySelectors.KeyValueKeySelector());
+        boolean coreValidity = validator.validate(file, new KeySelectors.KeyValueKeySelector());
         assertTrue(coreValidity, "Signature failed core validation");
     }
 
+
     @org.junit.jupiter.api.Test
     public void test_certj201_enveloped() throws Exception {
         String file = "certj201_enveloped.xml";
 
-        boolean coreValidity = validator.validate
-            (file, new KeySelectors.KeyValueKeySelector());
+        boolean coreValidity = validator.validate(file, new KeySelectors.KeyValueKeySelector());
         assertTrue(coreValidity, "Signature failed core validation");
     }
 
diff --git a/src/test/java/javax/xml/crypto/test/dsig/CreateBaltimore23Test.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/CreateBaltimore23Test.java
similarity index 87%
rename from src/test/java/javax/xml/crypto/test/dsig/CreateBaltimore23Test.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/CreateBaltimore23Test.java
index 4fcc76ce..83431634 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/CreateBaltimore23Test.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/CreateBaltimore23Test.java
@@ -19,10 +19,15 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 
-import java.io.*;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.StringWriter;
+import java.io.Writer;
 import java.math.BigInteger;
 import java.nio.charset.StandardCharsets;
 import java.security.Key;
@@ -32,30 +37,54 @@ import java.security.Security;
 import java.security.cert.Certificate;
 import java.security.cert.CertificateFactory;
 import java.security.cert.X509CRL;
-import java.util.*;
-
-import org.apache.xml.security.parser.XMLParserException;
-import org.apache.xml.security.utils.resolver.ResourceResolver;
-import org.apache.xml.security.utils.resolver.implementations.ResolverLocalFilesystem;
-import org.w3c.dom.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
 
 import javax.xml.crypto.KeySelector;
 import javax.xml.crypto.URIDereferencer;
-import javax.xml.crypto.dsig.*;
-import javax.xml.crypto.dom.*;
+import javax.xml.crypto.dom.DOMStructure;
+import javax.xml.crypto.dsig.CanonicalizationMethod;
+import javax.xml.crypto.dsig.DigestMethod;
+import javax.xml.crypto.dsig.Manifest;
+import javax.xml.crypto.dsig.Reference;
+import javax.xml.crypto.dsig.SignatureMethod;
+import javax.xml.crypto.dsig.SignatureProperties;
+import javax.xml.crypto.dsig.SignatureProperty;
+import javax.xml.crypto.dsig.SignedInfo;
+import javax.xml.crypto.dsig.Transform;
+import javax.xml.crypto.dsig.XMLObject;
+import javax.xml.crypto.dsig.XMLSignature;
+import javax.xml.crypto.dsig.XMLSignatureException;
+import javax.xml.crypto.dsig.XMLSignatureFactory;
 import javax.xml.crypto.dsig.dom.DOMSignContext;
 import javax.xml.crypto.dsig.dom.DOMValidateContext;
-import javax.xml.crypto.dsig.keyinfo.*;
-import javax.xml.crypto.dsig.spec.*;
-import javax.xml.transform.*;
+import javax.xml.crypto.dsig.keyinfo.KeyInfo;
+import javax.xml.crypto.dsig.keyinfo.KeyInfoFactory;
+import javax.xml.crypto.dsig.keyinfo.RetrievalMethod;
+import javax.xml.crypto.dsig.keyinfo.X509Data;
+import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec;
+import javax.xml.crypto.dsig.spec.HMACParameterSpec;
+import javax.xml.crypto.dsig.spec.TransformParameterSpec;
+import javax.xml.crypto.dsig.spec.XPathFilterParameterSpec;
+import javax.xml.crypto.dsig.spec.XSLTTransformParameterSpec;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
 
+import org.apache.xml.security.parser.XMLParserException;
+import org.apache.xml.security.test.XmlSecTestEnvironment;
+import org.apache.xml.security.test.javax.xml.crypto.KeySelectors;
 import org.apache.xml.security.utils.Constants;
 import org.apache.xml.security.utils.XMLUtils;
+import org.apache.xml.security.utils.resolver.ResourceResolver;
+import org.apache.xml.security.utils.resolver.implementations.ResolverLocalFilesystem;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
 
-import javax.xml.crypto.test.KeySelectors;
-
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
@@ -68,58 +97,43 @@ import static org.junit.jupiter.api.Assertions.fail;
  */
 public class CreateBaltimore23Test {
 
-    private XMLSignatureFactory fac;
-    private KeyInfoFactory kifac;
-    private CanonicalizationMethod withoutComments;
-    private Transform withComments;
-    private SignatureMethod dsaSha1, rsaSha1;
-    private DigestMethod sha1;
-    private KeyInfo dsa, rsa;
-    private KeySelector kvks = new KeySelectors.KeyValueKeySelector();
-    private KeySelector sks;
-    private Key signingKey;
-    private PublicKey validatingKey;
-    private Certificate signingCert;
-    private KeyStore ks;
+    private final XMLSignatureFactory fac;
+    private final KeyInfoFactory kifac;
+    private final CanonicalizationMethod withoutComments;
+    private final Transform withComments;
+    private final SignatureMethod dsaSha1, rsaSha1;
+    private final DigestMethod sha1;
+    private final KeyInfo dsa, rsa;
+    private final KeySelector kvks = new KeySelectors.KeyValueKeySelector();
+    private final KeySelector sks;
+    private final Key signingKey;
+    private final PublicKey validatingKey;
+    private final Certificate signingCert;
+    private final KeyStore ks;
     private final URIDereferencer ud;
 
     static {
         System.setProperty("org.apache.xml.security.allowUnsafeResourceResolving", "true");
-        Security.insertProviderAt
-            (new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI(), 1);
+        Security.insertProviderAt(new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI(), 1);
         ResourceResolver.register(new ResolverLocalFilesystem(), false);
     }
 
     public CreateBaltimore23Test() throws Exception {
-        fac = XMLSignatureFactory.getInstance
-            ("DOM", new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI());
+        fac = XMLSignatureFactory.getInstance("DOM", new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI());
         kifac = fac.getKeyInfoFactory();
 
-        // get key & self-signed certificate from keystore
-        String fs = System.getProperty("file.separator");
-        String base = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-
-        try (FileInputStream fis = new FileInputStream
-            (base + fs + "src/test/resources" + fs + "test.jks")) {
-            ks = KeyStore.getInstance("JKS");
-            ks.load(fis, "changeit".toCharArray());
-        }
+        ks = XmlSecTestEnvironment.getTestKeyStore();
         signingKey = ks.getKey("mullan", "changeit".toCharArray());
         signingCert = ks.getCertificate("mullan");
         validatingKey = signingCert.getPublicKey();
 
         // create common objects
-        withoutComments = fac.newCanonicalizationMethod
-            (CanonicalizationMethod.INCLUSIVE, (C14NMethodParameterSpec) null);
-        withComments = fac.newTransform
-            (CanonicalizationMethod.INCLUSIVE_WITH_COMMENTS,
-             (TransformParameterSpec) null);
+        withoutComments = fac.newCanonicalizationMethod(CanonicalizationMethod.INCLUSIVE, (C14NMethodParameterSpec) null);
+        withComments = fac.newTransform(CanonicalizationMethod.INCLUSIVE_WITH_COMMENTS, (TransformParameterSpec) null);
         dsaSha1 = fac.newSignatureMethod(SignatureMethod.DSA_SHA1, null);
         sha1 = fac.newDigestMethod(DigestMethod.SHA1, null);
-        dsa = kifac.newKeyInfo(Collections.singletonList
-            (kifac.newKeyValue(validatingKey)));
-        rsa = kifac.newKeyInfo(Collections.singletonList
-            (kifac.newKeyValue(TestUtils.getPublicKey("RSA"))));
+        dsa = kifac.newKeyInfo(Collections.singletonList(kifac.newKeyValue(validatingKey)));
+        rsa = kifac.newKeyInfo(Collections.singletonList(kifac.newKeyValue(TestUtils.getPublicKey("RSA"))));
         rsaSha1 = fac.newSignatureMethod(SignatureMethod.RSA_SHA1, null);
         sks = new KeySelectors.SecretKeySelector("secret".getBytes(StandardCharsets.US_ASCII));
 
@@ -241,20 +255,15 @@ public class CreateBaltimore23Test {
         List<Object> xds = new ArrayList<>();
         CertificateFactory cf = CertificateFactory.getInstance("X.509");
         xds.add(signingCert);
-        String fs = System.getProperty("file.separator");
-        String base = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-        FileInputStream fis = new FileInputStream(
-            base + fs + "src/test/resources" + fs + "ie" + fs +
-             "baltimore" + fs + "merlin-examples" + fs +
-             "merlin-xmldsig-twenty-three" + fs + "certs" + fs + "crl");
-        X509CRL crl = (X509CRL) cf.generateCRL(fis);
-        fis.close();
+        X509CRL crl;
+        try (FileInputStream fis = new FileInputStream(resolveFile("src", "test", "resources", "ie", "baltimore",
+            "merlin-examples", "merlin-xmldsig-twenty-three", "certs", "crl"))) {
+            crl = (X509CRL) cf.generateCRL(fis);
+        }
         xds.add(crl);
-        KeyInfo crt_crl = kifac.newKeyInfo(Collections.singletonList
-            (kifac.newX509Data(xds)));
+        KeyInfo crt_crl = kifac.newKeyInfo(Collections.singletonList(kifac.newX509Data(xds)));
 
-        test_create_signature_external(dsaSha1, crt_crl, signingKey,
-            new X509KeySelector(ks), false);
+        test_create_signature_external(dsaSha1, crt_crl, signingKey, new X509KeySelector(ks), false);
     }
 
     @org.junit.jupiter.api.Test
@@ -678,14 +687,8 @@ public class CreateBaltimore23Test {
         System.out.println(sw.toString());
         */
 
-        DOMValidateContext dvc = new DOMValidateContext
-            (ks, doc.getDocumentElement());
-        String base = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-        String fs = System.getProperty("file.separator");
-        File f = new File(
-            base + fs + "src/test/resources" + fs + "ie" + fs +
-            "baltimore" + fs + "merlin-examples" + fs +
-            "merlin-xmldsig-twenty-three" + fs);
+        DOMValidateContext dvc = new DOMValidateContext(ks, doc.getDocumentElement());
+        File f = resolveFile("src", "test", "resources", "ie", "baltimore", "merlin-examples", "merlin-xmldsig-twenty-three");
         dvc.setBaseURI(f.toURI().toString());
         dvc.setURIDereferencer(ud);
 
diff --git a/src/test/java/javax/xml/crypto/test/dsig/CreateInteropExcC14NTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/CreateInteropExcC14NTest.java
similarity index 77%
rename from src/test/java/javax/xml/crypto/test/dsig/CreateInteropExcC14NTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/CreateInteropExcC14NTest.java
index 6081a523..33f9f566 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/CreateInteropExcC14NTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/CreateInteropExcC14NTest.java
@@ -19,23 +19,43 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 
-import java.io.*;
-import java.security.*;
+import java.io.File;
+import java.io.FileInputStream;
+import java.security.Key;
+import java.security.KeyStore;
+import java.security.PublicKey;
+import java.security.Security;
 import java.security.cert.Certificate;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
 
 import javax.xml.crypto.dom.DOMStructure;
-import javax.xml.crypto.dsig.*;
-import javax.xml.crypto.dsig.dom.*;
-import javax.xml.crypto.dsig.keyinfo.*;
-import javax.xml.crypto.dsig.spec.*;
-
-import org.w3c.dom.*;
-
-import javax.xml.crypto.test.KeySelectors;
+import javax.xml.crypto.dsig.CanonicalizationMethod;
+import javax.xml.crypto.dsig.DigestMethod;
+import javax.xml.crypto.dsig.Reference;
+import javax.xml.crypto.dsig.SignatureMethod;
+import javax.xml.crypto.dsig.SignedInfo;
+import javax.xml.crypto.dsig.XMLObject;
+import javax.xml.crypto.dsig.XMLSignature;
+import javax.xml.crypto.dsig.XMLSignatureFactory;
+import javax.xml.crypto.dsig.dom.DOMSignContext;
+import javax.xml.crypto.dsig.dom.DOMValidateContext;
+import javax.xml.crypto.dsig.keyinfo.KeyInfo;
+import javax.xml.crypto.dsig.keyinfo.KeyInfoFactory;
+import javax.xml.crypto.dsig.keyinfo.KeyValue;
+import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec;
+import javax.xml.crypto.dsig.spec.ExcC14NParameterSpec;
+import javax.xml.crypto.dsig.spec.TransformParameterSpec;
+
+import org.apache.xml.security.test.XmlSecTestEnvironment;
+import org.apache.xml.security.test.javax.xml.crypto.KeySelectors;
+import org.w3c.dom.Comment;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -47,11 +67,11 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
  */
 public class CreateInteropExcC14NTest {
 
-    private XMLSignatureFactory fac;
-    private KeyInfoFactory kifac;
-    private KeyStore ks;
-    private Key signingKey;
-    private PublicKey validatingKey;
+    private final XMLSignatureFactory fac;
+    private final KeyInfoFactory kifac;
+    private final KeyStore ks;
+    private final Key signingKey;
+    private final PublicKey validatingKey;
 
     static {
         Security.insertProviderAt
@@ -63,15 +83,7 @@ public class CreateInteropExcC14NTest {
             ("DOM", new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI());
         kifac = fac.getKeyInfoFactory();
 
-        // get key & self-signed certificate from keystore
-        String base = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-
-        String fs = System.getProperty("file.separator");
-        try (FileInputStream fis = new FileInputStream
-            (base + fs + "src/test/resources" + fs + "test.jks")) {
-            ks = KeyStore.getInstance("JKS");
-            ks.load(fis, "changeit".toCharArray());
-        }
+        ks = XmlSecTestEnvironment.getTestKeyStore();
         Certificate signingCert = ks.getCertificate("mullan");
         signingKey = ks.getKey("mullan", "changeit".toCharArray());
         validatingKey = signingCert.getPublicKey();
diff --git a/src/test/java/javax/xml/crypto/test/dsig/CreateInteropXFilter2Test.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/CreateInteropXFilter2Test.java
similarity index 77%
rename from src/test/java/javax/xml/crypto/test/dsig/CreateInteropXFilter2Test.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/CreateInteropXFilter2Test.java
index 40914736..a5a0b760 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/CreateInteropXFilter2Test.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/CreateInteropXFilter2Test.java
@@ -19,23 +19,43 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 
-import java.io.*;
-import java.security.*;
+import java.io.File;
+import java.io.FileInputStream;
+import java.security.Key;
+import java.security.KeyStore;
+import java.security.PublicKey;
+import java.security.Security;
 import java.security.cert.Certificate;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
 
 import javax.xml.crypto.XMLStructure;
-import javax.xml.crypto.dsig.*;
-import javax.xml.crypto.dsig.dom.*;
-import javax.xml.crypto.dsig.keyinfo.*;
-import javax.xml.crypto.dsig.spec.*;
-
-import org.w3c.dom.*;
-
-import javax.xml.crypto.test.KeySelectors;
+import javax.xml.crypto.dsig.CanonicalizationMethod;
+import javax.xml.crypto.dsig.DigestMethod;
+import javax.xml.crypto.dsig.Reference;
+import javax.xml.crypto.dsig.SignatureMethod;
+import javax.xml.crypto.dsig.SignedInfo;
+import javax.xml.crypto.dsig.Transform;
+import javax.xml.crypto.dsig.XMLSignature;
+import javax.xml.crypto.dsig.XMLSignatureFactory;
+import javax.xml.crypto.dsig.dom.DOMSignContext;
+import javax.xml.crypto.dsig.dom.DOMValidateContext;
+import javax.xml.crypto.dsig.keyinfo.KeyInfo;
+import javax.xml.crypto.dsig.keyinfo.KeyInfoFactory;
+import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec;
+import javax.xml.crypto.dsig.spec.TransformParameterSpec;
+import javax.xml.crypto.dsig.spec.XPathFilter2ParameterSpec;
+import javax.xml.crypto.dsig.spec.XPathType;
+
+import org.apache.xml.security.test.XmlSecTestEnvironment;
+import org.apache.xml.security.test.javax.xml.crypto.KeySelectors;
+import org.w3c.dom.Comment;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -47,12 +67,12 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
  */
 public class CreateInteropXFilter2Test {
 
-    private XMLSignatureFactory fac;
-    private KeyInfoFactory kifac;
-    private KeyStore ks;
-    private Key signingKey;
-    private PublicKey validatingKey;
-    private Certificate signingCert;
+    private final XMLSignatureFactory fac;
+    private final KeyInfoFactory kifac;
+    private final KeyStore ks;
+    private final Key signingKey;
+    private final PublicKey validatingKey;
+    private final Certificate signingCert;
 
     static {
         Security.insertProviderAt
@@ -64,15 +84,7 @@ public class CreateInteropXFilter2Test {
             ("DOM", new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI());
         kifac = fac.getKeyInfoFactory();
 
-        // get key & self-signed certificate from keystore
-        String fs = System.getProperty("file.separator");
-        String base = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-
-        try (FileInputStream fis = new FileInputStream
-            (base + fs + "src/test/resources" + fs + "test.jks")) {
-            ks = KeyStore.getInstance("JKS");
-            ks.load(fis, "changeit".toCharArray());
-        }
+        ks = XmlSecTestEnvironment.getTestKeyStore();
         signingKey = ks.getKey("mullan", "changeit".toCharArray());
         signingCert = ks.getCertificate("mullan");
         validatingKey = signingCert.getPublicKey();
diff --git a/src/test/java/javax/xml/crypto/test/dsig/CreateInteropXMLDSig11Test.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/CreateInteropXMLDSig11Test.java
similarity index 99%
rename from src/test/java/javax/xml/crypto/test/dsig/CreateInteropXMLDSig11Test.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/CreateInteropXMLDSig11Test.java
index 7f3b1733..1e62f514 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/CreateInteropXMLDSig11Test.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/CreateInteropXMLDSig11Test.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 import java.nio.charset.StandardCharsets;
 import java.security.*;
@@ -30,10 +30,9 @@ import javax.xml.crypto.dsig.dom.*;
 import javax.xml.crypto.dsig.keyinfo.*;
 import javax.xml.crypto.dsig.spec.*;
 
+import org.apache.xml.security.test.javax.xml.crypto.KeySelectors;
 import org.w3c.dom.*;
 
-import javax.xml.crypto.test.KeySelectors;
-
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
diff --git a/src/test/java/javax/xml/crypto/test/dsig/CreatePhaosXMLDSig3Test.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/CreatePhaosXMLDSig3Test.java
similarity index 98%
rename from src/test/java/javax/xml/crypto/test/dsig/CreatePhaosXMLDSig3Test.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/CreatePhaosXMLDSig3Test.java
index 12855f8b..689f327b 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/CreatePhaosXMLDSig3Test.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/CreatePhaosXMLDSig3Test.java
@@ -19,7 +19,7 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 import java.nio.charset.StandardCharsets;
 import java.security.Security;
@@ -40,8 +40,8 @@ import javax.xml.crypto.dsig.dom.DOMValidateContext;
 import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec;
 import javax.xml.crypto.dsig.spec.HMACParameterSpec;
 import javax.xml.crypto.dsig.spec.TransformParameterSpec;
-import javax.xml.crypto.test.KeySelectors;
 
+import org.apache.xml.security.test.javax.xml.crypto.KeySelectors;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
diff --git a/src/test/java/javax/xml/crypto/test/dsig/DetachedTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/DetachedTest.java
similarity index 99%
rename from src/test/java/javax/xml/crypto/test/dsig/DetachedTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/DetachedTest.java
index 38ad69ad..97156653 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/DetachedTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/DetachedTest.java
@@ -19,7 +19,7 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 import javax.xml.crypto.URIDereferencer;
 import javax.xml.crypto.dsig.*;
diff --git a/src/test/java/javax/xml/crypto/test/dsig/DigestMethodTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/DigestMethodTest.java
similarity index 98%
rename from src/test/java/javax/xml/crypto/test/dsig/DigestMethodTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/DigestMethodTest.java
index 994f6806..48a47432 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/DigestMethodTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/DigestMethodTest.java
@@ -19,7 +19,7 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 import javax.xml.crypto.dsig.*;
 
diff --git a/src/test/java/javax/xml/crypto/test/dsig/Driver.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/Driver.java
similarity index 96%
rename from src/test/java/javax/xml/crypto/test/dsig/Driver.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/Driver.java
index 3448f806..856050a1 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/Driver.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/Driver.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 import javax.xml.crypto.dsig.CanonicalizationMethod;
 import javax.xml.crypto.dsig.XMLSignatureFactory;
diff --git a/src/test/java/javax/xml/crypto/test/dsig/EdDSATestAbstract.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/EdDSATestAbstract.java
similarity index 94%
rename from src/test/java/javax/xml/crypto/test/dsig/EdDSATestAbstract.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/EdDSATestAbstract.java
index c5b7a5d5..879e9b96 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/EdDSATestAbstract.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/EdDSATestAbstract.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -44,7 +44,7 @@ public abstract class EdDSATestAbstract {
         // Add BouncyCastleProvider only for java versions before JDK 15.
         boolean isNotJDK15up;
         try {
-            int javaVersion = Integer.parseInt(System.getProperty("java.specification.version"));
+            int javaVersion = Integer.getInteger("java.specification.version", 0);
             isNotJDK15up = javaVersion < 15;
         } catch (NumberFormatException ex) {
             isNotJDK15up = true;
diff --git a/src/test/java/javax/xml/crypto/test/dsig/EnvelopingSignatureTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/EnvelopingSignatureTest.java
similarity index 99%
rename from src/test/java/javax/xml/crypto/test/dsig/EnvelopingSignatureTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/EnvelopingSignatureTest.java
index 75768a55..22737a72 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/EnvelopingSignatureTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/EnvelopingSignatureTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
diff --git a/src/test/java/javax/xml/crypto/test/dsig/HMACSignatureAlgorithmTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/HMACSignatureAlgorithmTest.java
similarity index 98%
rename from src/test/java/javax/xml/crypto/test/dsig/HMACSignatureAlgorithmTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/HMACSignatureAlgorithmTest.java
index 0af8ff88..c0492c7b 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/HMACSignatureAlgorithmTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/HMACSignatureAlgorithmTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 import java.lang.reflect.Constructor;
 import java.nio.charset.StandardCharsets;
@@ -40,8 +40,8 @@ import javax.xml.crypto.dsig.dom.DOMValidateContext;
 import javax.xml.crypto.dsig.keyinfo.KeyInfo;
 import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec;
 import javax.xml.crypto.dsig.spec.HMACParameterSpec;
-import javax.xml.crypto.test.KeySelectors;
 
+import org.apache.xml.security.test.javax.xml.crypto.KeySelectors;
 import org.junit.jupiter.api.Assumptions;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
diff --git a/src/test/java/javax/xml/crypto/test/dsig/IaikCoreFeaturesTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/IaikCoreFeaturesTest.java
similarity index 67%
rename from src/test/java/javax/xml/crypto/test/dsig/IaikCoreFeaturesTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/IaikCoreFeaturesTest.java
index 512c7eaf..1bf32c74 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/IaikCoreFeaturesTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/IaikCoreFeaturesTest.java
@@ -19,20 +19,29 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 
 import java.io.File;
 import java.io.FileInputStream;
+import java.nio.file.Path;
 import java.security.Security;
-import javax.xml.crypto.*;
 
+import javax.xml.crypto.Data;
+import javax.xml.crypto.OctetStreamData;
+import javax.xml.crypto.URIDereferencer;
+import javax.xml.crypto.URIReference;
+import javax.xml.crypto.URIReferenceException;
+import javax.xml.crypto.XMLCryptoContext;
 import javax.xml.crypto.dsig.XMLSignatureFactory;
-import javax.xml.crypto.test.KeySelectors;
 
+import org.apache.xml.security.test.XmlSecTestEnvironment;
+import org.apache.xml.security.test.javax.xml.crypto.KeySelectors;
 import org.apache.xml.security.utils.resolver.ResourceResolver;
 import org.apache.xml.security.utils.resolver.implementations.ResolverLocalFilesystem;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolvePath;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
@@ -42,8 +51,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
  */
 public class IaikCoreFeaturesTest {
 
-    private SignatureValidator validator;
-    private String base;
+    private final SignatureValidator validator;
+    private final Path base;
 
     static {
         Security.insertProviderAt
@@ -52,21 +61,16 @@ public class IaikCoreFeaturesTest {
     }
 
     public IaikCoreFeaturesTest() {
-        String fs = System.getProperty("file.separator");
-        base = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-        base = base + fs + "src/test/resources" + fs +
-            "at" + fs + "iaik" + fs + "ixsil";
-        validator = new SignatureValidator(new File
-            (base, "coreFeatures/signatures"));
+        base = resolvePath("src", "test", "resources", "at", "iaik", "ixsil");
+        validator = new SignatureValidator(resolvePath(base, "coreFeatures", "signatures").toFile());
     }
 
     @org.junit.jupiter.api.Test
     public void test_anonymousReferenceSignature() throws Exception {
         String file = "anonymousReferenceSignature.xml";
 
-        boolean coreValidity = validator.validate
-            (file, new KeySelectors.KeyValueKeySelector(),
-             new NullURIDereferencer(base));
+        boolean coreValidity = validator.validate(file, new KeySelectors.KeyValueKeySelector(),
+            new NullURIDereferencer(base));
         assertTrue(coreValidity, "Signature failed core validation");
     }
 
@@ -91,14 +95,14 @@ public class IaikCoreFeaturesTest {
 
     private static class NullURIDereferencer implements URIDereferencer {
 
-        private OctetStreamData osd;
+        private final OctetStreamData osd;
 
-        NullURIDereferencer(String base) throws Exception {
-            File content = new File
-                (base, "coreFeatures/samples/anonymousReferenceContent.xml");
+        NullURIDereferencer(Path base) throws Exception {
+            File content = resolveFile(base, "coreFeatures", "samples", "anonymousReferenceContent.xml");
             osd = new OctetStreamData(new FileInputStream(content));
         }
 
+        @Override
         public Data dereference(URIReference uriReference,
             XMLCryptoContext context) throws URIReferenceException {
 
@@ -111,29 +115,22 @@ public class IaikCoreFeaturesTest {
     }
 
     private static class OfflineDereferencer implements URIDereferencer {
-        private String w3cRec;
-        private URIDereferencer defaultDereferencer;
+        private final File w3cRec;
+        private final URIDereferencer defaultDereferencer;
 
         OfflineDereferencer() throws Exception {
-            String fs = System.getProperty("file.separator");
-            String base = System.getProperty("basedir") == null ? "./" :
-                System.getProperty("basedir");
-            w3cRec = base + fs + "src/test/resources" + fs + "org" + fs + "w3c" + fs + "www" +
-                fs + "TR" + fs + "2000";
-            defaultDereferencer =
-                XMLSignatureFactory.getInstance().getURIDereferencer();
+            w3cRec = XmlSecTestEnvironment.resolveFile("src", "test", "resources", "org", "w3c", "www", "TR", "2000");
+            defaultDereferencer = XMLSignatureFactory.getInstance().getURIDereferencer();
         }
 
-        public Data dereference(URIReference uriReference,
-                XMLCryptoContext context) throws URIReferenceException {
-
+        @Override
+        public Data dereference(URIReference uriReference, XMLCryptoContext context) throws URIReferenceException {
             try {
                 if ("http://www.w3.org/TR/2000/REC-xml-20001006".equals(uriReference.getURI())) {
                     File content = new File(w3cRec, "REC-xml-20001006");
                     return new OctetStreamData(new FileInputStream(content));
-                } else {
-                    return defaultDereferencer.dereference(uriReference, context);
                 }
+                return defaultDereferencer.dereference(uriReference, context);
             } catch (java.io.FileNotFoundException ex) {
                 throw new URIReferenceException(ex.getMessage(), ex);
             }
diff --git a/src/test/java/javax/xml/crypto/test/dsig/IaikSignatureAlgosTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/IaikSignatureAlgosTest.java
similarity index 81%
rename from src/test/java/javax/xml/crypto/test/dsig/IaikSignatureAlgosTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/IaikSignatureAlgosTest.java
index 19af37b0..3776bd7a 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/IaikSignatureAlgosTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/IaikSignatureAlgosTest.java
@@ -19,16 +19,19 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 
-import java.io.File;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Path;
 import java.security.Security;
+
 import javax.xml.crypto.dsig.XMLSignatureException;
 
-import javax.xml.crypto.test.KeySelectors;
+import org.apache.xml.security.test.javax.xml.crypto.KeySelectors;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolvePath;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 
@@ -40,20 +43,15 @@ import static org.junit.jupiter.api.Assertions.fail;
  */
 public class IaikSignatureAlgosTest {
 
-    private SignatureValidator validator;
+    private final SignatureValidator validator;
 
     static {
-        Security.insertProviderAt
-            (new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI(), 1);
+        Security.insertProviderAt(new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI(), 1);
     }
 
     public IaikSignatureAlgosTest() {
-        String fs = System.getProperty("file.separator");
-        String base = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-        base +=  fs + "src/test/resources" + fs
-            + "at" + fs + "iaik" + fs + "ixsil";
-        validator = new SignatureValidator(new File
-            (base, "signatureAlgorithms/signatures"));
+        Path base = resolvePath("src", "test", "resources", "at", "iaik", "ixsil");
+        validator = new SignatureValidator(resolveFile(base, "signatureAlgorithms", "signatures"));
     }
 
     @org.junit.jupiter.api.Test
diff --git a/src/test/java/javax/xml/crypto/test/dsig/IaikTransformsTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/IaikTransformsTest.java
similarity index 81%
rename from src/test/java/javax/xml/crypto/test/dsig/IaikTransformsTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/IaikTransformsTest.java
index 47986dd8..a3a25b93 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/IaikTransformsTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/IaikTransformsTest.java
@@ -19,17 +19,18 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 
-import java.io.File;
+import java.nio.file.Path;
 import java.security.Security;
 
-import javax.xml.crypto.test.KeySelectors;
-
+import org.apache.xml.security.test.javax.xml.crypto.KeySelectors;
 import org.apache.xml.security.utils.resolver.ResourceResolver;
 import org.apache.xml.security.utils.resolver.implementations.ResolverLocalFilesystem;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolvePath;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
@@ -39,21 +40,16 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
  */
 public class IaikTransformsTest {
 
-    private SignatureValidator validator;
+    private final SignatureValidator validator;
 
     static {
-        Security.insertProviderAt
-            (new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI(), 1);
+        Security.insertProviderAt(new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI(), 1);
         ResourceResolver.register(new ResolverLocalFilesystem(), false);
     }
 
     public IaikTransformsTest() {
-        String fs = System.getProperty("file.separator");
-        String base = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-        base +=  fs + "src/test/resources" + fs +
-            "at" + fs + "iaik" + fs + "ixsil";
-        validator = new SignatureValidator(new File
-            (base, "transforms/signatures"));
+        Path base = resolvePath("src", "test", "resources", "at", "iaik", "ixsil");
+        validator = new SignatureValidator(resolveFile(base, "transforms", "signatures"));
     }
 
     @org.junit.jupiter.api.Test
diff --git a/src/test/java/javax/xml/crypto/test/dsig/InteropC14nTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/InteropC14nTest.java
similarity index 83%
rename from src/test/java/javax/xml/crypto/test/dsig/InteropC14nTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/InteropC14nTest.java
index 3bb517c4..8f3ace8c 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/InteropC14nTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/InteropC14nTest.java
@@ -19,17 +19,17 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 
 import java.io.File;
 import java.security.Security;
 
-import javax.xml.crypto.test.KeySelectors;
-
+import org.apache.xml.security.test.javax.xml.crypto.KeySelectors;
 import org.apache.xml.security.utils.resolver.ResourceResolver;
 import org.apache.xml.security.utils.resolver.implementations.ResolverLocalFilesystem;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
@@ -40,23 +40,20 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 public class InteropC14nTest {
 
     private SignatureValidator validator;
-    private String base;
+    private final File base;
 
     static {
-        Security.insertProviderAt
-            (new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI(), 1);
+        Security.insertProviderAt(new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI(), 1);
         ResourceResolver.register(new ResolverLocalFilesystem(), false);
     }
 
     public InteropC14nTest() {
-        String fs = System.getProperty("file.separator");
-        base = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-        base = base + fs + "src/test/resources" + fs + "interop";
+        base = resolveFile("src", "test", "resources", "interop", "c14n");
     }
 
     @org.junit.jupiter.api.Test
     public void test_y1_exc_signature() throws Exception {
-        validator = new SignatureValidator(new File(base, "c14n/Y1"));
+        validator = new SignatureValidator(new File(base, "Y1"));
         String file = "exc-signature.xml";
 
         boolean coreValidity = validator.validate
@@ -67,7 +64,7 @@ public class InteropC14nTest {
 
     /* COMMENTED OUT since this test requires MD5 support
     public void test_y2_signature_joseph_exc() throws Exception {
-        validator = new SignatureValidator(new File(base, "c14n/Y2"));
+        validator = new SignatureValidator(new File(base, "Y2"));
         String file = "signature-joseph-exc.xml";
 
         boolean coreValidity = validator.validate
@@ -78,7 +75,7 @@ public class InteropC14nTest {
 
     @org.junit.jupiter.api.Test
     public void test_y3_signature() throws Exception {
-        validator = new SignatureValidator(new File(base, "c14n/Y3"));
+        validator = new SignatureValidator(new File(base, "Y3"));
         String file = "signature.xml";
 
         boolean coreValidity = validator.validate
@@ -92,7 +89,7 @@ public class InteropC14nTest {
 
     @org.junit.jupiter.api.Test
     public void test_y4_signature() throws Exception {
-        validator = new SignatureValidator(new File(base, "c14n/Y4"));
+        validator = new SignatureValidator(new File(base, "Y4"));
         String file = "signature.xml";
 
         boolean coreValidity = validator.validate
@@ -107,7 +104,7 @@ public class InteropC14nTest {
     @org.junit.jupiter.api.Test
     @org.junit.jupiter.api.Disabled
     public void test_y5_signature() throws Exception {
-        validator = new SignatureValidator(new File(base, "c14n/Y5"));
+        validator = new SignatureValidator(new File(base, "Y5"));
         String file = "signature.xml";
 
         boolean coreValidity = validator.validate
@@ -122,7 +119,7 @@ public class InteropC14nTest {
     @org.junit.jupiter.api.Test
     @org.junit.jupiter.api.Disabled
     public void test_y5_signatureCommented() throws Exception {
-        validator = new SignatureValidator(new File(base, "c14n/Y5"));
+        validator = new SignatureValidator(new File(base, "Y5"));
         String file = "signatureCommented.xml";
 
         boolean coreValidity = validator.validate
diff --git a/src/test/java/javax/xml/crypto/test/dsig/InteropXMLDSig11Test.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/InteropXMLDSig11Test.java
similarity index 93%
rename from src/test/java/javax/xml/crypto/test/dsig/InteropXMLDSig11Test.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/InteropXMLDSig11Test.java
index 7ae6a38d..f53c38ae 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/InteropXMLDSig11Test.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/InteropXMLDSig11Test.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 import java.io.File;
 import java.nio.charset.StandardCharsets;
@@ -25,7 +25,8 @@ import java.security.NoSuchAlgorithmException;
 import java.security.Security;
 import javax.xml.crypto.KeySelector;
 
-import javax.xml.crypto.test.KeySelectors;
+import org.apache.xml.security.test.XmlSecTestEnvironment;
+import org.apache.xml.security.test.javax.xml.crypto.KeySelectors;
 
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
@@ -36,9 +37,9 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
  */
 public class InteropXMLDSig11Test {
 
-    private SignatureValidator validator;
-    private File dir;
-    private KeySelector kvks, sks;
+    private final SignatureValidator validator;
+    private final File dir;
+    private final KeySelector kvks, sks;
     private boolean ecSupport = true;
 
     static {
@@ -56,12 +57,7 @@ public class InteropXMLDSig11Test {
         if ("IBM Corporation".equals(System.getProperty("java.vendor"))) {
             ecSupport = false;
         }
-        String fs = File.separator;
-        String base = System.getProperty("basedir") == null
-            ? "./": System.getProperty("basedir");
-        dir = new File(base + fs + "src/test/resources" + fs
-            + "org" + fs + "w3c" + fs + "www" + fs
-            + "interop" + fs + "xmldsig11");
+        dir = XmlSecTestEnvironment.resolveFile("src", "test", "resources", "org", "w3c", "www", "interop", "xmldsig11");
         validator = new SignatureValidator(dir);
         kvks = new KeySelectors.KeyValueKeySelector();
         sks = new KeySelectors.SecretKeySelector("testkey".getBytes(StandardCharsets.US_ASCII));
diff --git a/src/test/java/javax/xml/crypto/test/dsig/JSRForbiddenRefCountTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/JSRForbiddenRefCountTest.java
similarity index 80%
rename from src/test/java/javax/xml/crypto/test/dsig/JSRForbiddenRefCountTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/JSRForbiddenRefCountTest.java
index c5564faf..5ebc1873 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/JSRForbiddenRefCountTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/JSRForbiddenRefCountTest.java
@@ -16,17 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 
 import java.io.File;
-import java.io.FileInputStream;
 import java.security.Security;
 
 import javax.xml.crypto.MarshalException;
 import javax.xml.crypto.dom.DOMCryptoContext;
 
 import org.apache.jcp.xml.dsig.internal.dom.DOMSignedInfo;
+import org.apache.xml.security.test.XmlSecTestEnvironment;
 import org.apache.xml.security.utils.Constants;
 import org.apache.xml.security.utils.XMLUtils;
 import org.w3c.dom.Element;
@@ -65,20 +65,10 @@ public class JSRForbiddenRefCountTest {
         //
     }
 
-    private Element getSignedInfoElement(
-        String directory, String file
-    ) throws Exception {
-        String basedir = System.getProperty("basedir");
-        if (basedir != null && basedir.length() != 0) {
-            directory = basedir + "/" + directory;
-        }
-
-        File f = new File(directory + "/" + file);
-
-        org.w3c.dom.Document doc = XMLUtils.read(new FileInputStream(f), false);
-
-        return (Element) doc.getElementsByTagNameNS(Constants.SignatureSpecNS,
-                                                 Constants._TAG_SIGNEDINFO).item(0);
+    private Element getSignedInfoElement(String directory, String file) throws Exception {
+        File f = new File(XmlSecTestEnvironment.resolveFile(directory), file);
+        org.w3c.dom.Document doc = XMLUtils.read(f, false);
+        return (Element) doc.getElementsByTagNameNS(Constants.SignatureSpecNS, Constants._TAG_SIGNEDINFO).item(0);
     }
 
 }
diff --git a/src/test/java/javax/xml/crypto/test/dsig/JSRForbiddenReferenceTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/JSRForbiddenReferenceTest.java
similarity index 84%
rename from src/test/java/javax/xml/crypto/test/dsig/JSRForbiddenReferenceTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/JSRForbiddenReferenceTest.java
index 76a47db1..1b854e36 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/JSRForbiddenReferenceTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/JSRForbiddenReferenceTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 
 import java.io.File;
@@ -25,11 +25,12 @@ import java.security.Security;
 
 import javax.xml.crypto.dsig.XMLSignatureException;
 import javax.xml.crypto.dsig.dom.DOMValidateContext;
-import javax.xml.crypto.test.KeySelectors;
 
+import org.apache.xml.security.test.javax.xml.crypto.KeySelectors;
 import org.apache.xml.security.utils.resolver.ResourceResolver;
 import org.apache.xml.security.utils.resolver.implementations.ResolverLocalFilesystem;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 
@@ -39,19 +40,15 @@ import static org.junit.jupiter.api.Assertions.fail;
  */
 public class JSRForbiddenReferenceTest {
 
-    private SignatureValidator validator;
-    private File dir;
+    private final SignatureValidator validator;
+    private final File dir;
 
     static {
         Security.insertProviderAt(new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI(), 1);
     }
 
     public JSRForbiddenReferenceTest() {
-        String fs = System.getProperty("file.separator");
-        String base = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-
-        dir = new File(base + fs + "src/test/resources" + fs
-            + "javax" + fs + "xml" + fs + "crypto", "dsig");
+        dir = resolveFile("src", "test", "resources", "org", "apache", "xml", "security", "test", "javax", "xml", "crypto", "dsig");
         validator = new SignatureValidator(dir);
     }
 
diff --git a/src/test/java/javax/xml/crypto/test/dsig/JSRWrappingAttackTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/JSRWrappingAttackTest.java
similarity index 83%
rename from src/test/java/javax/xml/crypto/test/dsig/JSRWrappingAttackTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/JSRWrappingAttackTest.java
index 3ddefe55..6d56acb3 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/JSRWrappingAttackTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/JSRWrappingAttackTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 
 import java.io.File;
@@ -25,12 +25,13 @@ import java.security.Security;
 
 import javax.xml.crypto.dsig.XMLSignatureException;
 import javax.xml.crypto.dsig.dom.DOMValidateContext;
-import javax.xml.crypto.test.KeySelectors;
 
+import org.apache.xml.security.test.javax.xml.crypto.KeySelectors;
 import org.apache.xml.security.utils.XMLUtils;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 
@@ -40,19 +41,15 @@ import static org.junit.jupiter.api.Assertions.fail;
  */
 public class JSRWrappingAttackTest {
 
-    private SignatureValidator validator;
-    private File dir;
+    private final SignatureValidator validator;
+    private final File dir;
 
     static {
         Security.insertProviderAt(new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI(), 1);
     }
 
     public JSRWrappingAttackTest() {
-        String fs = System.getProperty("file.separator");
-        String base = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-
-        dir = new File(base + fs + "src/test/resources" + fs
-            + "at" + fs + "iaik" + fs + "ixsil" + fs + "coreFeatures", "signatures");
+        dir = resolveFile("src", "test", "resources", "at", "iaik", "ixsil", "coreFeatures", "signatures");
         validator = new SignatureValidator(dir);
     }
 
@@ -60,8 +57,7 @@ public class JSRWrappingAttackTest {
     @org.junit.jupiter.api.Test
     public void testWrappingAttack() throws Exception {
         String file = "manifestSignatureWrapping.xml";
-
-        Document doc = XMLUtils.read(new FileInputStream(new File(dir, file)), false);
+        Document doc = XMLUtils.read(new File(dir, file), false);
         Element sigElement = SignatureValidator.getSignatureElement(doc);
         if (sigElement == null) {
             throw new Exception("Couldn't find signature Element");
diff --git a/src/test/java/javax/xml/crypto/test/dsig/LocalHttpCacheURIDereferencer.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/LocalHttpCacheURIDereferencer.java
similarity index 62%
rename from src/test/java/javax/xml/crypto/test/dsig/LocalHttpCacheURIDereferencer.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/LocalHttpCacheURIDereferencer.java
index 6b8ac973..418a8764 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/LocalHttpCacheURIDereferencer.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/LocalHttpCacheURIDereferencer.java
@@ -16,12 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 import java.io.File;
 import java.io.FileInputStream;
 import java.util.HashMap;
 import java.util.Map;
+
 import javax.xml.crypto.Data;
 import javax.xml.crypto.OctetStreamData;
 import javax.xml.crypto.URIDereferencer;
@@ -30,45 +31,53 @@ import javax.xml.crypto.URIReferenceException;
 import javax.xml.crypto.XMLCryptoContext;
 import javax.xml.crypto.dsig.XMLSignatureFactory;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
+
 /**
  * This URIDereferencer implementation retrieves http references used in
  * test signatures from local disk in order to avoid network requests.
  */
 public class LocalHttpCacheURIDereferencer implements URIDereferencer {
 
+    private static final File DIR = resolveFile("src", "test", "resources", "org", "apache", "xml", "security", "test",
+        "javax", "xml", "crypto", "dsig");
+
     private final URIDereferencer ud;
-    private static final String FS = System.getProperty("file.separator");
-    private static final String BASEDIR = System.getProperty("basedir");
     private final Map<String, File> uriMap;
 
     public LocalHttpCacheURIDereferencer() {
-        XMLSignatureFactory xmlSignatureFactory =
-            XMLSignatureFactory.getInstance("DOM", new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI());
+        XMLSignatureFactory xmlSignatureFactory = XMLSignatureFactory.getInstance("DOM",
+            new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI());
         ud = xmlSignatureFactory.getURIDereferencer();
-        String base = BASEDIR == null ? "./": BASEDIR;
-        File dir = new File(base + FS + "src/test/resources" + FS + "javax" +
-            FS + "xml" + FS + "crypto" + FS + "dsig");
         uriMap = new HashMap<>();
-        uriMap.put("http://www.w3.org/TR/xml-stylesheet",
-                   new File(dir, "xml-stylesheet"));
-        uriMap.put("http://www.w3.org/Signature/2002/04/xml-stylesheet.b64",
-                   new File(dir, "xml-stylesheet.b64"));
-        uriMap.put("http://www.ietf.org/rfc/rfc3161.txt",
-                   new File(dir, "rfc3161.txt"));
+        uriMap.put("http://www.w3.org/TR/xml-stylesheet", getExistingFile("xml-stylesheet"));
+        uriMap.put("http://www.w3.org/Signature/2002/04/xml-stylesheet.b64", getExistingFile("xml-stylesheet.b64"));
+        uriMap.put("http://www.ietf.org/rfc/rfc3161.txt", getExistingFile("rfc3161.txt"));
     }
 
+    @Override
     public Data dereference(URIReference uriReference, XMLCryptoContext context)
         throws URIReferenceException {
         String uri = uriReference.getURI();
         if (uriMap.containsKey(uri)) {
             try {
-                FileInputStream fis = new FileInputStream(uriMap.get(uri));
-                return new OctetStreamData(
-                    fis, uriReference.getURI(), uriReference.getType());
-            } catch (Exception e) { throw new URIReferenceException(e); }
+                return new OctetStreamData(new FileInputStream(uriMap.get(uri)), uriReference.getURI(),
+                    uriReference.getType());
+            } catch (Exception e) {
+                throw new URIReferenceException(e);
+            }
         }
 
         // fallback on builtin deref
         return ud.dereference(uriReference, context);
     }
+
+
+    private File getExistingFile(String fileName) {
+        File file = new File(DIR, fileName);
+        if (file.canRead()) {
+            return file;
+        }
+        throw new IllegalArgumentException("The file cannot be read: " + file);
+    }
 }
diff --git a/src/test/java/javax/xml/crypto/test/dsig/ManifestTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/ManifestTest.java
similarity index 99%
rename from src/test/java/javax/xml/crypto/test/dsig/ManifestTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/ManifestTest.java
index efc35289..25c62c58 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/ManifestTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/ManifestTest.java
@@ -19,7 +19,7 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 
 import java.util.*;
diff --git a/src/test/java/javax/xml/crypto/test/dsig/PKSignatureAlgorithmTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/PKSignatureAlgorithmTest.java
similarity index 99%
rename from src/test/java/javax/xml/crypto/test/dsig/PKSignatureAlgorithmTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/PKSignatureAlgorithmTest.java
index 8e198978..3416415d 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/PKSignatureAlgorithmTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/PKSignatureAlgorithmTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 import java.lang.reflect.Constructor;
 import java.security.AlgorithmParameters;
@@ -44,9 +44,9 @@ import javax.xml.crypto.dsig.dom.DOMValidateContext;
 import javax.xml.crypto.dsig.keyinfo.KeyInfo;
 import javax.xml.crypto.dsig.keyinfo.KeyInfoFactory;
 import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec;
-import javax.xml.crypto.test.KeySelectors;
 
 import org.apache.jcp.xml.dsig.internal.dom.RSAPSSParameterSpec;
+import org.apache.xml.security.test.javax.xml.crypto.KeySelectors;
 import org.junit.jupiter.api.Assumptions;
 import org.junit.jupiter.api.BeforeAll;
 import org.w3c.dom.Document;
diff --git a/src/test/java/javax/xml/crypto/test/dsig/PhaosXMLDSig3Test.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/PhaosXMLDSig3Test.java
similarity index 96%
rename from src/test/java/javax/xml/crypto/test/dsig/PhaosXMLDSig3Test.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/PhaosXMLDSig3Test.java
index 0345d769..9c2b0b63 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/PhaosXMLDSig3Test.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/PhaosXMLDSig3Test.java
@@ -19,7 +19,7 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 
 import java.io.File;
@@ -30,7 +30,8 @@ import javax.xml.crypto.URIDereferencer;
 import javax.xml.crypto.dsig.XMLSignatureException;
 import javax.xml.crypto.dsig.dom.DOMValidateContext;
 
-import javax.xml.crypto.test.KeySelectors;
+import org.apache.xml.security.test.XmlSecTestEnvironment;
+import org.apache.xml.security.test.javax.xml.crypto.KeySelectors;
 
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -44,8 +45,8 @@ import static org.junit.jupiter.api.Assertions.fail;
  */
 public class PhaosXMLDSig3Test {
 
-    private SignatureValidator validator;
-    private File base;
+    private final SignatureValidator validator;
+    private final File base;
     private final URIDereferencer ud;
 
     static {
@@ -54,10 +55,7 @@ public class PhaosXMLDSig3Test {
     }
 
     public PhaosXMLDSig3Test() {
-        String fs = System.getProperty("file.separator");
-        String basedir = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-        base = new File(basedir + fs + "src/test/resources" + fs +
-                        "com" + fs + "phaos", "phaos-xmldsig-three");
+        base = XmlSecTestEnvironment.resolveFile("src", "test", "resources", "com", "phaos", "phaos-xmldsig-three");
         validator = new SignatureValidator(base);
         ud = new LocalHttpCacheURIDereferencer();
     }
diff --git a/src/test/java/javax/xml/crypto/test/dsig/PhaosXMLDSig3XalanTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/PhaosXMLDSig3XalanTest.java
similarity index 70%
rename from src/test/java/javax/xml/crypto/test/dsig/PhaosXMLDSig3XalanTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/PhaosXMLDSig3XalanTest.java
index 52d4888f..59140201 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/PhaosXMLDSig3XalanTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/PhaosXMLDSig3XalanTest.java
@@ -19,17 +19,18 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.BeforeAll;
-
-import javax.xml.crypto.test.KeySelectors;
 import java.io.File;
 import java.security.Security;
 
-import static org.junit.jupiter.api.Assertions.*;
+import org.apache.xml.security.test.javax.xml.crypto.KeySelectors;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 
 /**
@@ -39,14 +40,13 @@ import static org.junit.jupiter.api.Assertions.*;
  */
 public class PhaosXMLDSig3XalanTest {
 
-    private static final String CONFIG_FILE = "config-xalan.xml";
+    private static final String CONFIG_FILE = "/config-xalan.xml";
 
-    private SignatureValidator validator;
-    private File base;
+    private final SignatureValidator validator;
+    private final File base;
 
     static {
-        Security.insertProviderAt
-        (new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI(), 1);
+        Security.insertProviderAt(new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI(), 1);
     }
 
     @BeforeAll
@@ -60,19 +60,14 @@ public class PhaosXMLDSig3XalanTest {
     }
 
     public PhaosXMLDSig3XalanTest() {
-        String fs = System.getProperty("file.separator");
-        String basedir = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-        base = new File(basedir + fs + "src/test/resources" + fs +
-                        "com" + fs + "phaos", "phaos-xmldsig-three");
+        base = resolveFile("src", "test", "resources", "com", "phaos", "phaos-xmldsig-three");
         validator = new SignatureValidator(base);
     }
 
     @org.junit.jupiter.api.Test
     public void test_signature_rsa_xpath_transform_enveloped() throws Exception {
         String file = "signature-rsa-xpath-transform-enveloped.xml";
-
-        boolean coreValidity =
-            validator.validate(file, new KeySelectors.RawX509KeySelector());
+        boolean coreValidity = validator.validate(file, new KeySelectors.RawX509KeySelector());
         assertTrue(coreValidity, "Signature failed core validation");
     }
 }
\ No newline at end of file
diff --git a/src/test/java/javax/xml/crypto/test/dsig/ReferenceTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/ReferenceTest.java
similarity index 99%
rename from src/test/java/javax/xml/crypto/test/dsig/ReferenceTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/ReferenceTest.java
index af2ab8b7..a4824df9 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/ReferenceTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/ReferenceTest.java
@@ -19,7 +19,7 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 
 import java.io.*;
diff --git a/src/test/java/javax/xml/crypto/test/dsig/SecureXSLTTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/SecureXSLTTest.java
similarity index 60%
rename from src/test/java/javax/xml/crypto/test/dsig/SecureXSLTTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/SecureXSLTTest.java
index 7fdf651b..ab486357 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/SecureXSLTTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/SecureXSLTTest.java
@@ -16,64 +16,48 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
-import java.io.*;
+import java.io.File;
+import java.io.FileInputStream;
 import java.security.Security;
 
-import javax.xml.crypto.dsig.*;
-import javax.xml.crypto.dsig.dom.*;
+import javax.xml.crypto.dsig.XMLSignature;
+import javax.xml.crypto.dsig.XMLSignatureFactory;
+import javax.xml.crypto.dsig.dom.DOMValidateContext;
 
+import org.apache.xml.security.test.javax.xml.crypto.KeySelectors;
 import org.apache.xml.security.utils.XMLUtils;
-import org.w3c.dom.*;
-
-import javax.xml.crypto.test.KeySelectors;
+import org.w3c.dom.Document;
+import org.w3c.dom.NodeList;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.fail;
 
 
 public class SecureXSLTTest {
 
+    private static final File BASEDIR = resolveFile("src", "test", "resources", "org", "apache", "xml", "security",
+        "test", "javax", "xml", "crypto", "dsig");
+
     static {
-        Security.insertProviderAt
-            (new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI(), 1);
+        Security.insertProviderAt(new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI(), 1);
     }
 
     @org.junit.jupiter.api.Test
     public void testSignature1() throws Exception {
-
-        String fs = System.getProperty("file.separator");
-        String base = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-
-        File baseDir = new File(base + fs + "src/test/resources"
-            + fs + "javax" + fs + "xml" + fs + "crypto", "dsig");
-
-        testSignature(new File(baseDir, "signature1.xml"));
+        testSignature(new File(BASEDIR, "signature1.xml"));
     }
 
     @org.junit.jupiter.api.Test
     public void testSignature2() throws Exception {
-
-        String fs = System.getProperty("file.separator");
-        String base = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-
-        File baseDir = new File(base + fs + "src/test/resources"
-            + fs + "javax" + fs + "xml" + fs + "crypto", "dsig");
-
-        testSignature(new File(baseDir, "signature2.xml"));
+        testSignature(new File(BASEDIR, "signature2.xml"));
     }
 
     @org.junit.jupiter.api.Test
     public void testSignature3() throws Exception {
-
-        String fs = System.getProperty("file.separator");
-        String base = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-
-        File baseDir = new File(base + fs + "src/test/resources"
-            + fs + "javax" + fs + "xml" + fs + "crypto", "dsig");
-
-        testSignature(new File(baseDir, "signature3.xml"));
+        testSignature(new File(BASEDIR, "signature3.xml"));
     }
 
     private void testSignature(File signatureFile) throws Exception {
@@ -81,11 +65,9 @@ public class SecureXSLTTest {
         XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM", new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI());
         File f = new File("doc.xml");
 
-        Document doc =
-            XMLUtils.read(new FileInputStream(signatureFile), false);
+        Document doc = XMLUtils.read(new FileInputStream(signatureFile), false);
 
-        NodeList nl =
-            doc.getElementsByTagNameNS(XMLSignature.XMLNS, "Signature");
+        NodeList nl = doc.getElementsByTagNameNS(XMLSignature.XMLNS, "Signature");
         if (nl.getLength() == 0) {
             throw new Exception("Cannot find Signature element");
         }
diff --git a/src/test/java/javax/xml/crypto/test/dsig/SignatureDigestMethodTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/SignatureDigestMethodTest.java
similarity index 98%
rename from src/test/java/javax/xml/crypto/test/dsig/SignatureDigestMethodTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/SignatureDigestMethodTest.java
index f3f0a80e..7f8d283f 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/SignatureDigestMethodTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/SignatureDigestMethodTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 import java.security.Key;
 import java.security.Security;
@@ -37,8 +37,8 @@ import javax.xml.crypto.dsig.dom.DOMValidateContext;
 import javax.xml.crypto.dsig.keyinfo.KeyInfo;
 import javax.xml.crypto.dsig.keyinfo.KeyInfoFactory;
 import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec;
-import javax.xml.crypto.test.KeySelectors;
 
+import org.apache.xml.security.test.javax.xml.crypto.KeySelectors;
 import org.junit.jupiter.api.Assumptions;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
diff --git a/src/test/java/javax/xml/crypto/test/dsig/SignatureMethodTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/SignatureMethodTest.java
similarity index 98%
rename from src/test/java/javax/xml/crypto/test/dsig/SignatureMethodTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/SignatureMethodTest.java
index 587c7ea4..59872a91 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/SignatureMethodTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/SignatureMethodTest.java
@@ -19,7 +19,7 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 import javax.xml.crypto.dsig.*;
 
diff --git a/src/test/java/javax/xml/crypto/test/dsig/SignaturePropertiesTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/SignaturePropertiesTest.java
similarity index 98%
rename from src/test/java/javax/xml/crypto/test/dsig/SignaturePropertiesTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/SignaturePropertiesTest.java
index bf3ff7ae..389560a4 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/SignaturePropertiesTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/SignaturePropertiesTest.java
@@ -19,7 +19,7 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 
 import java.util.*;
diff --git a/src/test/java/javax/xml/crypto/test/dsig/SignaturePropertyTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/SignaturePropertyTest.java
similarity index 98%
rename from src/test/java/javax/xml/crypto/test/dsig/SignaturePropertyTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/SignaturePropertyTest.java
index d92f9f33..83e1199d 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/SignaturePropertyTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/SignaturePropertyTest.java
@@ -19,7 +19,7 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 
 import java.util.*;
diff --git a/src/test/java/javax/xml/crypto/test/dsig/SignatureValidator.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/SignatureValidator.java
similarity index 52%
rename from src/test/java/javax/xml/crypto/test/dsig/SignatureValidator.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/SignatureValidator.java
index b3bd195d..7b369f3b 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/SignatureValidator.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/SignatureValidator.java
@@ -19,101 +19,120 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
-import java.io.*;
-import java.util.*;
+import java.io.File;
+import java.io.InputStream;
+import java.util.Objects;
 
-import javax.xml.crypto.*;
-import javax.xml.crypto.dsig.*;
+import javax.xml.crypto.KeySelector;
+import javax.xml.crypto.URIDereferencer;
+import javax.xml.crypto.dsig.Reference;
+import javax.xml.crypto.dsig.XMLSignature;
+import javax.xml.crypto.dsig.XMLSignatureFactory;
 import javax.xml.crypto.dsig.dom.DOMValidateContext;
 
+import org.apache.xml.security.parser.XMLParserException;
 import org.apache.xml.security.utils.XMLUtils;
 import org.w3c.dom.Document;
-import org.w3c.dom.Node;
 import org.w3c.dom.Element;
-import org.w3c.dom.traversal.*;
+import org.w3c.dom.Node;
+import org.w3c.dom.traversal.DocumentTraversal;
+import org.w3c.dom.traversal.NodeFilter;
+import org.w3c.dom.traversal.NodeIterator;
 
 /**
  * This is a class which performs xml signature validation upon request
- *
  */
 public class SignatureValidator {
 
-    private File dir;
+    private final File dir;
+
+    public SignatureValidator() {
+        this.dir = null;
+    }
 
+    /**
+     * @param base can be null. Base directory
+     */
     public SignatureValidator(File base) {
-        dir = base;
+        dir = Objects.requireNonNull(base, "basic directory");
     }
 
+
     public boolean validate(String fn, KeySelector ks) throws Exception {
         return validate(fn, ks, null);
     }
 
+
     public DOMValidateContext getValidateContext(String fn, KeySelector ks) throws Exception {
         return getValidateContext(fn, ks, true);
     }
 
-    public DOMValidateContext getValidateContext(String fn, KeySelector ks, boolean secureValidation) throws Exception {
-        DOMValidateContext domValidateContext;
-        try (FileInputStream inputStream = new FileInputStream(new File(dir, fn))){
-            domValidateContext =  getValidateContext(inputStream, ks, secureValidation);
-            domValidateContext.setBaseURI(dir.toURI().toString());
+
+    public DOMValidateContext getValidateContext(InputStream signedXml, KeySelector ks, boolean secureValidation)
+        throws XMLParserException {
+        Document doc = XMLUtils.read(signedXml, false);
+        return getValidateContext(doc, ks, secureValidation);
+    }
+
+
+    public DOMValidateContext getValidateContext(String fileName, KeySelector ks, boolean secureValidation)
+        throws Exception {
+        if (dir == null) {
+            throw new IllegalArgumentException("Basic directory was not set, files not supported.");
         }
-        return domValidateContext;
+        Document doc = XMLUtils.read(new File(dir, fileName), false);
+        return getValidateContext(doc, ks, secureValidation);
     }
 
-    public DOMValidateContext getValidateContext(InputStream inputStream, KeySelector ks, boolean secureValidation)
-            throws Exception {
-        Document doc = XMLUtils.read(inputStream, false);
+
+    public DOMValidateContext getValidateContext(Document doc, KeySelector ks, boolean secureValidation) {
         Element sigElement = getSignatureElement(doc);
         if (sigElement == null) {
-            throw new Exception("Couldn't find signature Element");
+            throw new IllegalArgumentException("Couldn't find signature Element");
         }
         DOMValidateContext vc = new DOMValidateContext(ks, sigElement);
         vc.setProperty("org.apache.jcp.xml.dsig.secureValidation", secureValidation);
+        if (dir != null) {
+            vc.setBaseURI(dir.toURI().toString());
+        }
         return vc;
     }
 
-    public boolean validate(String fn, KeySelector ks, URIDereferencer ud)
-        throws Exception {
-        return validate(fn, ks, ud, true);
+
+    public boolean validate(String fileName, KeySelector ks, URIDereferencer ud) throws Exception {
+        return validate(fileName, ks, ud, true);
     }
 
-    public boolean validate(String fn, KeySelector ks, URIDereferencer ud, boolean secureValidation)
-            throws Exception {
 
-        DOMValidateContext vc = getValidateContext(fn, ks, secureValidation);
+    public boolean validate(String fileName, KeySelector ks, URIDereferencer ud, boolean secureValidation)
+        throws Exception {
+        DOMValidateContext vc = getValidateContext(fileName, ks, secureValidation);
         if (ud != null) {
             vc.setURIDereferencer(ud);
         }
-
         return validate(vc);
     }
 
     public boolean validate(DOMValidateContext vc) throws Exception {
-
-        XMLSignatureFactory factory = XMLSignatureFactory.getInstance
-            ("DOM", new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI());
+        XMLSignatureFactory factory = XMLSignatureFactory.getInstance("DOM",
+            new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI());
         XMLSignature signature = factory.unmarshalXMLSignature(vc);
         boolean coreValidity = signature.validate(vc);
 
         // Check core validation status
         if (!coreValidity) {
-            // check the validation status of each Reference
-            @SuppressWarnings("unchecked")
-            Iterator<Reference> i = signature.getSignedInfo().getReferences().iterator();
-            while (i.hasNext()) {
-                Reference reference = i.next();
-                reference.validate(vc);
+            for (Object reference : signature.getSignedInfo().getReferences()) {
+                ((Reference) reference).validate(vc);
             }
         }
         return coreValidity;
     }
 
     public static Element getSignatureElement(Document doc) {
-        NodeIterator ni = ((DocumentTraversal)doc).createNodeIterator(
-            doc.getDocumentElement(), NodeFilter.SHOW_ELEMENT, null, false);
+        NodeIterator ni = ((DocumentTraversal) doc).createNodeIterator(doc.getDocumentElement(),
+            NodeFilter.SHOW_ELEMENT, null, false);
 
         for (Node n = ni.nextNode(); n != null; n = ni.nextNode() ) {
             if ("Signature".equals(n.getLocalName())) {
diff --git a/src/test/java/javax/xml/crypto/test/dsig/SignatureValidatorEdDSATest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/SignatureValidatorEdDSATest.java
similarity index 93%
rename from src/test/java/javax/xml/crypto/test/dsig/SignatureValidatorEdDSATest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/SignatureValidatorEdDSATest.java
index dca8fe8c..c31ea4ee 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/SignatureValidatorEdDSATest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/SignatureValidatorEdDSATest.java
@@ -16,15 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvSource;
+import java.nio.file.Paths;
 
 import javax.xml.crypto.dsig.dom.DOMValidateContext;
-import javax.xml.crypto.test.KeySelectors;
-import java.nio.file.Paths;
+
+import org.apache.xml.security.test.javax.xml.crypto.KeySelectors;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
@@ -36,7 +38,7 @@ public class SignatureValidatorEdDSATest extends EdDSATestAbstract {
 
     private SignatureValidator testInstance;
 
-    @org.junit.jupiter.api.BeforeEach
+    @BeforeEach
     public void before() {
         String base = System.getProperty("basedir", "./");
         testInstance = new SignatureValidator(Paths.get(base, "src", "test", "resources", "javax", "xml", "crypto", "dsig", "eddsa").toFile());
diff --git a/src/test/java/javax/xml/crypto/test/dsig/SignedInfoTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/SignedInfoTest.java
similarity index 98%
rename from src/test/java/javax/xml/crypto/test/dsig/SignedInfoTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/SignedInfoTest.java
index 9cc03c38..524d0f28 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/SignedInfoTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/SignedInfoTest.java
@@ -19,7 +19,7 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 
 import java.security.Security;
diff --git a/src/test/java/javax/xml/crypto/test/dsig/TestUtils.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/TestUtils.java
similarity index 99%
rename from src/test/java/javax/xml/crypto/test/dsig/TestUtils.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/TestUtils.java
index eb3d6194..776e5c89 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/TestUtils.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/TestUtils.java
@@ -19,7 +19,7 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 import java.io.ByteArrayInputStream;
 import java.io.File;
diff --git a/src/test/java/javax/xml/crypto/test/dsig/TransformTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/TransformTest.java
similarity index 98%
rename from src/test/java/javax/xml/crypto/test/dsig/TransformTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/TransformTest.java
index a2b7ce0d..4471ac43 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/TransformTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/TransformTest.java
@@ -19,7 +19,7 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 import java.util.Collections;
 import javax.xml.crypto.XMLStructure;
diff --git a/src/test/java/javax/xml/crypto/test/dsig/ValidateSignatureTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/ValidateSignatureTest.java
similarity index 91%
rename from src/test/java/javax/xml/crypto/test/dsig/ValidateSignatureTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/ValidateSignatureTest.java
index c007155a..9d04eb39 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/ValidateSignatureTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/ValidateSignatureTest.java
@@ -16,20 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 
 import java.io.File;
 import java.nio.charset.StandardCharsets;
 import java.security.Security;
 
-import org.apache.xml.security.utils.resolver.ResourceResolver;
-import org.apache.xml.security.utils.resolver.implementations.ResolverLocalFilesystem;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-
-import javax.xml.crypto.test.KeySelectors;
 import javax.xml.crypto.Data;
 import javax.xml.crypto.URIDereferencer;
 import javax.xml.crypto.URIReference;
@@ -39,6 +32,14 @@ import javax.xml.crypto.dsig.XMLSignatureException;
 import javax.xml.crypto.dsig.XMLSignatureFactory;
 import javax.xml.crypto.dsig.dom.DOMValidateContext;
 
+import org.apache.xml.security.test.javax.xml.crypto.KeySelectors;
+import org.apache.xml.security.utils.resolver.ResourceResolver;
+import org.apache.xml.security.utils.resolver.implementations.ResolverLocalFilesystem;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
@@ -50,21 +51,16 @@ import static org.junit.jupiter.api.Assertions.fail;
  */
 public class ValidateSignatureTest {
 
-    private SignatureValidator validator;
-    private File dir;
+    private final SignatureValidator validator;
+    private final File dir;
 
     static {
-        Security.insertProviderAt
-            (new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI(), 1);
+        Security.insertProviderAt(new org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI(), 1);
         ResourceResolver.register(new ResolverLocalFilesystem(), false);
     }
 
     public ValidateSignatureTest() {
-        String fs = System.getProperty("file.separator");
-        String base = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-
-        dir = new File(base + fs + "src/test/resources" + fs
-            + "javax" + fs + "xml" + fs + "crypto", "dsig");
+        dir = resolveFile("src", "test", "resources", "org", "apache", "xml", "security", "test", "javax", "xml", "crypto", "dsig");
         validator = new SignatureValidator(dir);
     }
 
@@ -160,9 +156,10 @@ public class ValidateSignatureTest {
      */
     static class InvalidURIDereferencer implements URIDereferencer {
         boolean dereferenced = false;
-        private URIDereferencer ud =
+        private final URIDereferencer ud =
             XMLSignatureFactory.getInstance().getURIDereferencer();
 
+        @Override
         public Data dereference(final URIReference ref, XMLCryptoContext ctx)
         throws URIReferenceException {
             dereferenced = true;
diff --git a/src/test/java/javax/xml/crypto/test/dsig/X509KeySelector.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/X509KeySelector.java
similarity index 99%
rename from src/test/java/javax/xml/crypto/test/dsig/X509KeySelector.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/X509KeySelector.java
index 2af93477..2c31902e 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/X509KeySelector.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/X509KeySelector.java
@@ -19,7 +19,7 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 import java.io.IOException;
 import java.security.Key;
diff --git a/src/test/java/javax/xml/crypto/test/dsig/XMLObjectTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/XMLObjectTest.java
similarity index 98%
rename from src/test/java/javax/xml/crypto/test/dsig/XMLObjectTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/XMLObjectTest.java
index 76755a3d..3cfb0f32 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/XMLObjectTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/XMLObjectTest.java
@@ -19,7 +19,7 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 
 import java.util.*;
diff --git a/src/test/java/javax/xml/crypto/test/dsig/XMLSignContextTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/XMLSignContextTest.java
similarity index 98%
rename from src/test/java/javax/xml/crypto/test/dsig/XMLSignContextTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/XMLSignContextTest.java
index 12914b0c..53727683 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/XMLSignContextTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/XMLSignContextTest.java
@@ -19,7 +19,7 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 import javax.xml.crypto.dsig.*;
 import javax.xml.crypto.dsig.dom.DOMSignContext;
diff --git a/src/test/java/javax/xml/crypto/test/dsig/XMLSignatureEdDSATest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/XMLSignatureEdDSATest.java
similarity index 93%
rename from src/test/java/javax/xml/crypto/test/dsig/XMLSignatureEdDSATest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/XMLSignatureEdDSATest.java
index d4300e97..0fc22027 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/XMLSignatureEdDSATest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/XMLSignatureEdDSATest.java
@@ -16,27 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 
-import org.apache.xml.security.c14n.Canonicalizer;
-import org.apache.xml.security.test.dom.TestUtils;
-import org.apache.xml.security.utils.Constants;
-import org.apache.xml.security.utils.XMLUtils;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvSource;
-import org.w3c.dom.Element;
-
-import javax.xml.crypto.dsig.*;
-import javax.xml.crypto.dsig.dom.DOMSignContext;
-import javax.xml.crypto.dsig.dom.DOMValidateContext;
-import javax.xml.crypto.dsig.keyinfo.KeyInfo;
-import javax.xml.crypto.dsig.keyinfo.KeyInfoFactory;
-import javax.xml.crypto.dsig.keyinfo.X509Data;
-import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec;
-import javax.xml.crypto.dsig.spec.TransformParameterSpec;
-import javax.xml.crypto.test.KeySelectors;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
@@ -50,6 +32,31 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
+import javax.xml.crypto.dsig.CanonicalizationMethod;
+import javax.xml.crypto.dsig.DigestMethod;
+import javax.xml.crypto.dsig.Reference;
+import javax.xml.crypto.dsig.SignedInfo;
+import javax.xml.crypto.dsig.Transform;
+import javax.xml.crypto.dsig.XMLSignature;
+import javax.xml.crypto.dsig.XMLSignatureFactory;
+import javax.xml.crypto.dsig.dom.DOMSignContext;
+import javax.xml.crypto.dsig.dom.DOMValidateContext;
+import javax.xml.crypto.dsig.keyinfo.KeyInfo;
+import javax.xml.crypto.dsig.keyinfo.KeyInfoFactory;
+import javax.xml.crypto.dsig.keyinfo.X509Data;
+import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec;
+import javax.xml.crypto.dsig.spec.TransformParameterSpec;
+
+import org.apache.xml.security.c14n.Canonicalizer;
+import org.apache.xml.security.test.dom.TestUtils;
+import org.apache.xml.security.test.javax.xml.crypto.KeySelectors;
+import org.apache.xml.security.utils.Constants;
+import org.apache.xml.security.utils.XMLUtils;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
+import org.w3c.dom.Element;
+
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 
@@ -57,7 +64,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
  * Unit test for EdDSA javax.xml.crypto.dsig.XMLSignature creation
  */
 public class XMLSignatureEdDSATest extends EdDSATestAbstract {
-    private final SignatureValidator testInstance = new SignatureValidator(null);
+    private final SignatureValidator testInstance = new SignatureValidator();
 
     static {
         Security.insertProviderAt
diff --git a/src/test/java/javax/xml/crypto/test/dsig/XMLSignatureFactoryTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/XMLSignatureFactoryTest.java
similarity index 84%
rename from src/test/java/javax/xml/crypto/test/dsig/XMLSignatureFactoryTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/XMLSignatureFactoryTest.java
index d7428ea7..d5457d6c 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/XMLSignatureFactoryTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/XMLSignatureFactoryTest.java
@@ -19,24 +19,29 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 
 import java.io.File;
-import java.io.FileInputStream;
 import java.security.NoSuchProviderException;
 import java.security.Provider;
 import java.security.Security;
 
-import javax.xml.crypto.dsig.keyinfo.*;
-import javax.xml.crypto.*;
-import javax.xml.crypto.dsig.*;
+import javax.xml.crypto.KeySelector;
+import javax.xml.crypto.MarshalException;
+import javax.xml.crypto.NoSuchMechanismException;
+import javax.xml.crypto.URIDereferencer;
+import javax.xml.crypto.dsig.XMLSignature;
+import javax.xml.crypto.dsig.XMLSignatureFactory;
+import javax.xml.crypto.dsig.XMLValidateContext;
 import javax.xml.crypto.dsig.dom.DOMValidateContext;
+import javax.xml.crypto.dsig.keyinfo.KeyInfoFactory;
 
 import org.apache.xml.security.utils.XMLUtils;
 import org.w3c.dom.Document;
 import org.w3c.dom.NodeList;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -132,38 +137,47 @@ public class XMLSignatureFactoryTest {
         try {
             stuff = factory.unmarshalXMLSignature(
                 new XMLValidateContext() {
+                    @Override
                     public Object getProperty(String name) { return null; }
+                    @Override
                     public Object setProperty(String name, Object property) {
                         return null;
                     }
+                    @Override
                     public String getBaseURI()	{ return null; }
+                    @Override
                     public void setBaseURI(String uri)	{ }
+                    @Override
                     public KeySelector getKeySelector() { return null; }
+                    @Override
                     public void setKeySelector(KeySelector ks) { }
+                    @Override
                     public URIDereferencer getURIDereferencer() { return null; }
+                    @Override
                     public void setURIDereferencer(URIDereferencer ud) {}
+                    @Override
                     public Object get(Object key) {return null;}
+                    @Override
                     public Object put(Object key, Object value) {return null;}
+                    @Override
                     public void setDefaultNamespacePrefix(String defPrefix) {}
+                    @Override
                     public String getDefaultNamespacePrefix() {return null;}
+                    @Override
                     public String putNamespacePrefix
                         (String nsURI, String prefix) {return null;}
+                    @Override
                     public String getNamespacePrefix
                         (String nsURI, String defPrefix) {return null;}
                     });
             fail("Should throw a CCE for input of wrong type");
         } catch (ClassCastException ex) {
         } catch (Exception ex) {
-            fail("Should raise a CCE instead of " + ex +
-                 " for wrong inputs");
+            fail("Should raise a CCE instead of " + ex + " for wrong inputs");
         }
 
-        String fs = System.getProperty("file.separator");
-        String base = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-        File dir = new File(base + fs +
-            "src/test/resources" + fs + "ie" + fs + "baltimore" + fs + "merlin-examples",
-            "merlin-xmldsig-twenty-three");
-        Document doc = XMLUtils.read(new FileInputStream(new File(dir, "signature.xml")), false);
+        File dir = resolveFile("src", "test", "resources", "ie", "baltimore", "merlin-examples", "merlin-xmldsig-twenty-three");
+        Document doc = XMLUtils.read(new File(dir, "signature.xml"), false);
         NodeList nl = doc.getElementsByTagName("KeyInfo");
         try {
             stuff = factory.unmarshalXMLSignature
diff --git a/src/test/java/javax/xml/crypto/test/dsig/XMLSignatureTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/XMLSignatureTest.java
similarity index 90%
rename from src/test/java/javax/xml/crypto/test/dsig/XMLSignatureTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/XMLSignatureTest.java
index 5a2f42b6..2893138c 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/XMLSignatureTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/XMLSignatureTest.java
@@ -19,28 +19,54 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
-
-
-import java.io.*;
-import java.util.*;
-import java.security.*;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
+
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.security.Key;
+import java.security.NoSuchAlgorithmException;
+import java.security.PrivateKey;
+import java.security.Provider;
+import java.security.PublicKey;
+import java.security.Security;
+import java.security.Signature;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
 
+import javax.crypto.spec.SecretKeySpec;
 import javax.xml.crypto.URIDereferencer;
 import javax.xml.crypto.URIReferenceException;
 import javax.xml.crypto.dom.DOMStructure;
-import javax.xml.crypto.dsig.*;
-import javax.xml.crypto.dsig.keyinfo.*;
-import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec;
-import javax.xml.crypto.dsig.spec.TransformParameterSpec;
+import javax.xml.crypto.dsig.CanonicalizationMethod;
+import javax.xml.crypto.dsig.DigestMethod;
+import javax.xml.crypto.dsig.Reference;
+import javax.xml.crypto.dsig.SignatureMethod;
+import javax.xml.crypto.dsig.SignedInfo;
+import javax.xml.crypto.dsig.Transform;
+import javax.xml.crypto.dsig.XMLObject;
+import javax.xml.crypto.dsig.XMLSignContext;
+import javax.xml.crypto.dsig.XMLSignature;
+import javax.xml.crypto.dsig.XMLSignatureException;
+import javax.xml.crypto.dsig.XMLSignatureFactory;
+import javax.xml.crypto.dsig.XMLValidateContext;
 import javax.xml.crypto.dsig.dom.DOMSignContext;
 import javax.xml.crypto.dsig.dom.DOMValidateContext;
-import javax.crypto.spec.SecretKeySpec;
+import javax.xml.crypto.dsig.keyinfo.KeyInfo;
+import javax.xml.crypto.dsig.keyinfo.KeyInfoFactory;
+import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec;
+import javax.xml.crypto.dsig.spec.TransformParameterSpec;
 
 import org.apache.xml.security.utils.XMLUtils;
 import org.junit.jupiter.api.Assumptions;
-import org.w3c.dom.*;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -54,17 +80,17 @@ import static org.junit.jupiter.api.Assertions.fail;
  *
  */
 public class XMLSignatureTest {
-    private XMLSignatureFactory fac;
-    private KeyInfoFactory kifac;
-    private SignedInfo defSi;
-    private KeyInfo defKi;
-    private List<XMLObject> objs;
-    private String id = "id";
-    private String sigValueId = "signatureValueId";
-    private Key[] SIGN_KEYS;
-    private Key[] VALIDATE_KEYS;
-    private SignatureMethod[] SIG_METHODS;
-    private URIDereferencer ud;
+    private final XMLSignatureFactory fac;
+    private final KeyInfoFactory kifac;
+    private final SignedInfo defSi;
+    private final KeyInfo defKi;
+    private final List<XMLObject> objs;
+    private final String id = "id";
+    private final String sigValueId = "signatureValueId";
+    private final Key[] SIGN_KEYS;
+    private final Key[] VALIDATE_KEYS;
+    private final SignatureMethod[] SIG_METHODS;
+    private final URIDereferencer ud;
     private static final String DSA_SHA256 =
         "http://www.w3.org/2009/xmldsig11#dsa-sha256";
 
@@ -311,11 +337,8 @@ public class XMLSignatureTest {
 
     @org.junit.jupiter.api.Test
     public void testSignTemplateWithObjectNSDefs() throws Exception {
-        String base = System.getProperty("basedir") == null ? "./"
-                      : System.getProperty("basedir");
-
-        File f = new File(base + "/src/test/resources/javax/xml/crypto/dsig/" +
-            "signature-enveloping-rsa-template.xml");
+        File f = resolveFile(
+            "src/test/resources/org/apache/xml/security/test/javax/xml/crypto/dsig/signature-enveloping-rsa-template.xml");
 
         Document doc = XMLUtils.read(new FileInputStream(f), false);
 
diff --git a/src/test/java/javax/xml/crypto/test/dsig/XMLValidateContextTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/XMLValidateContextTest.java
similarity index 98%
rename from src/test/java/javax/xml/crypto/test/dsig/XMLValidateContextTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/XMLValidateContextTest.java
index 7bea5fb8..fbf76226 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/XMLValidateContextTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/XMLValidateContextTest.java
@@ -19,7 +19,7 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig;
+package org.apache.xml.security.test.javax.xml.crypto.dsig;
 
 import javax.xml.crypto.*;
 import javax.xml.crypto.dsig.dom.DOMValidateContext;
diff --git a/src/test/java/javax/xml/crypto/test/dsig/dom/DOMValidateContextTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/dom/DOMValidateContextTest.java
similarity index 85%
rename from src/test/java/javax/xml/crypto/test/dsig/dom/DOMValidateContextTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/dom/DOMValidateContextTest.java
index a2a19a57..9c452a69 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/dom/DOMValidateContextTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/dom/DOMValidateContextTest.java
@@ -19,13 +19,15 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig.dom;
+package org.apache.xml.security.test.javax.xml.crypto.dsig.dom;
 
 
-import java.io.*;
+import java.io.File;
+
 import javax.xml.crypto.dsig.dom.DOMValidateContext;
 
-import javax.xml.crypto.test.dsig.TestUtils;
+import org.apache.xml.security.test.XmlSecTestEnvironment;
+import org.apache.xml.security.test.javax.xml.crypto.dsig.TestUtils;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -38,17 +40,13 @@ import static org.junit.jupiter.api.Assertions.fail;
  *
  */
 public class DOMValidateContextTest {
-    private DOMValidateContext domVC;
+    private final DOMValidateContext domVC;
 
     public DOMValidateContextTest() throws Exception {
-        String fs = System.getProperty("file.separator");
-        String base = System.getProperty("basedir") == null ? "./": System.getProperty("basedir");
-        File dir = new File(base + fs +
-            "src/test/resources" + fs + "ie" + fs + "baltimore" + fs + "merlin-examples",
+        File dir = XmlSecTestEnvironment.resolveFile("src", "test", "resources", "ie", "baltimore", "merlin-examples",
             "merlin-xmldsig-twenty-three");
         File input = new File(dir, "signature.xml");
-        domVC = (DOMValidateContext)
-            TestUtils.getXMLValidateContext("DOM", input, "Reference");
+        domVC = (DOMValidateContext) TestUtils.getXMLValidateContext("DOM", input, "Reference");
     }
 
     @org.junit.jupiter.api.Test
diff --git a/src/test/java/javax/xml/crypto/test/dsig/keyinfo/KeyInfoFactoryTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/keyinfo/KeyInfoFactoryTest.java
similarity index 99%
rename from src/test/java/javax/xml/crypto/test/dsig/keyinfo/KeyInfoFactoryTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/keyinfo/KeyInfoFactoryTest.java
index 6e0c2dd5..46159f29 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/keyinfo/KeyInfoFactoryTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/keyinfo/KeyInfoFactoryTest.java
@@ -19,7 +19,7 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig.keyinfo;
+package org.apache.xml.security.test.javax.xml.crypto.dsig.keyinfo;
 
 
 import java.math.BigInteger;
diff --git a/src/test/java/javax/xml/crypto/test/dsig/keyinfo/KeyInfoTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/keyinfo/KeyInfoTest.java
similarity index 98%
rename from src/test/java/javax/xml/crypto/test/dsig/keyinfo/KeyInfoTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/keyinfo/KeyInfoTest.java
index a2a49ba4..9c7f9c05 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/keyinfo/KeyInfoTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/keyinfo/KeyInfoTest.java
@@ -19,7 +19,7 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig.keyinfo;
+package org.apache.xml.security.test.javax.xml.crypto.dsig.keyinfo;
 
 
 import java.security.Key;
diff --git a/src/test/java/javax/xml/crypto/test/dsig/keyinfo/KeyNameTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/keyinfo/KeyNameTest.java
similarity index 97%
rename from src/test/java/javax/xml/crypto/test/dsig/keyinfo/KeyNameTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/keyinfo/KeyNameTest.java
index 3e3fe809..dc8a5ea9 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/keyinfo/KeyNameTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/keyinfo/KeyNameTest.java
@@ -19,7 +19,7 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig.keyinfo;
+package org.apache.xml.security.test.javax.xml.crypto.dsig.keyinfo;
 
 
 import javax.xml.crypto.dsig.keyinfo.*;
diff --git a/src/test/java/javax/xml/crypto/test/dsig/keyinfo/KeyValueTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/keyinfo/KeyValueTest.java
similarity index 98%
rename from src/test/java/javax/xml/crypto/test/dsig/keyinfo/KeyValueTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/keyinfo/KeyValueTest.java
index 4ab7388f..0ddd6bf5 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/keyinfo/KeyValueTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/keyinfo/KeyValueTest.java
@@ -19,7 +19,7 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig.keyinfo;
+package org.apache.xml.security.test.javax.xml.crypto.dsig.keyinfo;
 
 
 import java.security.*;
diff --git a/src/test/java/javax/xml/crypto/test/dsig/keyinfo/PGPDataTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/keyinfo/PGPDataTest.java
similarity index 98%
rename from src/test/java/javax/xml/crypto/test/dsig/keyinfo/PGPDataTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/keyinfo/PGPDataTest.java
index 54c080ea..e755ec5b 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/keyinfo/PGPDataTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/keyinfo/PGPDataTest.java
@@ -19,7 +19,7 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig.keyinfo;
+package org.apache.xml.security.test.javax.xml.crypto.dsig.keyinfo;
 
 
 import java.util.ArrayList;
diff --git a/src/test/java/javax/xml/crypto/test/dsig/keyinfo/RetrievalMethodTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/keyinfo/RetrievalMethodTest.java
similarity index 98%
rename from src/test/java/javax/xml/crypto/test/dsig/keyinfo/RetrievalMethodTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/keyinfo/RetrievalMethodTest.java
index d7de6ba2..e88da0d0 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/keyinfo/RetrievalMethodTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/keyinfo/RetrievalMethodTest.java
@@ -19,7 +19,7 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig.keyinfo;
+package org.apache.xml.security.test.javax.xml.crypto.dsig.keyinfo;
 
 
 import javax.xml.crypto.dsig.keyinfo.*;
diff --git a/src/test/java/javax/xml/crypto/test/dsig/keyinfo/X509DataTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/keyinfo/X509DataTest.java
similarity index 97%
rename from src/test/java/javax/xml/crypto/test/dsig/keyinfo/X509DataTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/keyinfo/X509DataTest.java
index b21afc8c..d179552b 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/keyinfo/X509DataTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/keyinfo/X509DataTest.java
@@ -19,7 +19,7 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig.keyinfo;
+package org.apache.xml.security.test.javax.xml.crypto.dsig.keyinfo;
 
 import java.util.*;
 import java.security.cert.X509Certificate;
diff --git a/src/test/java/javax/xml/crypto/test/dsig/keyinfo/X509IssuerSerialTest.java b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/keyinfo/X509IssuerSerialTest.java
similarity index 97%
rename from src/test/java/javax/xml/crypto/test/dsig/keyinfo/X509IssuerSerialTest.java
rename to src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/keyinfo/X509IssuerSerialTest.java
index b1020732..bb519c2d 100644
--- a/src/test/java/javax/xml/crypto/test/dsig/keyinfo/X509IssuerSerialTest.java
+++ b/src/test/java/org/apache/xml/security/test/javax/xml/crypto/dsig/keyinfo/X509IssuerSerialTest.java
@@ -19,7 +19,7 @@
 /*
  * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
  */
-package javax.xml.crypto.test.dsig.keyinfo;
+package org.apache.xml.security.test.javax.xml.crypto.dsig.keyinfo;
 
 
 import java.math.BigInteger;
diff --git a/src/test/java/org/apache/xml/security/test/stax/InputProcessorChainTest.java b/src/test/java/org/apache/xml/security/test/stax/InputProcessorChainTest.java
index 3dc4e65d..d2f3aff7 100644
--- a/src/test/java/org/apache/xml/security/test/stax/InputProcessorChainTest.java
+++ b/src/test/java/org/apache/xml/security/test/stax/InputProcessorChainTest.java
@@ -42,15 +42,14 @@ public class InputProcessorChainTest {
 
     @BeforeEach
     public void setUp() throws Exception {
-        Init.init(this.getClass().getClassLoader().getResource("security-config.xml").toURI(),
-                this.getClass());
+        Init.init(this.getClass().getClassLoader().getResource("security-config.xml").toURI(), this.getClass());
     }
 
     abstract class AbstractInputProcessor implements InputProcessor {
 
         private XMLSecurityConstants.Phase phase = XMLSecurityConstants.Phase.PROCESSING;
-        private Set<Object> beforeProcessors = new HashSet<>();
-        private Set<Object> afterProcessors = new HashSet<>();
+        private final Set<Object> beforeProcessors = new HashSet<>();
+        private final Set<Object> afterProcessors = new HashSet<>();
 
         @Override
         public void addBeforeProcessor(Object processor) {
diff --git a/src/test/java/org/apache/xml/security/test/stax/XMLSecurityStreamReaderTest.java b/src/test/java/org/apache/xml/security/test/stax/XMLSecurityStreamReaderTest.java
index 87f1e2d5..6cdb692f 100644
--- a/src/test/java/org/apache/xml/security/test/stax/XMLSecurityStreamReaderTest.java
+++ b/src/test/java/org/apache/xml/security/test/stax/XMLSecurityStreamReaderTest.java
@@ -47,10 +47,8 @@ import org.apache.xml.security.stax.impl.DocumentContextImpl;
 import org.apache.xml.security.stax.impl.InboundSecurityContextImpl;
 import org.apache.xml.security.stax.impl.InputProcessorChainImpl;
 import org.apache.xml.security.stax.impl.XMLSecurityStreamReader;
-import org.hamcrest.MatcherAssert;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
-import org.xmlunit.matchers.CompareMatcher;
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.equalTo;
@@ -59,6 +57,7 @@ import static org.hamcrest.Matchers.nullValue;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.xmlunit.matchers.CompareMatcher.isSimilarTo;
 
 
 /**
@@ -107,7 +106,7 @@ public class XMLSecurityStreamReaderTest {
         javax.xml.transform.Transformer transformer = transformerFactory.newTransformer();
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         transformer.transform(new StAXSource(xmlSecurityStreamReader), new StreamResult(baos));
-        MatcherAssert.assertThat(readTestFile(), CompareMatcher.isSimilarTo(baos.toString(StandardCharsets.UTF_8.name())));
+        assertThat(readTestFile(), isSimilarTo(baos.toString(StandardCharsets.UTF_8.name())));
     }
 
     @Test
@@ -372,7 +371,7 @@ public class XMLSecurityStreamReaderTest {
 
     class EventReaderProcessor implements InputProcessor {
 
-        private XMLStreamReader xmlStreamReader;
+        private final XMLStreamReader xmlStreamReader;
 
         EventReaderProcessor(XMLStreamReader xmlStreamReader) {
             this.xmlStreamReader = xmlStreamReader;
diff --git a/src/test/java/org/apache/xml/security/test/stax/XMLSecurityStreamWriterTest.java b/src/test/java/org/apache/xml/security/test/stax/XMLSecurityStreamWriterTest.java
index 713aba94..1bf448d8 100644
--- a/src/test/java/org/apache/xml/security/test/stax/XMLSecurityStreamWriterTest.java
+++ b/src/test/java/org/apache/xml/security/test/stax/XMLSecurityStreamWriterTest.java
@@ -208,7 +208,7 @@ public class XMLSecurityStreamWriterTest {
 
     class EventWriterProcessor implements OutputProcessor {
 
-        private XMLEventWriter xmlEventWriter;
+        private final XMLEventWriter xmlEventWriter;
 
         EventWriterProcessor(Writer writer) throws Exception {
             XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newInstance();
diff --git a/src/test/java/org/apache/xml/security/test/stax/encryption/BaltimoreEncTest.java b/src/test/java/org/apache/xml/security/test/stax/encryption/BaltimoreEncTest.java
index 0ae65c21..dc5be4cf 100644
--- a/src/test/java/org/apache/xml/security/test/stax/encryption/BaltimoreEncTest.java
+++ b/src/test/java/org/apache/xml/security/test/stax/encryption/BaltimoreEncTest.java
@@ -23,6 +23,8 @@ import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
 import java.security.KeyFactory;
 import java.security.PrivateKey;
 import java.security.spec.PKCS8EncodedKeySpec;
@@ -55,6 +57,8 @@ import org.junit.jupiter.api.Test;
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolvePath;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assumptions.assumeFalse;
@@ -71,8 +75,8 @@ public class BaltimoreEncTest {
     private static PrivateKey rsaKey;
 
     private XMLInputFactory xmlInputFactory;
-    private TransformerFactory transformerFactory = TransformerFactory.newInstance();
-    private boolean isIBMJdK = System.getProperty("java.vendor").contains("IBM");
+    private final TransformerFactory transformerFactory = TransformerFactory.newInstance();
+    private final boolean isIBMJdK = System.getProperty("java.vendor").contains("IBM");
 
     @BeforeEach
     public void setUp() throws Exception {
@@ -81,15 +85,8 @@ public class BaltimoreEncTest {
         xmlInputFactory = XMLInputFactory.newInstance();
         xmlInputFactory.setEventAllocator(new XMLSecEventAllocator());
 
-        String filename =
-                "src/test/resources/ie/baltimore/merlin-examples/merlin-xmlenc-five/plaintext.xml";
-        String basedir = System.getProperty("basedir");
-        if (basedir != null && basedir.length() != 0) {
-            filename = basedir + "/" + filename;
-        }
-        File f = new File(filename);
-
-        Document doc = XMLUtils.read(new java.io.FileInputStream(f), false);
+        File f = resolveFile("src/test/resources/ie/baltimore/merlin-examples/merlin-xmlenc-five/plaintext.xml");
+        Document doc = XMLUtils.read(f, false);
 
         cardNumber = retrieveCCNumber(doc);
 
@@ -97,12 +94,8 @@ public class BaltimoreEncTest {
         nodeCount = countNodes(doc);
 
         // rsaKey
-        filename = "src/test/resources/ie/baltimore/merlin-examples/merlin-xmlenc-five/rsa.p8";
-        if (basedir != null && basedir.length() != 0) {
-            filename = basedir + "/" + filename;
-        }
-
-        byte[] pkcs8Bytes = JavaUtils.getBytesFromFile(filename);
+        Path rsaKeyPath = resolvePath("src/test/resources/ie/baltimore/merlin-examples/merlin-xmlenc-five/rsa.p8");
+        byte[] pkcs8Bytes = Files.readAllBytes(rsaKeyPath);
         PKCS8EncodedKeySpec pkcs8Spec = new PKCS8EncodedKeySpec(pkcs8Bytes);
 
         // Create a key factory
@@ -130,7 +123,7 @@ public class BaltimoreEncTest {
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         transformer.transform(new DOMSource(document), new StreamResult(baos));
 
-        XMLStreamReader xmlStreamReader = null;
+        XMLStreamReader xmlStreamReader;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
            xmlStreamReader = xmlInputFactory.createXMLStreamReader(is);
         }
@@ -168,7 +161,7 @@ public class BaltimoreEncTest {
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         transformer.transform(new DOMSource(document), new StreamResult(baos));
 
-        XMLStreamReader xmlStreamReader = null;
+        XMLStreamReader xmlStreamReader;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
            xmlStreamReader = xmlInputFactory.createXMLStreamReader(is);
         }
@@ -205,7 +198,7 @@ public class BaltimoreEncTest {
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         transformer.transform(new DOMSource(document), new StreamResult(baos));
 
-        XMLStreamReader xmlStreamReader = null;
+        XMLStreamReader xmlStreamReader;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
            xmlStreamReader = xmlInputFactory.createXMLStreamReader(is);
         }
@@ -242,7 +235,7 @@ public class BaltimoreEncTest {
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         transformer.transform(new DOMSource(document), new StreamResult(baos));
 
-        XMLStreamReader xmlStreamReader = null;
+        XMLStreamReader xmlStreamReader;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
            xmlStreamReader = xmlInputFactory.createXMLStreamReader(is);
         }
@@ -275,7 +268,7 @@ public class BaltimoreEncTest {
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         transformer.transform(new DOMSource(document), new StreamResult(baos));
 
-        XMLStreamReader xmlStreamReader = null;
+        XMLStreamReader xmlStreamReader;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
            xmlStreamReader = xmlInputFactory.createXMLStreamReader(is);
         }
@@ -312,7 +305,7 @@ public class BaltimoreEncTest {
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         transformer.transform(new DOMSource(document), new StreamResult(baos));
 
-        XMLStreamReader xmlStreamReader = null;
+        XMLStreamReader xmlStreamReader;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
            xmlStreamReader = xmlInputFactory.createXMLStreamReader(is);
         }
@@ -349,7 +342,7 @@ public class BaltimoreEncTest {
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         transformer.transform(new DOMSource(document), new StreamResult(baos));
 
-        XMLStreamReader xmlStreamReader = null;
+        XMLStreamReader xmlStreamReader;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
            xmlStreamReader = xmlInputFactory.createXMLStreamReader(is);
         }
@@ -384,7 +377,7 @@ public class BaltimoreEncTest {
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         transformer.transform(new DOMSource(document), new StreamResult(baos));
 
-        XMLStreamReader xmlStreamReader = null;
+        XMLStreamReader xmlStreamReader;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
            xmlStreamReader = xmlInputFactory.createXMLStreamReader(is);
         }
@@ -415,7 +408,7 @@ public class BaltimoreEncTest {
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         transformer.transform(new DOMSource(document), new StreamResult(baos));
 
-        XMLStreamReader xmlStreamReader = null;
+        XMLStreamReader xmlStreamReader;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
            xmlStreamReader = xmlInputFactory.createXMLStreamReader(is);
         }
diff --git a/src/test/java/org/apache/xml/security/test/stax/encryption/EncryptionCreationTest.java b/src/test/java/org/apache/xml/security/test/stax/encryption/EncryptionCreationTest.java
index 995bce64..89418280 100644
--- a/src/test/java/org/apache/xml/security/test/stax/encryption/EncryptionCreationTest.java
+++ b/src/test/java/org/apache/xml/security/test/stax/encryption/EncryptionCreationTest.java
@@ -77,7 +77,7 @@ public class EncryptionCreationTest {
 
     private XMLInputFactory xmlInputFactory;
 
-    private boolean isIBMJdK = System.getProperty("java.vendor").contains("IBM");
+    private final boolean isIBMJdK = System.getProperty("java.vendor").contains("IBM");
 
     @BeforeEach
     public void setUp() throws Exception {
@@ -116,7 +116,7 @@ public class EncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -175,7 +175,7 @@ public class EncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -275,7 +275,7 @@ public class EncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -334,7 +334,7 @@ public class EncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -395,7 +395,7 @@ public class EncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -453,7 +453,7 @@ public class EncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -522,7 +522,7 @@ public class EncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -591,7 +591,7 @@ public class EncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -661,7 +661,7 @@ public class EncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -733,7 +733,7 @@ public class EncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -796,7 +796,7 @@ public class EncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -867,7 +867,7 @@ public class EncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -946,7 +946,7 @@ public class EncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -1017,7 +1017,7 @@ public class EncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -1088,7 +1088,7 @@ public class EncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -1155,7 +1155,7 @@ public class EncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -1216,7 +1216,7 @@ public class EncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -1279,7 +1279,7 @@ public class EncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -1344,7 +1344,7 @@ public class EncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -1411,7 +1411,7 @@ public class EncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document =
             XMLUtils.read(new ByteArrayInputStream(baos.toByteArray()), false);
@@ -1472,7 +1472,7 @@ public class EncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -1535,7 +1535,7 @@ public class EncryptionCreationTest {
             xmlStreamWriter.close();
         }
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -1598,7 +1598,7 @@ public class EncryptionCreationTest {
             xmlStreamWriter.close();
         }
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -1658,7 +1658,7 @@ public class EncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
diff --git a/src/test/java/org/apache/xml/security/test/stax/encryption/KeyWrapEncryptionCreationTest.java b/src/test/java/org/apache/xml/security/test/stax/encryption/KeyWrapEncryptionCreationTest.java
index 58c3d621..abe68076 100644
--- a/src/test/java/org/apache/xml/security/test/stax/encryption/KeyWrapEncryptionCreationTest.java
+++ b/src/test/java/org/apache/xml/security/test/stax/encryption/KeyWrapEncryptionCreationTest.java
@@ -66,7 +66,7 @@ public class KeyWrapEncryptionCreationTest {
 
     private static KeyPair rsaKeyPair;
     private static boolean bcInstalled;
-    private XMLInputFactory xmlInputFactory;
+    private final XMLInputFactory xmlInputFactory;
 
     @BeforeAll
     public static void setup() throws Exception {
@@ -144,7 +144,7 @@ public class KeyWrapEncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -212,7 +212,7 @@ public class KeyWrapEncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -280,7 +280,7 @@ public class KeyWrapEncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -346,7 +346,7 @@ public class KeyWrapEncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -411,7 +411,7 @@ public class KeyWrapEncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -476,7 +476,7 @@ public class KeyWrapEncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -541,7 +541,7 @@ public class KeyWrapEncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -611,7 +611,7 @@ public class KeyWrapEncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -681,7 +681,7 @@ public class KeyWrapEncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -751,7 +751,7 @@ public class KeyWrapEncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -821,7 +821,7 @@ public class KeyWrapEncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
diff --git a/src/test/java/org/apache/xml/security/test/stax/encryption/SymmetricEncryptionCreationTest.java b/src/test/java/org/apache/xml/security/test/stax/encryption/SymmetricEncryptionCreationTest.java
index 63c45c16..38a9249e 100644
--- a/src/test/java/org/apache/xml/security/test/stax/encryption/SymmetricEncryptionCreationTest.java
+++ b/src/test/java/org/apache/xml/security/test/stax/encryption/SymmetricEncryptionCreationTest.java
@@ -60,7 +60,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 public class SymmetricEncryptionCreationTest {
 
     private static boolean bcInstalled;
-    private XMLInputFactory xmlInputFactory;
+    private final XMLInputFactory xmlInputFactory;
 
     @BeforeAll
     public static void setup() throws Exception {
@@ -129,7 +129,7 @@ public class SymmetricEncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -190,7 +190,7 @@ public class SymmetricEncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -251,7 +251,7 @@ public class SymmetricEncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -312,7 +312,7 @@ public class SymmetricEncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -373,7 +373,7 @@ public class SymmetricEncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -434,7 +434,7 @@ public class SymmetricEncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -494,7 +494,7 @@ public class SymmetricEncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -557,7 +557,7 @@ public class SymmetricEncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -619,7 +619,7 @@ public class SymmetricEncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -681,7 +681,7 @@ public class SymmetricEncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
@@ -743,7 +743,7 @@ public class SymmetricEncryptionCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
 
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
diff --git a/src/test/java/org/apache/xml/security/test/stax/encryption/XMLEncryption11Test.java b/src/test/java/org/apache/xml/security/test/stax/encryption/XMLEncryption11Test.java
index 921f346a..326beae5 100644
--- a/src/test/java/org/apache/xml/security/test/stax/encryption/XMLEncryption11Test.java
+++ b/src/test/java/org/apache/xml/security/test/stax/encryption/XMLEncryption11Test.java
@@ -85,8 +85,8 @@ public class XMLEncryption11Test {
     private int nodeCount;
 
     private XMLInputFactory xmlInputFactory;
-    private TransformerFactory transformerFactory = TransformerFactory.newInstance();
-    private boolean isIBMJdK = System.getProperty("java.vendor").contains("IBM");
+    private final TransformerFactory transformerFactory = TransformerFactory.newInstance();
+    private final boolean isIBMJdK = System.getProperty("java.vendor").contains("IBM");
 
     @BeforeEach
     public void setUp() throws Exception {
diff --git a/src/test/java/org/apache/xml/security/test/stax/signature/AbstractSignatureCreationTest.java b/src/test/java/org/apache/xml/security/test/stax/signature/AbstractSignatureCreationTest.java
index cf76f2d6..4b990ec9 100644
--- a/src/test/java/org/apache/xml/security/test/stax/signature/AbstractSignatureCreationTest.java
+++ b/src/test/java/org/apache/xml/security/test/stax/signature/AbstractSignatureCreationTest.java
@@ -35,6 +35,7 @@ import org.apache.xml.security.keys.KeyInfo;
 import org.apache.xml.security.signature.XMLSignature;
 import org.apache.xml.security.signature.XMLSignatureInput;
 import org.apache.xml.security.stax.ext.SecurePart;
+import org.apache.xml.security.test.XmlSecTestEnvironment;
 import org.apache.xml.security.test.dom.DSNamespaceContext;
 import org.apache.xml.security.test.stax.utils.XMLSecEventAllocator;
 import org.apache.xml.security.utils.resolver.ResourceResolverContext;
@@ -55,18 +56,12 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
  */
 public class AbstractSignatureCreationTest {
 
-    protected static String BASEDIR;
     protected static boolean bcInstalled;
 
     protected XMLInputFactory xmlInputFactory;
 
     @BeforeAll
     public static void setup() throws Exception {
-        String baseDir = System.getProperty("basedir");
-        if (baseDir == null) {
-            baseDir = new File(".").getCanonicalPath();
-        }
-        BASEDIR = baseDir;
 
         org.apache.xml.security.Init.init();
 
diff --git a/src/test/java/org/apache/xml/security/test/stax/signature/AbstractSignatureVerificationTest.java b/src/test/java/org/apache/xml/security/test/stax/signature/AbstractSignatureVerificationTest.java
index 8ceafb7a..af88a9ab 100644
--- a/src/test/java/org/apache/xml/security/test/stax/signature/AbstractSignatureVerificationTest.java
+++ b/src/test/java/org/apache/xml/security/test/stax/signature/AbstractSignatureVerificationTest.java
@@ -73,7 +73,6 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
  */
 public class AbstractSignatureVerificationTest {
 
-    protected static String BASEDIR;
     protected static boolean bcInstalled;
 
     protected XMLInputFactory xmlInputFactory;
@@ -81,12 +80,6 @@ public class AbstractSignatureVerificationTest {
 
     @BeforeAll
     public static void setup() throws Exception {
-        String baseDir = System.getProperty("basedir");
-        if (baseDir == null) {
-            baseDir = new File(".").getCanonicalPath();
-        }
-        BASEDIR = baseDir;
-
         Init.init(AbstractSignatureVerificationTest.class.getClassLoader().getResource("security-config.xml").toURI(),
                 AbstractSignatureVerificationTest.class);
         org.apache.xml.security.Init.init();
@@ -284,8 +277,7 @@ public class AbstractSignatureVerificationTest {
         }
 
         if (additionalReferences != null) {
-            for (int i = 0; i < additionalReferences.size(); i++) {
-                ReferenceInfo referenceInfo = additionalReferences.get(i);
+            for (ReferenceInfo referenceInfo : additionalReferences) {
                 if (referenceInfo.isBinary()) {
                     sig.addDocument(referenceInfo.getResource(), null, referenceInfo.getDigestMethod());
                 } else {
diff --git a/src/test/java/org/apache/xml/security/test/stax/signature/BaltimoreRemoteReferenceTest.java b/src/test/java/org/apache/xml/security/test/stax/signature/BaltimoreRemoteReferenceTest.java
index b252dc6c..69995196 100644
--- a/src/test/java/org/apache/xml/security/test/stax/signature/BaltimoreRemoteReferenceTest.java
+++ b/src/test/java/org/apache/xml/security/test/stax/signature/BaltimoreRemoteReferenceTest.java
@@ -100,19 +100,19 @@ public class BaltimoreRemoteReferenceTest {
 
     private static final String RSA_MOD_15 =
             "119329599520775465924022606372296074200605535144668022371076132699687141255709737174045123732723708369916816841003864525367987020386846259527839447764154836329045089822539554380766373753731213041983461774133690352071525882671690061465545291631004133563847076169228588340351767773527127920590711638729665138889";
-    public static final String RSA_MOD_23 =
+    private static final String RSA_MOD_23 =
             "120296660343377233375194603471583429595399323282961590789247283561085360125953681886041302745068082823944886660427610854189129731366720128135385763222506487464694459023332289451444021068559820208783293910859489936002104550722931306546063549539810916052250046814103434685758992623250037867084412382118349636279";
     private static final String RSA_PUB =
             "65537";
 
-    private XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
-    private TransformerFactory transformerFactory = TransformerFactory.newInstance();
+    private final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
+    private final TransformerFactory transformerFactory = TransformerFactory.newInstance();
 
     @BeforeAll
     public static void setUp() throws Exception {
         XMLSec.init();
-        Init.init(BaltimoreRemoteReferenceTest.class.getClassLoader().getResource("security-config-allow-same-doc.xml").toURI(),
-                BaltimoreRemoteReferenceTest.class);
+        Init.init(BaltimoreRemoteReferenceTest.class.getClassLoader().getResource("security-config-allow-same-doc.xml")
+            .toURI(), BaltimoreRemoteReferenceTest.class);
         org.apache.xml.security.Init.init();
 
     }
diff --git a/src/test/java/org/apache/xml/security/test/stax/signature/PKSignatureCreationTest.java b/src/test/java/org/apache/xml/security/test/stax/signature/PKSignatureCreationTest.java
index 51a0f81c..3eb1af00 100644
--- a/src/test/java/org/apache/xml/security/test/stax/signature/PKSignatureCreationTest.java
+++ b/src/test/java/org/apache/xml/security/test/stax/signature/PKSignatureCreationTest.java
@@ -97,7 +97,7 @@ public class PKSignatureCreationTest extends AbstractSignatureCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
             document = XMLUtils.read(is, false);
@@ -140,7 +140,7 @@ public class PKSignatureCreationTest extends AbstractSignatureCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
             document = XMLUtils.read(is, false);
@@ -183,7 +183,7 @@ public class PKSignatureCreationTest extends AbstractSignatureCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
             document = XMLUtils.read(is, false);
@@ -226,7 +226,7 @@ public class PKSignatureCreationTest extends AbstractSignatureCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
             document = XMLUtils.read(is, false);
@@ -271,7 +271,7 @@ public class PKSignatureCreationTest extends AbstractSignatureCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
             document = XMLUtils.read(is, false);
@@ -316,7 +316,7 @@ public class PKSignatureCreationTest extends AbstractSignatureCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
             document = XMLUtils.read(is, false);
@@ -361,7 +361,7 @@ public class PKSignatureCreationTest extends AbstractSignatureCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
             document = XMLUtils.read(is, false);
@@ -406,7 +406,7 @@ public class PKSignatureCreationTest extends AbstractSignatureCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
             document = XMLUtils.read(is, false);
@@ -451,7 +451,7 @@ public class PKSignatureCreationTest extends AbstractSignatureCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
             document = XMLUtils.read(is, false);
@@ -496,7 +496,7 @@ public class PKSignatureCreationTest extends AbstractSignatureCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
             document = XMLUtils.read(is, false);
@@ -532,7 +532,7 @@ public class PKSignatureCreationTest extends AbstractSignatureCreationTest {
 
         OutboundXMLSec outboundXMLSec = XMLSec.getOutboundXMLSec(properties);
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        XMLStreamWriter xmlStreamWriter = outboundXMLSec.processOutMessage(baos, "UTF-8");
+        XMLStreamWriter xmlStreamWriter = outboundXMLSec.processOutMessage(baos, StandardCharsets.UTF_8.name());
 
         InputStream sourceDocument =
                 this.getClass().getClassLoader().getResourceAsStream(
@@ -542,7 +542,7 @@ public class PKSignatureCreationTest extends AbstractSignatureCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
             document = XMLUtils.read(is, false);
@@ -585,7 +585,7 @@ public class PKSignatureCreationTest extends AbstractSignatureCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
             document = XMLUtils.read(is, false);
@@ -628,7 +628,7 @@ public class PKSignatureCreationTest extends AbstractSignatureCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
             document = XMLUtils.read(is, false);
@@ -671,7 +671,7 @@ public class PKSignatureCreationTest extends AbstractSignatureCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
             document = XMLUtils.read(is, false);
@@ -714,7 +714,7 @@ public class PKSignatureCreationTest extends AbstractSignatureCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
             document = XMLUtils.read(is, false);
@@ -757,7 +757,7 @@ public class PKSignatureCreationTest extends AbstractSignatureCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
             document = XMLUtils.read(is, false);
@@ -802,7 +802,7 @@ public class PKSignatureCreationTest extends AbstractSignatureCreationTest {
         XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
         xmlStreamWriter.close();
 
-        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8.name()));
+        // System.out.println("Got:\n" + new String(baos.toByteArray(), StandardCharsets.UTF_8));
         Document document = null;
         try (InputStream is = new ByteArrayInputStream(baos.toByteArray())) {
             document = XMLUtils.read(is, false);
diff --git a/src/test/java/org/apache/xml/security/test/stax/signature/SignatureCreationReferenceURIResolverTest.java b/src/test/java/org/apache/xml/security/test/stax/signature/SignatureCreationReferenceURIResolverTest.java
index 4430d677..a8875089 100644
--- a/src/test/java/org/apache/xml/security/test/stax/signature/SignatureCreationReferenceURIResolverTest.java
+++ b/src/test/java/org/apache/xml/security/test/stax/signature/SignatureCreationReferenceURIResolverTest.java
@@ -21,12 +21,16 @@ package org.apache.xml.security.test.stax.signature;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
+import java.io.IOException;
 import java.io.InputStream;
 import java.net.InetSocketAddress;
 import java.net.Proxy;
 import java.nio.charset.StandardCharsets;
+import java.security.GeneralSecurityException;
 import java.security.Key;
 import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
 import java.security.cert.X509Certificate;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -55,6 +59,7 @@ import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.NodeList;
 
+import static org.apache.xml.security.test.XmlSecTestEnvironment.resolveFile;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -78,11 +83,7 @@ public class SignatureCreationReferenceURIResolverTest extends AbstractSignature
         properties.setActions(actions);
 
         // Set the key up
-        KeyStore keyStore = KeyStore.getInstance("jks");
-        keyStore.load(
-                this.getClass().getClassLoader().getResource("transmitter.jks").openStream(),
-                "default".toCharArray()
-        );
+        KeyStore keyStore = getKeyStore();
         Key key = keyStore.getKey("transmitter", "default".toCharArray());
         properties.setSignatureKey(key);
         X509Certificate cert = (X509Certificate) keyStore.getCertificate("transmitter");
@@ -92,8 +93,7 @@ public class SignatureCreationReferenceURIResolverTest extends AbstractSignature
                 new SecurePart(new QName("urn:example:po", "PaymentInfo"), SecurePart.Modifier.Element);
         properties.addSignaturePart(securePart);
 
-        File file = new File(BASEDIR +
-                             "/src/test/resources/ie/baltimore/merlin-examples/merlin-xmlenc-five/plaintext.xml").getCanonicalFile();
+        File file = resolveFile("src/test/resources/ie/baltimore/merlin-examples/merlin-xmlenc-five/plaintext.xml");
         securePart = new SecurePart(file.toURI().toString(),
                 new String[]{"http://www.w3.org/TR/2001/REC-xml-c14n-20010315"},
                 XMLSecurityConstants.NS_XMLDSIG_SHA1);
@@ -129,11 +129,7 @@ public class SignatureCreationReferenceURIResolverTest extends AbstractSignature
         properties.setActions(actions);
 
         // Set the key up
-        KeyStore keyStore = KeyStore.getInstance("jks");
-        keyStore.load(
-                this.getClass().getClassLoader().getResource("transmitter.jks").openStream(),
-                "default".toCharArray()
-        );
+        KeyStore keyStore = getKeyStore();
         Key key = keyStore.getKey("transmitter", "default".toCharArray());
         properties.setSignatureKey(key);
         X509Certificate cert = (X509Certificate) keyStore.getCertificate("transmitter");
@@ -143,8 +139,8 @@ public class SignatureCreationReferenceURIResolverTest extends AbstractSignature
                 new SecurePart(new QName("urn:example:po", "PaymentInfo"), SecurePart.Modifier.Element);
         properties.addSignaturePart(securePart);
 
-        File file = new File(BASEDIR +
-                             "/target/test-classes/org/apache/xml/security/test/stax/signature/SignatureVerificationReferenceURIResolverTest.class").getCanonicalFile();
+        File file = resolveFile(
+            "target/test-classes/org/apache/xml/security/test/stax/signature/SignatureVerificationReferenceURIResolverTest.class");
         securePart = new SecurePart(file.toURI().toString(),
                 null,
                 XMLSecurityConstants.NS_XMLDSIG_SHA1);
@@ -191,11 +187,7 @@ public class SignatureCreationReferenceURIResolverTest extends AbstractSignature
             properties.setActions(actions);
 
             // Set the key up
-            KeyStore keyStore = KeyStore.getInstance("jks");
-            keyStore.load(
-                    this.getClass().getClassLoader().getResource("transmitter.jks").openStream(),
-                    "default".toCharArray()
-            );
+            KeyStore keyStore = getKeyStore();
             Key key = keyStore.getKey("transmitter", "default".toCharArray());
             properties.setSignatureKey(key);
             X509Certificate cert = (X509Certificate) keyStore.getCertificate("transmitter");
@@ -241,11 +233,7 @@ public class SignatureCreationReferenceURIResolverTest extends AbstractSignature
         properties.setActions(actions);
 
         // Set the key up
-        KeyStore keyStore = KeyStore.getInstance("jks");
-        keyStore.load(
-                this.getClass().getClassLoader().getResource("transmitter.jks").openStream(),
-                "default".toCharArray()
-        );
+        KeyStore keyStore = getKeyStore();
         Key key = keyStore.getKey("transmitter", "default".toCharArray());
         properties.setSignatureKey(key);
         X509Certificate cert = (X509Certificate) keyStore.getCertificate("transmitter");
@@ -282,4 +270,13 @@ public class SignatureCreationReferenceURIResolverTest extends AbstractSignature
         // Verify using DOM
         verifyUsingDOM(document, cert, properties.getSignatureSecureParts());
     }
+
+
+    private KeyStore getKeyStore() throws GeneralSecurityException, IOException {
+        KeyStore keyStore = KeyStore.getInstance("jks");
+        try (InputStream inputStream = getClass().getClassLoader().getResource("transmitter.jks").openStream()) {
+            keyStore.load(inputStream, "default".toCharArray());
+        }
+        return keyStore;
+    }
 }
\ No newline at end of file
diff --git a/src/test/java/org/apache/xml/security/test/stax/signature/SignatureCreationTest.java b/src/test/java/org/apache/xml/security/test/stax/signature/SignatureCreationTest.java
index ab7db167..2cac5f34 100644
--- a/src/test/java/org/apache/xml/security/test/stax/signature/SignatureCreationTest.java
+++ b/src/test/java/org/apache/xml/security/test/stax/signature/SignatureCreationTest.java
... 832 lines suppressed ...