From 520c50fd5622f68672124dd365ccf55a097b174b Mon Sep 17 00:00:00 2001 From: kaah Date: Tue, 7 Apr 2026 12:50:03 +0200 Subject: [PATCH 1/7] Removed jAccept from the test classes --- .../bitrepository/common/settings/SettingsLoaderTest.java | 7 ++----- .../protocol/fileexchange/LocalFileExchangeTest.java | 5 ++--- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/bitrepository-core/src/test/java/org/bitrepository/common/settings/SettingsLoaderTest.java b/bitrepository-core/src/test/java/org/bitrepository/common/settings/SettingsLoaderTest.java index fd2b241ac..c4f5d2576 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/common/settings/SettingsLoaderTest.java +++ b/bitrepository-core/src/test/java/org/bitrepository/common/settings/SettingsLoaderTest.java @@ -24,16 +24,13 @@ */ package org.bitrepository.common.settings; -import org.jaccept.structure.ExtendedTestCase; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import java.util.List; -import static java.util.List.of; -import static org.junit.jupiter.api.Assertions.assertEquals; - -public class SettingsLoaderTest extends ExtendedTestCase { +public class SettingsLoaderTest { private static final String PATH_TO_SETTINGS = "settings/xml/bitrepository-devel"; private static final String PATH_TO_EXAMPLE_SETTINGS = "examples/settings"; diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/LocalFileExchangeTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/LocalFileExchangeTest.java index 5c229e9ef..cf9d2f099 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/LocalFileExchangeTest.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/LocalFileExchangeTest.java @@ -5,7 +5,6 @@ import org.bitrepository.protocol.LocalFileExchange; import org.bitrepository.settings.referencesettings.FileExchangeSettings; import org.fusesource.hawtbuf.ByteArrayInputStream; -import org.jaccept.structure.ExtendedTestCase; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Tag; @@ -19,15 +18,15 @@ import java.io.OutputStream; import java.net.MalformedURLException; import java.net.URISyntaxException; -import java.net.URLEncoder; import java.net.URL; +import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.nio.file.FileAlreadyExistsException; import java.nio.file.Files; import java.nio.file.Paths; @TestInstance(TestInstance.Lifecycle.PER_CLASS) -public class LocalFileExchangeTest extends ExtendedTestCase { +public class LocalFileExchangeTest { final static String BASE_FILE_EXCHANGE_DIR = "target/fileexchange/"; private FileExchange exchange; From 3c191cacd3db75cfe71453af1e97601ce32637ad Mon Sep 17 00:00:00 2001 From: kaah Date: Wed, 8 Apr 2026 14:30:50 +0200 Subject: [PATCH 2/7] Started to get the java version of bitrepository upgraded --- .../commandline/CommandLineClient.java | 7 +--- .../protocol/LocalFileExchange.java | 5 ++- .../protocol/http/HttpFileExchange.java | 33 ++++++++++++++--- .../protocol/IntegrationTest.java | 2 +- .../fileexchange/HttpServerConfiguration.java | 14 +++++-- .../fileexchange/HttpServerConnector.java | 12 +++--- .../fileexchange/LocalFileExchangeTest.java | 13 ++++--- .../protocol/http/HttpFileExchangeTest.java | 11 +++--- .../utils/FileExchangeResolverTest.java | 18 +++++---- bitrepository-reference-settings/pom.xml | 8 ++++ pom.xml | 37 ++++++++++++++++--- 11 files changed, 113 insertions(+), 47 deletions(-) diff --git a/bitrepository-client/src/main/java/org/bitrepository/commandline/CommandLineClient.java b/bitrepository-client/src/main/java/org/bitrepository/commandline/CommandLineClient.java index 11ed897a7..64e4550ab 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/commandline/CommandLineClient.java +++ b/bitrepository-client/src/main/java/org/bitrepository/commandline/CommandLineClient.java @@ -47,13 +47,11 @@ import javax.jms.JMSException; import java.io.File; -import java.net.HttpURLConnection; -import java.net.URL; +import java.net.HttpURLConnection;import java.net.URL; import java.security.NoSuchAlgorithmException; import java.time.Duration; import java.util.List; import java.util.Locale; - /** * Defines the common functionality for command-line-clients. */ @@ -325,8 +323,7 @@ protected void deleteFileAfterwards(URL url) { fileexchange.deleteFile(url); } catch (Exception e) { output.error("Issue regarding removing file from server: " + e.getMessage()); - } - } + } } /** * Retrieves the URL for the PutFile operation. diff --git a/bitrepository-core/src/main/java/org/bitrepository/protocol/LocalFileExchange.java b/bitrepository-core/src/main/java/org/bitrepository/protocol/LocalFileExchange.java index fd6e09a09..319e8f3c4 100644 --- a/bitrepository-core/src/main/java/org/bitrepository/protocol/LocalFileExchange.java +++ b/bitrepository-core/src/main/java/org/bitrepository/protocol/LocalFileExchange.java @@ -33,6 +33,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.net.MalformedURLException; +import java.net.URI; import java.net.URISyntaxException; import java.net.URL; @@ -84,8 +85,8 @@ public void getFile(OutputStream out, URL url) throws IOException { public void getFile(File outputFile, String fileAddress) { URL url; try { - url = new URL(fileAddress); - } catch (MalformedURLException e) { + url = new URI(fileAddress).toURL(); + } catch (MalformedURLException | URISyntaxException e) { throw new IllegalStateException("Cannot create the URL.", e); } diff --git a/bitrepository-core/src/main/java/org/bitrepository/protocol/http/HttpFileExchange.java b/bitrepository-core/src/main/java/org/bitrepository/protocol/http/HttpFileExchange.java index b3d1dfa28..23e904ada 100644 --- a/bitrepository-core/src/main/java/org/bitrepository/protocol/http/HttpFileExchange.java +++ b/bitrepository-core/src/main/java/org/bitrepository/protocol/http/HttpFileExchange.java @@ -52,6 +52,7 @@ import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; +import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.net.URLEncoder; @@ -110,12 +111,12 @@ public void getFile(OutputStream out, URL url) throws IOException { public void getFile(File outputFile, String fileAddress) { try { // retrieve the url and the output-stream for the file. - URL url = new URL(fileAddress); + URL url = new URI(fileAddress).toURL(); try (OutputStream out = new BufferedOutputStream(new FileOutputStream(outputFile))) { // download the file. performDownload(out, url); } - } catch (IOException e) { + } catch (IOException | URISyntaxException e) { throw new CoordinationLayerException("Could not download data from '" + fileAddress + "' to the file '" + outputFile.getAbsolutePath() + "'.", e); } @@ -190,11 +191,31 @@ public URL getURL(String filename) throws MalformedURLException { ArgumentValidator.checkNotNullOrEmpty(filename, "String fileName"); ArgumentValidator.checkNotNull(settings, "The ReferenceSettings are missing the settings for the file exchange."); - String urlEncodedFilename = URLEncoder.encode(filename, StandardCharsets.UTF_8); - log.debug("URL for file '{}' encoded to '{}'", filename, urlEncodedFilename); - return new URL(settings.getProtocolType().value(), settings.getServerName(), settings.getPort().intValue(), - settings.getPath() + "/" + urlEncodedFilename); + String path = settings.getPath() == null ? "" : settings.getPath(); + if (!path.startsWith("/")) { + path = "/" + path; + } + if (!path.endsWith("/")) { + path += "/"; + } + + // URI constructor with individual components automatically encodes special characters in the path segment. + // However, it does NOT encode characters like '+' if they are part of the path segment, as they are technically allowed. + // But the existing tests and many WebDAV servers expect '+' to be encoded as %2B in the filename. + // Therefore, we manually encode the filename and then construct the full URI. + String encodedFilename = URLEncoder.encode(filename, StandardCharsets.UTF_8).replace("+", "%20"); + log.debug("URL for file '{}' encoded to '{}'", filename, encodedFilename); + + try { + // First construct the base URI (everything except the filename) to ensure correct encoding of components. + URI baseURI = new URI(settings.getProtocolType().value(), null, settings.getServerName(), + settings.getPort().intValue(), path, null, null); + // Then append the manually encoded filename. toASCIIString() ensures we don't double-encode. + return baseURI.resolve(encodedFilename).toURL(); + } catch (URISyntaxException e) { + throw new MalformedURLException(e.getMessage()); + } } /** diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/IntegrationTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/IntegrationTest.java index 5d89964c9..e97fb1417 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/IntegrationTest.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/IntegrationTest.java @@ -94,7 +94,7 @@ public void initializeSuite(SuiteInfo testInfo) { defaultDownloadFileAddress = defaultFileUrl.toExternalForm(); defaultUploadFileAddress = defaultFileUrl.toExternalForm() + "-" + defaultFileId; } catch (MalformedURLException e) { - throw new RuntimeException("Never happens"); + throw new RuntimeException("Failed to construct default file URLs for test setup", e); } initMessagebus(); } diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/HttpServerConfiguration.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/HttpServerConfiguration.java index 43b15ec10..35b8d2254 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/HttpServerConfiguration.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/HttpServerConfiguration.java @@ -14,7 +14,7 @@ * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Lesser Public License for more details. * * You should have received a copy of the GNU General Lesser Public @@ -27,6 +27,8 @@ import org.bitrepository.settings.referencesettings.FileExchangeSettings; import java.net.MalformedURLException; +import java.net.URI; +import java.net.URISyntaxException; import java.net.URL; /** @@ -65,9 +67,13 @@ public String getHttpServerPath() { * @param filename */ public URL getURL(String filename) throws MalformedURLException { - if (getHttpServerName() == null) { - return new URL(getProtocol(), null, 0, getHttpServerPath() + "/" + filename); + try { + if (getHttpServerName() == null) { + return new URI(getProtocol(), null, null, 0, getHttpServerPath() + "/" + filename, null, null).toURL(); + } + return new URI(getProtocol(), null, getHttpServerName(), getPortNumber(), getHttpServerPath() + "/" + filename, null, null).toURL(); + } catch (URISyntaxException e) { + throw new MalformedURLException(e.getMessage()); } - return new URL(getProtocol(), getHttpServerName(), getPortNumber(), getHttpServerPath() + "/" + filename); } } diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/HttpServerConnector.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/HttpServerConnector.java index 1c0b88136..58696e2f1 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/HttpServerConnector.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/HttpServerConnector.java @@ -28,6 +28,8 @@ import java.io.File; import java.net.MalformedURLException; +import java.net.URI; +import java.net.URISyntaxException; import java.net.URL; /** @@ -66,10 +68,10 @@ public HttpServerConnector(HttpServerConfiguration config) { * @throws MalformedURLException */ public URL getURL(String filename) throws MalformedURLException { - return new URL( - config.getProtocol(), - config.getHttpServerName(), - config.getPortNumber(), - config.getHttpServerPath() + "/" + filename); + try { + return new URI(config.getProtocol(), null, config.getHttpServerName(), config.getPortNumber(), config.getHttpServerPath() + "/" + filename, null, null).toURL(); + } catch (URISyntaxException e) { + throw new MalformedURLException(e.getMessage()); + } } } diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/LocalFileExchangeTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/LocalFileExchangeTest.java index cf9d2f099..05bd7554f 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/LocalFileExchangeTest.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/LocalFileExchangeTest.java @@ -17,6 +17,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.net.MalformedURLException; +import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.net.URLEncoder; @@ -48,11 +49,11 @@ private void createFileExchangeDir() throws IOException { @Test @Tag("regressiontest") - public void getUrlTest() throws MalformedURLException { + public void getUrlTest() throws MalformedURLException, URISyntaxException { String testFile = "getUrlTestfile"; File basedir = new File(BASE_FILE_EXCHANGE_DIR); - URL expectedUrl = new URL("file:" + basedir.getAbsolutePath() + "/" + testFile); + URL expectedUrl = new URI("file:" + basedir.getAbsolutePath() + "/" + testFile).toURL(); URL actualUrl = exchange.getURL(testFile); Assertions.assertEquals(expectedUrl, actualUrl); @@ -73,8 +74,8 @@ public void putFileByFileContainingHashTest() throws Exception { File testFile = createTestFile(testFileLocation, testFileContent); File basedir = new File(BASE_FILE_EXCHANGE_DIR); - URL expectedUrl = new URL("file:" + basedir.getAbsolutePath() + "/" + URLEncoder.encode(testFileName, - StandardCharsets.UTF_8)); + URL expectedUrl = new URI("file:" + basedir.getAbsolutePath() + "/" + URLEncoder.encode(testFileName, + StandardCharsets.UTF_8)).toURL(); URL fileExchangeUrl = exchange.putFile(testFile); Assertions.assertEquals(expectedUrl, fileExchangeUrl); @@ -86,14 +87,14 @@ public void putFileByFileContainingHashTest() throws Exception { } @Test - public void putFileByFileTest() throws IOException { + public void putFileByFileTest() throws IOException, URISyntaxException { String testFileName = "putFileByFileTestFile"; String testFileLocation = "target/" + testFileName; String testFileContent = "lorem ipsum1"; File testFile = createTestFile(testFileLocation, testFileContent); File basedir = new File(BASE_FILE_EXCHANGE_DIR); - URL expectedUrl = new URL("file:" + basedir.getAbsolutePath() + "/" + testFileName); + URL expectedUrl = new URI("file:" + basedir.getAbsolutePath() + "/" + testFileName).toURL(); URL fileExchangeUrl = exchange.putFile(testFile); Assertions.assertEquals(expectedUrl, fileExchangeUrl); diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/http/HttpFileExchangeTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/http/HttpFileExchangeTest.java index acc776d05..8e3f9faff 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/http/HttpFileExchangeTest.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/http/HttpFileExchangeTest.java @@ -31,6 +31,7 @@ import java.math.BigInteger; import java.net.MalformedURLException; +import java.net.URISyntaxException; import java.net.URL; import static org.bitrepository.common.utils.AllureTestUtils.addDescription; @@ -40,7 +41,7 @@ public class HttpFileExchangeTest { @Test @Tag("regressiontest") - public void checkUrlEncodingOfFilenamesTest() throws MalformedURLException { + public void checkUrlEncodingOfFilenamesTest() throws MalformedURLException, URISyntaxException { addDescription("Tests that the filename is url-encoded correctly for a configured webdav server"); Settings mySettings = TestSettingsProvider.reloadSettings("uploadTest"); FileExchangeSettings fileExchangeSettings = mySettings.getReferenceSettings().getFileExchangeSettings(); @@ -49,19 +50,19 @@ public void checkUrlEncodingOfFilenamesTest() throws MalformedURLException { fileExchangeSettings.setPort(BigInteger.valueOf(8000)); fileExchangeSettings.setPath("dav"); HttpFileExchange fe = new HttpFileExchange(fileExchangeSettings); - String serverPathPrefix = fileExchangeSettings.getPath() + "/"; + String serverPathPrefix = "/" + fileExchangeSettings.getPath() + "/"; addStep("Check plain filename (a filename that does not see any changes due to urlencoding", "The filename should be unmodified"); String plainFilename = "testfile"; URL plainFilenameUrl = fe.getURL(plainFilename); - Assertions.assertEquals(serverPathPrefix + plainFilename, plainFilenameUrl.getFile()); + Assertions.assertEquals(serverPathPrefix + plainFilename, plainFilenameUrl.toURI().getRawPath()); addStep("Check that + is encoded as expected", "Filenames with a + is correctly encoded"); String plusFilename = "test+file"; URL plusFilenameUrl = fe.getURL(plusFilename); String expectedEncodedPlusFilename = "test%2Bfile"; - Assertions.assertEquals(serverPathPrefix + expectedEncodedPlusFilename, plusFilenameUrl.getFile()); + Assertions.assertEquals(serverPathPrefix + expectedEncodedPlusFilename, plusFilenameUrl.toURI().getRawPath()); } -} \ No newline at end of file +} diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/utils/FileExchangeResolverTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/utils/FileExchangeResolverTest.java index 9c5a1360c..b23b5afb1 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/utils/FileExchangeResolverTest.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/utils/FileExchangeResolverTest.java @@ -10,6 +10,8 @@ import org.junit.jupiter.api.Test; import java.net.MalformedURLException; +import java.net.URI; +import java.net.URISyntaxException; import java.net.URL; @@ -39,30 +41,30 @@ public void resolveHttpsProtocol() { } @Test - public void resolveFileProtocolURL() throws MalformedURLException { - URL url = new URL("file:///home/user/Desktop/my-cool-file.txt"); + public void resolveFileProtocolURL() throws MalformedURLException, URISyntaxException { + URL url = new URI("file:///home/user/Desktop/my-cool-file.txt").toURL(); FileExchange exchange = FileExchangeResolver.getBasicFileExchangeFromURL(url); Assertions.assertEquals(LocalFileExchange.class, exchange.getClass()); } @Test - public void resolveHttpProtocolURL() throws MalformedURLException { - URL url = new URL("http://localhost:80/myfile.txt"); + public void resolveHttpProtocolURL() throws MalformedURLException, URISyntaxException { + URL url = new URI("http://localhost:80/myfile.txt").toURL(); FileExchange exchange = FileExchangeResolver.getBasicFileExchangeFromURL(url); Assertions.assertEquals(HttpFileExchange.class, exchange.getClass()); } @Test - public void resolveHttpsProtocolURL() throws MalformedURLException { - URL url = new URL("https://localhost:443/myfile.txt"); + public void resolveHttpsProtocolURL() throws MalformedURLException, URISyntaxException { + URL url = new URI("https://localhost:443/myfile.txt").toURL(); FileExchange exchange = FileExchangeResolver.getBasicFileExchangeFromURL(url); Assertions.assertEquals(HttpsFileExchange.class, exchange.getClass()); } @Test - public void resolveBadProtocolURL() throws MalformedURLException { + public void resolveBadProtocolURL() { Assertions.assertThrows(IllegalArgumentException.class, () -> { - URL badURL = new URL("ftp://some/path"); + URL badURL = new URI("ftp://some/path").toURL(); FileExchangeResolver.getBasicFileExchangeFromURL(badURL); }); } diff --git a/bitrepository-reference-settings/pom.xml b/bitrepository-reference-settings/pom.xml index 024bab749..8fbb4e5e9 100644 --- a/bitrepository-reference-settings/pom.xml +++ b/bitrepository-reference-settings/pom.xml @@ -26,6 +26,14 @@ + + org.apache.maven.plugins + maven-compiler-plugin + 3.15.0 + + 21 + + maven-resources-plugin diff --git a/pom.xml b/pom.xml index b3e9594df..faf3ce172 100644 --- a/pom.xml +++ b/pom.xml @@ -381,6 +381,30 @@ + + de.thetaphi + forbiddenapis + 3.8 + + ${maven.compiler.release} + false + + jdk-unsafe + jdk-deprecated + jdk-non-portable + jdk-reflection + + + + + ${api.check.phase} + + check + testCheck + + + + @@ -391,7 +415,7 @@ maven-compiler-plugin - 3.8.1 + 3.15.0 maven-source-plugin @@ -472,6 +496,11 @@ exec-maven-plugin 3.0.0 + + de.thetaphi + forbiddenapis + 3.8 + @@ -553,9 +582,7 @@ - 11 - 11 - + 21 process-classes 31 @@ -572,6 +599,6 @@ UTF-8 1.9.22.1 - 2.20.1 + 2.17.0 From fd3e91983224072221b7d444e2643e1e518f5bfb Mon Sep 17 00:00:00 2001 From: kaah Date: Tue, 28 Apr 2026 12:14:13 +0200 Subject: [PATCH 3/7] Upgraded to java 21 by mostly replacing javax with jakarta. Also there were some other minor changes like URL to URI.toURL. --- .../alarm/BasicAlarmService.java | 3 +-- .../audittrails/AuditTrailService.java | 2 +- bitrepository-client/README.md | 2 +- .../commandline/CommandLineClient.java | 15 +++++++----- bitrepository-core/pom.xml | 6 ++--- .../protocol/activemq/ActiveMQMessageBus.java | 24 +++++++++---------- .../protocol/messagebus/MessageBus.java | 2 +- .../messagebus/MessageBusManager.java | 2 +- .../protocol/messagebus/SimpleMessageBus.java | 2 +- .../protocol/IntegrationTest.java | 9 +++++-- .../protocol/bus/ActiveMQMessageBusTest.java | 12 +++++----- .../protocol/bus/MessageBusWrapper.java | 2 +- .../protocol/bus/MessageReceiver.java | 5 ++-- .../protocol/bus/RawMessagebus.java | 20 ++++++++-------- .../fileexchange/HttpServerConfiguration.java | 11 +++++++-- .../protocol/http/EmbeddedHttpServer.java | 10 ++++---- ...MessageBusNumberOfListenersStressTest.java | 2 +- .../MessageBusNumberOfMessagesStressTest.java | 2 +- ...essageBusTimeToSendMessagesStressTest.java | 4 ++-- .../monitoringservice/MonitoringService.java | 2 +- .../java/org/bitrepository/pillar/Pillar.java | 2 +- .../GetChecksumsRequestHandler.java | 8 +++---- .../GetFileIDsRequestHandler.java | 8 +++---- .../messagehandler/GetFileRequestHandler.java | 11 ++++----- .../pillar/store/ChecksumStorageModel.java | 8 +++---- .../pillar/store/FileStorageModel.java | 8 +++---- .../integration/PillarIntegrationTest.java | 2 +- bitrepository-service/pom.xml | 2 +- .../handler/GetAuditTrailsRequestHandler.java | 10 ++++---- pom.xml | 11 ++++----- 30 files changed, 107 insertions(+), 100 deletions(-) diff --git a/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/BasicAlarmService.java b/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/BasicAlarmService.java index 48addcbb4..082842ebb 100644 --- a/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/BasicAlarmService.java +++ b/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/BasicAlarmService.java @@ -35,7 +35,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.jms.JMSException; import java.util.Collection; import java.util.Date; @@ -81,7 +80,7 @@ public void shutdown() { try { messageBus.close(); // TODO Kill any lingering timer threads - } catch (JMSException e) { + } catch (jakarta.jms.JMSException e) { log.info("Error during shutdown of MessageBus ", e); } } diff --git a/bitrepository-audit-trail-service/src/main/java/org/bitrepository/audittrails/AuditTrailService.java b/bitrepository-audit-trail-service/src/main/java/org/bitrepository/audittrails/AuditTrailService.java index 8b83698ee..e3f79d5e4 100644 --- a/bitrepository-audit-trail-service/src/main/java/org/bitrepository/audittrails/AuditTrailService.java +++ b/bitrepository-audit-trail-service/src/main/java/org/bitrepository/audittrails/AuditTrailService.java @@ -24,6 +24,7 @@ */ package org.bitrepository.audittrails; +import jakarta.jms.JMSException; import org.bitrepository.audittrails.collector.AuditTrailCollector; import org.bitrepository.audittrails.preserver.AuditTrailPreserver; import org.bitrepository.audittrails.store.AuditEventIterator; @@ -40,7 +41,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.jms.JMSException; import java.util.ArrayList; import java.util.Date; import java.util.List; diff --git a/bitrepository-client/README.md b/bitrepository-client/README.md index a6cacf89a..6129166db 100644 --- a/bitrepository-client/README.md +++ b/bitrepository-client/README.md @@ -140,7 +140,7 @@ The below code is a full example of the various parts above. The code will compi import java.net.MalformedURLException; import java.net.URL; -import javax.jms.JMSException; +import jakarta.jms.JMSException; import org.bitrepository.bitrepositoryelements.ChecksumDataForFileTYPE; import org.bitrepository.bitrepositoryelements.ChecksumSpecTYPE; diff --git a/bitrepository-client/src/main/java/org/bitrepository/commandline/CommandLineClient.java b/bitrepository-client/src/main/java/org/bitrepository/commandline/CommandLineClient.java index 64e4550ab..5ba2635e7 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/commandline/CommandLineClient.java +++ b/bitrepository-client/src/main/java/org/bitrepository/commandline/CommandLineClient.java @@ -22,6 +22,7 @@ package org.bitrepository.commandline; +import jakarta.jms.JMSException; import org.apache.commons.cli.Option; import org.apache.commons.cli.ParseException; import org.apache.commons.codec.DecoderException; @@ -45,13 +46,15 @@ import org.bitrepository.protocol.security.SecurityManager; import org.bitrepository.settings.referencesettings.ProtocolType; -import javax.jms.JMSException; import java.io.File; -import java.net.HttpURLConnection;import java.net.URL; +import java.net.HttpURLConnection; +import java.net.URI; +import java.net.URL; import java.security.NoSuchAlgorithmException; import java.time.Duration; import java.util.List; import java.util.Locale; + /** * Defines the common functionality for command-line-clients. */ @@ -341,13 +344,13 @@ protected URL getURLOrUploadFile() { String urlArg = cmdHandler.getOptionValue(Constants.URL_ARG); try { - final URL url = new URL(urlArg); + final URI uri = URI.create(urlArg); - ProtocolType protocolType = ProtocolType.fromValue(url.getProtocol().toUpperCase(Locale.ROOT)); + ProtocolType protocolType = ProtocolType.fromValue(uri.toURL().getProtocol().toUpperCase(Locale.ROOT)); if (protocolType != ProtocolType.FILE) { // Test if URL can actually be opened to exit early // - otherwise checksum pillars will still receive and store checksum. - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + HttpURLConnection connection = (HttpURLConnection) uri.toURL().openConnection(); int responseCode = connection.getResponseCode(); if (responseCode > 399) { @@ -355,7 +358,7 @@ protected URL getURLOrUploadFile() { } } - return url; + return uri.toURL(); } catch (Exception e) { throw new IllegalArgumentException("The URL argument is either empty or not a valid URL: " + urlArg, e); } diff --git a/bitrepository-core/pom.xml b/bitrepository-core/pom.xml index fb37bbec9..e5686ee48 100644 --- a/bitrepository-core/pom.xml +++ b/bitrepository-core/pom.xml @@ -48,12 +48,12 @@ org.bouncycastle bcprov-jdk18on - 1.83 + 1.84 org.bouncycastle bcmail-jdk18on - 1.83 + 1.84 org.apache.activemq @@ -74,7 +74,7 @@ org.eclipse.jetty jetty-server - 11.0.24 + 12.1.8 test diff --git a/bitrepository-core/src/main/java/org/bitrepository/protocol/activemq/ActiveMQMessageBus.java b/bitrepository-core/src/main/java/org/bitrepository/protocol/activemq/ActiveMQMessageBus.java index 52e1f523d..fa091b68f 100644 --- a/bitrepository-core/src/main/java/org/bitrepository/protocol/activemq/ActiveMQMessageBus.java +++ b/bitrepository-core/src/main/java/org/bitrepository/protocol/activemq/ActiveMQMessageBus.java @@ -24,6 +24,16 @@ */ package org.bitrepository.protocol.activemq; +import jakarta.jms.Connection; +import jakarta.jms.DeliveryMode; +import jakarta.jms.Destination; +import jakarta.jms.ExceptionListener; +import jakarta.jms.JMSException; +import jakarta.jms.MessageConsumer; +import jakarta.jms.MessageProducer; +import jakarta.jms.Session; +import jakarta.jms.TextMessage; +import jakarta.jms.Topic; import org.apache.activemq.ActiveMQConnectionFactory; import org.apache.activemq.util.ByteArrayInputStream; import org.bitrepository.bitrepositorymessages.Message; @@ -56,16 +66,6 @@ import org.slf4j.LoggerFactory; import org.xml.sax.SAXException; -import javax.jms.Connection; -import javax.jms.DeliveryMode; -import javax.jms.Destination; -import javax.jms.ExceptionListener; -import javax.jms.JMSException; -import javax.jms.MessageConsumer; -import javax.jms.MessageProducer; -import javax.jms.Session; -import javax.jms.TextMessage; -import javax.jms.Topic; import java.nio.charset.StandardCharsets; import java.util.Collections; import java.util.HashMap; @@ -416,7 +416,7 @@ public void onException(JMSException arg0) { *

* This adapts from general Active MQ messages to the types. */ - private class ActiveMQMessageListener implements javax.jms.MessageListener { + private class ActiveMQMessageListener implements jakarta.jms.MessageListener { /** * The Log. */ @@ -445,7 +445,7 @@ public ActiveMQMessageListener(MessageListener listener) { * @param jmsMessage The message received. */ @Override - public void onMessage(final javax.jms.Message jmsMessage) { + public void onMessage(final jakarta.jms.Message jmsMessage) { String type = null; String text = null; try { diff --git a/bitrepository-core/src/main/java/org/bitrepository/protocol/messagebus/MessageBus.java b/bitrepository-core/src/main/java/org/bitrepository/protocol/messagebus/MessageBus.java index 01c05bfc3..42e9e86cf 100644 --- a/bitrepository-core/src/main/java/org/bitrepository/protocol/messagebus/MessageBus.java +++ b/bitrepository-core/src/main/java/org/bitrepository/protocol/messagebus/MessageBus.java @@ -24,7 +24,7 @@ */ package org.bitrepository.protocol.messagebus; -import javax.jms.JMSException; +import jakarta.jms.JMSException; import java.util.List; diff --git a/bitrepository-core/src/main/java/org/bitrepository/protocol/messagebus/MessageBusManager.java b/bitrepository-core/src/main/java/org/bitrepository/protocol/messagebus/MessageBusManager.java index f391200f6..6556c84bd 100644 --- a/bitrepository-core/src/main/java/org/bitrepository/protocol/messagebus/MessageBusManager.java +++ b/bitrepository-core/src/main/java/org/bitrepository/protocol/messagebus/MessageBusManager.java @@ -24,13 +24,13 @@ */ package org.bitrepository.protocol.messagebus; +import jakarta.jms.JMSException; import org.bitrepository.common.settings.Settings; import org.bitrepository.protocol.activemq.ActiveMQMessageBus; import org.bitrepository.protocol.security.SecurityManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.jms.JMSException; import java.util.HashMap; import java.util.List; import java.util.Map; diff --git a/bitrepository-core/src/main/java/org/bitrepository/protocol/messagebus/SimpleMessageBus.java b/bitrepository-core/src/main/java/org/bitrepository/protocol/messagebus/SimpleMessageBus.java index 23db80c29..e8513abe9 100644 --- a/bitrepository-core/src/main/java/org/bitrepository/protocol/messagebus/SimpleMessageBus.java +++ b/bitrepository-core/src/main/java/org/bitrepository/protocol/messagebus/SimpleMessageBus.java @@ -21,10 +21,10 @@ */ package org.bitrepository.protocol.messagebus; +import jakarta.jms.JMSException; import org.bitrepository.bitrepositorymessages.Message; import org.bitrepository.protocol.MessageContext; -import javax.jms.JMSException; import java.util.HashMap; import java.util.HashSet; import java.util.List; diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/IntegrationTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/IntegrationTest.java index e97fb1417..a5b86a837 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/IntegrationTest.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/IntegrationTest.java @@ -26,6 +26,7 @@ import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.core.util.StatusPrinter; +import jakarta.jms.JMSException; import org.bitrepository.SuiteInfo; import org.bitrepository.SuiteInfoParameterResolver; import org.bitrepository.common.settings.Settings; @@ -42,12 +43,16 @@ import org.bitrepository.protocol.security.DummySecurityManager; import org.bitrepository.protocol.security.SecurityManager; import org.bitrepository.protocol.utils.TestWatcherExtension; -import org.junit.jupiter.api.*; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.TestInfo; +import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.extension.RegisterExtension; import org.slf4j.LoggerFactory; -import javax.jms.JMSException; import java.net.MalformedURLException; import java.net.URL; import java.util.List; diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/ActiveMQMessageBusTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/ActiveMQMessageBusTest.java index b014c45ca..c28c9d395 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/ActiveMQMessageBusTest.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/ActiveMQMessageBusTest.java @@ -21,6 +21,8 @@ */ package org.bitrepository.protocol.bus; +import jakarta.jms.Message; +import jakarta.jms.MessageListener; import org.bitrepository.bitrepositorymessages.DeleteFileRequest; import org.bitrepository.bitrepositorymessages.IdentifyPillarsForDeleteFileRequest; import org.bitrepository.bitrepositorymessages.IdentifyPillarsForDeleteFileResponse; @@ -31,8 +33,6 @@ import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; -import javax.jms.Message; -import javax.jms.MessageListener; import java.util.Arrays; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingDeque; @@ -74,7 +74,7 @@ public final void collectionFilterTest() throws Exception { IdentifyPillarsForDeleteFileRequest identifyRequest = ExampleMessageFactory.createMessage(IdentifyPillarsForDeleteFileRequest.class); identifyRequest.setCollectionID(myCollectionID); - javax.jms.Message msg = rawMessagebus.createMessage(identifyRequest); + jakarta.jms.Message msg = rawMessagebus.createMessage(identifyRequest); rawMessagebus.addHeader(msg, identifyRequest.getClass().getSimpleName(), identifyRequest.getReplyTo(), null, identifyRequest.getCorrelationID()); @@ -135,7 +135,7 @@ public final void toFilterTest() throws Exception { IdentifyPillarsForDeleteFileRequest identifyRequest = ExampleMessageFactory.createMessage(IdentifyPillarsForDeleteFileRequest.class); identifyRequest.setDestination(settingsForTestClient.getCollectionDestination()); - javax.jms.Message msg = rawMessagebus.createMessage(identifyRequest); + jakarta.jms.Message msg = rawMessagebus.createMessage(identifyRequest); rawMessagebus.addHeader(msg, identifyRequest.getClass().getSimpleName(), identifyRequest.getReplyTo(), null, identifyRequest.getCorrelationID()); @@ -159,7 +159,7 @@ public final void toFilterTest() throws Exception { IdentifyPillarsForDeleteFileResponse identifyResponse = ExampleMessageFactory.createMessage(IdentifyPillarsForDeleteFileResponse.class); identifyRequest.setDestination(settingsForTestClient.getCollectionDestination()); - javax.jms.Message response = rawMessagebus.createMessage(identifyResponse); + jakarta.jms.Message response = rawMessagebus.createMessage(identifyResponse); rawMessagebus.addHeader(response, identifyResponse.getClass().getSimpleName(), identifyResponse.getReplyTo(), null, identifyRequest.getCorrelationID()); @@ -172,7 +172,7 @@ public final void toFilterTest() throws Exception { DeleteFileRequest request = ExampleMessageFactory.createMessage(DeleteFileRequest.class); request.setDestination(settingsForTestClient.getCollectionDestination()); - javax.jms.Message rq = rawMessagebus.createMessage(request); + jakarta.jms.Message rq = rawMessagebus.createMessage(request); rawMessagebus.addHeader(rq, request.getClass().getSimpleName(), request.getReplyTo(), null, identifyRequest.getCorrelationID()); diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/MessageBusWrapper.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/MessageBusWrapper.java index eefda35e5..1ec8e832e 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/MessageBusWrapper.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/MessageBusWrapper.java @@ -25,11 +25,11 @@ package org.bitrepository.protocol.bus; import io.qameta.allure.Allure; +import jakarta.jms.JMSException; import org.bitrepository.bitrepositorymessages.Message; import org.bitrepository.protocol.messagebus.MessageBus; import org.bitrepository.protocol.messagebus.MessageListener; -import javax.jms.JMSException; import java.util.List; public class MessageBusWrapper implements MessageBus { diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/MessageReceiver.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/MessageReceiver.java index 9c8c3f08c..eae35cf70 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/MessageReceiver.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/MessageReceiver.java @@ -24,16 +24,15 @@ */ package org.bitrepository.protocol.bus; +import jakarta.jms.ExceptionListener; +import jakarta.jms.JMSException; import org.bitrepository.bitrepositorymessages.Message; import org.bitrepository.protocol.MessageContext; import org.bitrepository.protocol.messagebus.MessageListener; - import org.junit.jupiter.api.Assertions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.jms.ExceptionListener; -import javax.jms.JMSException; import java.util.Collection; import java.util.HashMap; import java.util.Map; diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/RawMessagebus.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/RawMessagebus.java index e6cf85378..84e0c7ce9 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/RawMessagebus.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/RawMessagebus.java @@ -22,6 +22,14 @@ package org.bitrepository.protocol.bus; +import jakarta.jms.Connection; +import jakarta.jms.Destination; +import jakarta.jms.ExceptionListener; +import jakarta.jms.JMSException; +import jakarta.jms.Message; +import jakarta.jms.MessageConsumer; +import jakarta.jms.MessageProducer; +import jakarta.jms.Session; import org.apache.activemq.ActiveMQConnectionFactory; import org.bitrepository.common.JaxbHelper; import org.bitrepository.protocol.CoordinationLayerException; @@ -31,14 +39,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.jms.Connection; -import javax.jms.Destination; -import javax.jms.ExceptionListener; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageConsumer; -import javax.jms.MessageProducer; -import javax.jms.Session; import javax.xml.bind.JAXBException; import java.util.HashMap; import java.util.Map; @@ -138,7 +138,7 @@ private Destination getDestination(String destinationID, Session session) { return destination; } - public synchronized void addListener(String destinationID, javax.jms.MessageListener listener) throws JMSException { + public synchronized void addListener(String destinationID, jakarta.jms.MessageListener listener) throws JMSException { MessageConsumer consumer = getMessageConsumer(destinationID, listener); try { consumer.setMessageListener(listener); @@ -148,7 +148,7 @@ public synchronized void addListener(String destinationID, javax.jms.MessageList } } - private MessageConsumer getMessageConsumer(String destinationID, javax.jms.MessageListener listener) throws JMSException { + private MessageConsumer getMessageConsumer(String destinationID, jakarta.jms.MessageListener listener) throws JMSException { String key = destinationID + "#" + listener.hashCode(); if (!consumers.containsKey(key)) { Destination destination = getDestination(destinationID, consumerSession); diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/HttpServerConfiguration.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/HttpServerConfiguration.java index 35b8d2254..b67c54b8f 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/HttpServerConfiguration.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/HttpServerConfiguration.java @@ -30,6 +30,7 @@ import java.net.URI; import java.net.URISyntaxException; import java.net.URL; +import java.nio.file.Paths; /** * Configuration for {@link HttpServerConnector} objects. Pretty obsoleted as it only delegates to the @@ -68,10 +69,16 @@ public String getHttpServerPath() { */ public URL getURL(String filename) throws MalformedURLException { try { + String path = getHttpServerPath() + "/" + filename; + String scheme = getProtocol().toLowerCase(); if (getHttpServerName() == null) { - return new URI(getProtocol(), null, null, 0, getHttpServerPath() + "/" + filename, null, null).toURL(); + String absolutePath = Paths.get(path).toAbsolutePath().normalize().toString().replace("\\", "/"); + if (!absolutePath.startsWith("/")) { + absolutePath = "/" + absolutePath; + } + return new URI(scheme, null, null, -1, absolutePath, null, null).toURL(); } - return new URI(getProtocol(), null, getHttpServerName(), getPortNumber(), getHttpServerPath() + "/" + filename, null, null).toURL(); + return new URI(scheme, null, getHttpServerName(), getPortNumber(), path, null, null).toURL(); } catch (URISyntaxException e) { throw new MalformedURLException(e.getMessage()); } diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/http/EmbeddedHttpServer.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/http/EmbeddedHttpServer.java index 174f7a954..c70af84a5 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/http/EmbeddedHttpServer.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/http/EmbeddedHttpServer.java @@ -28,8 +28,8 @@ import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; import org.eclipse.jetty.server.handler.DefaultHandler; -import org.eclipse.jetty.server.handler.HandlerList; import org.eclipse.jetty.server.handler.ResourceHandler; +import org.eclipse.jetty.util.resource.ResourceFactory; import java.io.File; @@ -55,16 +55,14 @@ public EmbeddedHttpServer() { server.addConnector(connector); ResourceHandler resource_handler = new ResourceHandler(); - resource_handler.setDirectoriesListed(true); + resource_handler.setDirAllowed(true); resource_handler.setWelcomeFiles(new String[]{ "index.html" }); - File httpServerDir = new File("target/httpserver/dav/"); httpServerDir.mkdirs(); - resource_handler.setResourceBase(httpServerDir.getPath()); + resource_handler.setBaseResource(ResourceFactory.root().newResource(httpServerDir.toPath())); - HandlerList handlers = new HandlerList(); - handlers.setHandlers(new Handler[] { resource_handler, new DefaultHandler() }); + Handler.Sequence handlers = new Handler.Sequence(resource_handler, new DefaultHandler()); server.setHandler(handlers); } diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/performancetest/MessageBusNumberOfListenersStressTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/performancetest/MessageBusNumberOfListenersStressTest.java index 5f65e903f..1024c0a18 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/performancetest/MessageBusNumberOfListenersStressTest.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/performancetest/MessageBusNumberOfListenersStressTest.java @@ -360,7 +360,7 @@ public void stop() { bus.removeListener(queueName, this); try { bus.close(); - } catch (javax.jms.JMSException e) { + } catch (jakarta.jms.JMSException e) { // ignore } } diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/performancetest/MessageBusNumberOfMessagesStressTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/performancetest/MessageBusNumberOfMessagesStressTest.java index 1a16cc500..0b0c24b4d 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/performancetest/MessageBusNumberOfMessagesStressTest.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/performancetest/MessageBusNumberOfMessagesStressTest.java @@ -24,6 +24,7 @@ */ package org.bitrepository.protocol.performancetest; +import jakarta.jms.JMSException; import org.bitrepository.bitrepositorymessages.AlarmMessage; import org.bitrepository.bitrepositorymessages.Message; import org.bitrepository.common.settings.Settings; @@ -43,7 +44,6 @@ import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; -import javax.jms.JMSException; import java.io.IOException; import java.net.ServerSocket; import java.util.Date; diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/performancetest/MessageBusTimeToSendMessagesStressTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/performancetest/MessageBusTimeToSendMessagesStressTest.java index 77dbf4106..afad8a22b 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/performancetest/MessageBusTimeToSendMessagesStressTest.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/performancetest/MessageBusTimeToSendMessagesStressTest.java @@ -233,7 +233,7 @@ public void run() { } finally { try { bus.close(); - } catch (javax.jms.JMSException e) { + } catch (jakarta.jms.JMSException e) { // ignore } } @@ -267,7 +267,7 @@ public void stop() { bus.removeListener(testQueue, this); try { bus.close(); - } catch (javax.jms.JMSException e) { + } catch (jakarta.jms.JMSException e) { // ignore } } diff --git a/bitrepository-monitoring-service/src/main/java/org/bitrepository/monitoringservice/MonitoringService.java b/bitrepository-monitoring-service/src/main/java/org/bitrepository/monitoringservice/MonitoringService.java index 95bb7b29f..d8f340924 100644 --- a/bitrepository-monitoring-service/src/main/java/org/bitrepository/monitoringservice/MonitoringService.java +++ b/bitrepository-monitoring-service/src/main/java/org/bitrepository/monitoringservice/MonitoringService.java @@ -21,6 +21,7 @@ */ package org.bitrepository.monitoringservice; +import jakarta.jms.JMSException; import org.bitrepository.access.AccessComponentFactory; import org.bitrepository.access.getstatus.GetStatusClient; import org.bitrepository.common.settings.Settings; @@ -40,7 +41,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.jms.JMSException; import java.time.Duration; import java.util.Map; diff --git a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/Pillar.java b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/Pillar.java index af73321be..9c0f50351 100644 --- a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/Pillar.java +++ b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/Pillar.java @@ -21,6 +21,7 @@ */ package org.bitrepository.pillar; +import jakarta.jms.JMSException; import org.bitrepository.common.ArgumentValidator; import org.bitrepository.common.settings.Settings; import org.bitrepository.common.utils.SettingsUtils; @@ -37,7 +38,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.jms.JMSException; import javax.xml.datatype.Duration; /** diff --git a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetChecksumsRequestHandler.java b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetChecksumsRequestHandler.java index 91acfa372..27e1dc734 100644 --- a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetChecksumsRequestHandler.java +++ b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetChecksumsRequestHandler.java @@ -56,7 +56,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.net.URL; +import java.net.URI; import java.nio.charset.StandardCharsets; import java.util.Date; @@ -234,13 +234,13 @@ private File makeTemporaryChecksumFile(GetChecksumsRequest request, * @throws IOException If something goes wrong. */ private void uploadFile(File fileToUpload, String url) throws IOException { - URL uploadUrl = new URL(url); + final URI uploadUri = URI.create(url); // Upload the file. log.debug("Uploading file '{}' to {}", fileToUpload.getName(), url); try (InputStream in = new BufferedInputStream(new FileInputStream(fileToUpload))) { - FileExchange fileExchange = FileExchangeResolver.getBasicFileExchangeFromURL(uploadUrl); - fileExchange.putFile(in, uploadUrl); + FileExchange fileExchange = FileExchangeResolver.getBasicFileExchangeFromURL(uploadUri.toURL()); + fileExchange.putFile(in, uploadUri.toURL()); } } diff --git a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileIDsRequestHandler.java b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileIDsRequestHandler.java index 1b91201c0..b30f058f4 100644 --- a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileIDsRequestHandler.java +++ b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileIDsRequestHandler.java @@ -57,7 +57,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.net.URL; +import java.net.URI; import java.nio.charset.StandardCharsets; import java.util.Date; @@ -205,12 +205,12 @@ private File makeTemporaryResultFile(GetFileIDsRequest request, FileIDsData file * @throws IOException If something goes wrong. */ private void uploadFile(File fileToUpload, String url) throws IOException { - URL uploadUrl = new URL(url); + final URI uploadUri = URI.create(url); log.debug("Uploading file '{}' to {}", fileToUpload.getName(), url); try (InputStream in = new BufferedInputStream(new FileInputStream(fileToUpload))) { - FileExchange fileExchange = FileExchangeResolver.getBasicFileExchangeFromURL(uploadUrl); - fileExchange.putFile(in, uploadUrl); + FileExchange fileExchange = FileExchangeResolver.getBasicFileExchangeFromURL(uploadUri.toURL()); + fileExchange.putFile(in, uploadUri.toURL()); } } diff --git a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileRequestHandler.java b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileRequestHandler.java index 9d2828c38..9a2d0fb9c 100644 --- a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileRequestHandler.java +++ b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileRequestHandler.java @@ -48,10 +48,7 @@ import java.io.IOException; import java.io.InputStream; import java.math.BigInteger; -import java.net.URL; -import java.net.URLDecoder; -import java.nio.charset.StandardCharsets; -import java.util.UUID; +import java.net.URI; public class GetFileRequestHandler extends PerformRequestHandler { private final Logger log = LoggerFactory.getLogger(getClass()); @@ -131,9 +128,9 @@ protected void uploadToClient(GetFileRequest message) throws RequestHandlerExcep } log.info("Uploading file '{}' to {}", message.getFileID(), fileAddress); - URL uploadUrl = new URL(fileAddress); - FileExchange fileExchange = FileExchangeResolver.getBasicFileExchangeFromURL(uploadUrl); - fileExchange.putFile(is, uploadUrl); + final URI uploadUri = URI.create(fileAddress); + FileExchange fileExchange = FileExchangeResolver.getBasicFileExchangeFromURL(uploadUri.toURL()); + fileExchange.putFile(is, uploadUri.toURL()); } catch (IOException e) { log.warn("The file '{}' from collection '{}' could not be uploaded at '{}' cause: '{}'", message.getFileID(), message.getCollectionID(), fileAddress, e.getMessage()); diff --git a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/store/ChecksumStorageModel.java b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/store/ChecksumStorageModel.java index e3f19008e..5cc5e121c 100644 --- a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/store/ChecksumStorageModel.java +++ b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/store/ChecksumStorageModel.java @@ -46,7 +46,7 @@ import javax.xml.datatype.XMLGregorianCalendar; import java.io.IOException; -import java.net.URL; +import java.net.URI; import java.util.Date; /** @@ -228,9 +228,9 @@ private String calculateChecksumForFileAtURL(String fileAddress) throws RequestH log.debug("Retrieving the data from URL: '{}'", fileAddress); try { - URL fileURL = new URL(fileAddress); - FileExchange fileExchange = FileExchangeResolver.getBasicFileExchangeFromURL(fileURL); - return ChecksumUtils.generateChecksum(fileExchange.getFile(fileURL), defaultChecksumSpec); + final URI fileURL = URI.create(fileAddress); + FileExchange fileExchange = FileExchangeResolver.getBasicFileExchangeFromURL(fileURL.toURL()); + return ChecksumUtils.generateChecksum(fileExchange.getFile(fileURL.toURL()), defaultChecksumSpec); } catch (IOException e) { String errMsg = "Could not retrieve the file from '" + fileAddress + "'"; log.error(errMsg, e); diff --git a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/store/FileStorageModel.java b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/store/FileStorageModel.java index c8c47dc43..93dfd66a7 100644 --- a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/store/FileStorageModel.java +++ b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/store/FileStorageModel.java @@ -53,7 +53,7 @@ import javax.xml.datatype.Duration; import javax.xml.datatype.XMLGregorianCalendar; import java.io.IOException; -import java.net.URL; +import java.net.URI; import java.time.Instant; import java.util.Date; import java.util.Map; @@ -327,9 +327,9 @@ private void transferFileToTmp(String fileID, String collectionID, String fileAd log.debug("Retrieving the data to be stored from URL: '{}'", fileAddress); try { - URL fileURL = new URL(fileAddress); - FileExchange fileExchange = FileExchangeResolver.getBasicFileExchangeFromURL(fileURL); - fileArchive.downloadFileForValidation(fileID, collectionID, fileExchange.getFile(fileURL)); + final URI fileURI = URI.create(fileAddress); + FileExchange fileExchange = FileExchangeResolver.getBasicFileExchangeFromURL(fileURI.toURL()); + fileArchive.downloadFileForValidation(fileID, collectionID, fileExchange.getFile(fileURI.toURL())); } catch (IOException e) { String errMsg = "Could not retrieve the file from '" + fileAddress + "'"; log.error(errMsg, e); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/PillarIntegrationTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/PillarIntegrationTest.java index 8119a0bd6..c84253c6c 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/PillarIntegrationTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/PillarIntegrationTest.java @@ -22,6 +22,7 @@ package org.bitrepository.pillar.integration; import io.qameta.allure.Allure; +import jakarta.jms.JMSException; import org.bitrepository.SuiteInfo; import org.bitrepository.SuiteInfoParameterResolver; import org.bitrepository.client.conversation.mediator.CollectionBasedConversationMediator; @@ -60,7 +61,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.jms.JMSException; import java.io.IOException; import java.io.InputStream; import java.io.UncheckedIOException; diff --git a/bitrepository-service/pom.xml b/bitrepository-service/pom.xml index 4be6f3eb4..082e2abbf 100644 --- a/bitrepository-service/pom.xml +++ b/bitrepository-service/pom.xml @@ -44,7 +44,7 @@ com.mchange c3p0 - 0.9.5.5 + 0.12.0 javax.servlet diff --git a/bitrepository-service/src/main/java/org/bitrepository/service/contributor/handler/GetAuditTrailsRequestHandler.java b/bitrepository-service/src/main/java/org/bitrepository/service/contributor/handler/GetAuditTrailsRequestHandler.java index 57293a8be..52f85c191 100644 --- a/bitrepository-service/src/main/java/org/bitrepository/service/contributor/handler/GetAuditTrailsRequestHandler.java +++ b/bitrepository-service/src/main/java/org/bitrepository/service/contributor/handler/GetAuditTrailsRequestHandler.java @@ -51,7 +51,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; -import java.net.URL; +import java.net.URI; import java.nio.charset.StandardCharsets; import java.util.Date; @@ -174,11 +174,11 @@ protected void handleUpload(GetAuditTrailsRequest message, AuditTrailDatabaseRes log.debug("Creating audit trail file and uploading it."); try { File fileToUpload = createAuditTrailFile(message, extractedAuditTrails); - URL uploadUrl = new URL(message.getResultAddress()); + URI uploadUri = new URI(message.getResultAddress()); - log.debug("Uploading file '{}' to {}", fileToUpload.getName(), uploadUrl.toExternalForm()); - FileExchange fileExchange = FileExchangeResolver.getBasicFileExchangeFromURL(uploadUrl); - fileExchange.putFile(new FileInputStream(fileToUpload), uploadUrl); + log.debug("Uploading file '{}' to {}", fileToUpload.getName(), uploadUri.toURL().toExternalForm()); + FileExchange fileExchange = FileExchangeResolver.getBasicFileExchangeFromURL(uploadUri.toURL()); + fileExchange.putFile(new FileInputStream(fileToUpload), uploadUri.toURL()); } catch (Exception e) { throw new InvalidMessageException(ResponseCode.FILE_TRANSFER_FAILURE, "Could not handle the creation and upload of the results due to: " + e.getMessage(), e); diff --git a/pom.xml b/pom.xml index faf3ce172..cf219a1a1 100644 --- a/pom.xml +++ b/pom.xml @@ -583,14 +583,13 @@ 21 - process-classes - + process-classes 31 14 - 10.14.2.0 - 5.16.4 - 3.3.6 - 2.12.5 + 10.17.1.0 + 6.2.4 + 4.2.0 + 2.21.2 2.1.6 8.0.1 4.0.1 From 0b659022836f6aeec6f371fb8d725d8e31855b4c Mon Sep 17 00:00:00 2001 From: kaah Date: Wed, 29 Apr 2026 08:55:42 +0200 Subject: [PATCH 4/7] Removed unnecessary public keyword --- .../protocol/fileexchange/LocalFileExchangeTest.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/LocalFileExchangeTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/LocalFileExchangeTest.java index 547f74995..2634fc1d6 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/LocalFileExchangeTest.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/LocalFileExchangeTest.java @@ -28,7 +28,7 @@ @TestInstance(TestInstance.Lifecycle.PER_CLASS) class LocalFileExchangeTest { - final static String BASE_FILE_EXCHANGE_DIR = "target/fileexchange/"; + static final String BASE_FILE_EXCHANGE_DIR = "target/fileexchange/"; private FileExchange exchange; @BeforeAll @@ -107,7 +107,7 @@ void putFileByFileTest() throws IOException, URISyntaxException { } @Test - public void putFileByStreamTest() throws IOException { + void putFileByStreamTest() throws IOException { String testFileName = "putFileByStreamTestFile"; String testFileContent = "lorem ipsum2"; @@ -122,7 +122,7 @@ public void putFileByStreamTest() throws IOException { } @Test - public void getFileByInputStreamTest() throws IOException { + void getFileByInputStreamTest() throws IOException { String testFileName = "getFileByInputStreamTestFile"; String testFileContent = "lorem ipsum3"; String testFileLocation = "target/" + testFileName; @@ -136,7 +136,7 @@ public void getFileByInputStreamTest() throws IOException { } @Test - public void getFileByOutputStreamTest() throws IOException { + void getFileByOutputStreamTest() throws IOException { String testFileName = "getFileByOutputStreamTestFile"; String testFileContent = "lorem ipsum4"; String testFileLocation = "target/" + testFileName; @@ -151,7 +151,7 @@ public void getFileByOutputStreamTest() throws IOException { } @Test - public void getFileByAddressTest() throws IOException { + void getFileByAddressTest() throws IOException { String testFileName = "getFileByAddressTestFile"; String testFileContent = "lorem ipsum5"; String testFileLocation = "target/" + testFileName; @@ -168,7 +168,7 @@ public void getFileByAddressTest() throws IOException { } @Test - public void deleteFileTest() throws IOException, URISyntaxException { + void deleteFileTest() throws IOException, URISyntaxException { String testFileName = "putFileByStreamTestFile"; String testFileContent = "lorem ipsum6"; From 0ede7ea725a73fba0e16d3aac0ac5526fd55302b Mon Sep 17 00:00:00 2001 From: kaah Date: Sun, 3 May 2026 19:52:19 +0200 Subject: [PATCH 5/7] Changes due to review of PR --- .../main/java/org/bitrepository/alarm/BasicAlarmService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/BasicAlarmService.java b/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/BasicAlarmService.java index 615887414..cfbf472f3 100644 --- a/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/BasicAlarmService.java +++ b/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/BasicAlarmService.java @@ -24,6 +24,7 @@ */ package org.bitrepository.alarm; +import jakarta.jms.JMSException; import org.bitrepository.alarm.handling.AlarmHandler; import org.bitrepository.alarm.handling.AlarmMediator; import org.bitrepository.alarm.store.AlarmStore; @@ -80,7 +81,7 @@ public void shutdown() { try { messageBus.close(); // TODO Kill any lingering timer threads - } catch (jakarta.jms.JMSException e) { + } catch (JMSException e) { log.info("Error during shutdown of MessageBus ", e); } } From 3c90592bc69f2d844757d857581962b94fbd6128 Mon Sep 17 00:00:00 2001 From: kaah Date: Tue, 5 May 2026 13:03:10 +0200 Subject: [PATCH 6/7] Primarily made URL changes due to review of PR --- .../preserver/LocalAuditPreservationTest.java | 7 ++--- .../commandline/CommandLineClient.java | 10 +++---- .../protocol/http/HttpFileExchange.java | 18 ++++--------- .../fileexchange/HttpServerConfiguration.java | 3 ++- .../fileexchange/LocalFileExchangeTest.java | 27 ++++++++++++------- ...essageBusTimeToSendMessagesStressTest.java | 15 ++++++++--- .../IntegrityInformationCollectorTest.java | 9 ++++--- .../workflow/step/GetFileStepTest.java | 5 ++-- .../workflow/step/PutFileStepTest.java | 5 ++-- .../func/getfile/GetFileRequestIT.java | 3 ++- 10 files changed, 57 insertions(+), 45 deletions(-) diff --git a/bitrepository-audit-trail-service/src/test/java/org/bitrepository/audittrails/preserver/LocalAuditPreservationTest.java b/bitrepository-audit-trail-service/src/test/java/org/bitrepository/audittrails/preserver/LocalAuditPreservationTest.java index 933eeea80..6e49847e4 100644 --- a/bitrepository-audit-trail-service/src/test/java/org/bitrepository/audittrails/preserver/LocalAuditPreservationTest.java +++ b/bitrepository-audit-trail-service/src/test/java/org/bitrepository/audittrails/preserver/LocalAuditPreservationTest.java @@ -47,6 +47,7 @@ import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.Duration; import java.io.FileInputStream; +import java.net.URI; import java.net.URL; import java.time.Instant; @@ -74,7 +75,7 @@ void setup() throws Exception { settings.getRepositorySettings().getCollections().getCollection().add(c); collectionID = c.getID(); - testUploadUrl = new URL("http://TestURL.com"); + testUploadUrl = new URI("http://TestURL.com").toURL(); threadFactory = new DefaultThreadFactory(this.getClass().getSimpleName(), Thread.NORM_PRIORITY, false); } @@ -121,8 +122,8 @@ public AuditEventIterator answer(InvocationOnMock invocation) { } }).when(store).getAuditTrailsByIterator(ArgumentMatchers.any(), ArgumentMatchers.anyString(), ArgumentMatchers.anyString(), ArgumentMatchers.any(Long.class), ArgumentMatchers.any(), - ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.any(Instant.class), - ArgumentMatchers.any(Instant.class), + ArgumentMatchers.any(), ArgumentMatchers.any(), ArgumentMatchers.isNull(Instant.class), + ArgumentMatchers.isNull(Instant.class), ArgumentMatchers.any(), ArgumentMatchers.any()); preserver.start(); diff --git a/bitrepository-client/src/main/java/org/bitrepository/commandline/CommandLineClient.java b/bitrepository-client/src/main/java/org/bitrepository/commandline/CommandLineClient.java index 5ba2635e7..627b285a3 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/commandline/CommandLineClient.java +++ b/bitrepository-client/src/main/java/org/bitrepository/commandline/CommandLineClient.java @@ -344,13 +344,11 @@ protected URL getURLOrUploadFile() { String urlArg = cmdHandler.getOptionValue(Constants.URL_ARG); try { - final URI uri = URI.create(urlArg); + final URL url = new URI(urlArg).toURL(); - ProtocolType protocolType = ProtocolType.fromValue(uri.toURL().getProtocol().toUpperCase(Locale.ROOT)); + ProtocolType protocolType = ProtocolType.fromValue(url.getProtocol().toUpperCase(Locale.ROOT)); if (protocolType != ProtocolType.FILE) { - // Test if URL can actually be opened to exit early - // - otherwise checksum pillars will still receive and store checksum. - HttpURLConnection connection = (HttpURLConnection) uri.toURL().openConnection(); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); int responseCode = connection.getResponseCode(); if (responseCode > 399) { @@ -358,7 +356,7 @@ protected URL getURLOrUploadFile() { } } - return uri.toURL(); + return url; } catch (Exception e) { throw new IllegalArgumentException("The URL argument is either empty or not a valid URL: " + urlArg, e); } diff --git a/bitrepository-core/src/main/java/org/bitrepository/protocol/http/HttpFileExchange.java b/bitrepository-core/src/main/java/org/bitrepository/protocol/http/HttpFileExchange.java index 23e904ada..d8bb28f6d 100644 --- a/bitrepository-core/src/main/java/org/bitrepository/protocol/http/HttpFileExchange.java +++ b/bitrepository-core/src/main/java/org/bitrepository/protocol/http/HttpFileExchange.java @@ -55,8 +55,6 @@ import java.net.URI; import java.net.URISyntaxException; import java.net.URL; -import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; public class HttpFileExchange implements FileExchange { private final Logger log = LoggerFactory.getLogger(getClass()); @@ -100,7 +98,7 @@ public URL putFile(File dataFile) { throw new CoordinationLayerException("Could not upload the file '" + dataFile.getAbsolutePath() + "' to the server.", e); } - } + } @Override public void getFile(OutputStream out, URL url) throws IOException { @@ -200,19 +198,13 @@ public URL getURL(String filename) throws MalformedURLException { path += "/"; } - // URI constructor with individual components automatically encodes special characters in the path segment. - // However, it does NOT encode characters like '+' if they are part of the path segment, as they are technically allowed. - // But the existing tests and many WebDAV servers expect '+' to be encoded as %2B in the filename. - // Therefore, we manually encode the filename and then construct the full URI. - String encodedFilename = URLEncoder.encode(filename, StandardCharsets.UTF_8).replace("+", "%20"); - log.debug("URL for file '{}' encoded to '{}'", filename, encodedFilename); - try { - // First construct the base URI (everything except the filename) to ensure correct encoding of components. URI baseURI = new URI(settings.getProtocolType().value(), null, settings.getServerName(), settings.getPort().intValue(), path, null, null); - // Then append the manually encoded filename. toASCIIString() ensures we don't double-encode. - return baseURI.resolve(encodedFilename).toURL(); + String encodedFilename = new URI(null, null, null, -1, "/" + filename, null, null) + .getRawPath().substring(1).replace("+", "%2B"); + + return new URI(baseURI.toASCIIString() + encodedFilename).toURL(); } catch (URISyntaxException e) { throw new MalformedURLException(e.getMessage()); } diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/HttpServerConfiguration.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/HttpServerConfiguration.java index b67c54b8f..585879d91 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/HttpServerConfiguration.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/HttpServerConfiguration.java @@ -31,6 +31,7 @@ import java.net.URISyntaxException; import java.net.URL; import java.nio.file.Paths; +import java.util.Locale; /** * Configuration for {@link HttpServerConnector} objects. Pretty obsoleted as it only delegates to the @@ -70,7 +71,7 @@ public String getHttpServerPath() { public URL getURL(String filename) throws MalformedURLException { try { String path = getHttpServerPath() + "/" + filename; - String scheme = getProtocol().toLowerCase(); + String scheme = getProtocol().toLowerCase(Locale.ROOT); if (getHttpServerName() == null) { String absolutePath = Paths.get(path).toAbsolutePath().normalize().toString().replace("\\", "/"); if (!absolutePath.startsWith("/")) { diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/LocalFileExchangeTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/LocalFileExchangeTest.java index 2634fc1d6..2c87fc75b 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/LocalFileExchangeTest.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/LocalFileExchangeTest.java @@ -20,7 +20,6 @@ import java.net.URI; import java.net.URISyntaxException; import java.net.URL; -import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.nio.file.FileAlreadyExistsException; import java.nio.file.Files; @@ -53,11 +52,14 @@ void getUrlTest() throws MalformedURLException, URISyntaxException { String testFile = "getUrlTestfile"; File basedir = new File(BASE_FILE_EXCHANGE_DIR); - URL expectedUrl = new URI("file:" + basedir.getAbsolutePath() + "/" + testFile).toURL(); + URI baseURI = new URI("file", null, basedir.getAbsolutePath() + "/", null); + String encodedFilename = new URI(null, null, null, -1, "/" + testFile, null, null) + .getRawPath().substring(1).replace("+", "%2B"); + URL expectedUrl = new URI(baseURI.toASCIIString() + encodedFilename).toURL(); URL actualUrl = exchange.getURL(testFile); Assertions.assertEquals(expectedUrl, actualUrl); - File actualFile = new File(actualUrl.getFile()); + File actualFile = new File(actualUrl.toURI()); Assertions.assertFalse(actualFile.exists()); } @@ -74,8 +76,10 @@ void putFileByFileContainingHashTest() throws Exception { File testFile = createTestFile(testFileLocation, testFileContent); File basedir = new File(BASE_FILE_EXCHANGE_DIR); - URL expectedUrl = new URI("file:" + basedir.getAbsolutePath() + "/" + URLEncoder.encode(testFileName, - StandardCharsets.UTF_8)).toURL(); + URI baseURI = new URI("file", null, basedir.getAbsolutePath() + "/", null); + String encodedFilename = new URI(null, null, null, -1, "/" + testFileName, null, null) + .getRawPath().substring(1).replace("+", "%2B"); + URL expectedUrl = new URI(baseURI.toASCIIString() + encodedFilename).toURL(); URL fileExchangeUrl = exchange.putFile(testFile); Assertions.assertEquals(expectedUrl, fileExchangeUrl); @@ -94,12 +98,15 @@ void putFileByFileTest() throws IOException, URISyntaxException { File testFile = createTestFile(testFileLocation, testFileContent); File basedir = new File(BASE_FILE_EXCHANGE_DIR); - URL expectedUrl = new URI("file:" + basedir.getAbsolutePath() + "/" + testFileName).toURL(); + URI baseURI = new URI("file", null, basedir.getAbsolutePath() + "/", null); + String encodedFilename = new URI(null, null, null, -1, "/" + testFileName, null, null) + .getRawPath().substring(1).replace("+", "%2B"); + URL expectedUrl = new URI(baseURI.toASCIIString() + encodedFilename).toURL(); URL fileExchangeUrl = exchange.putFile(testFile); Assertions.assertEquals(expectedUrl, fileExchangeUrl); - File actualFile = new File(fileExchangeUrl.getFile()); + File actualFile = new File(fileExchangeUrl.toURI()); Assertions.assertTrue(actualFile.exists()); String fileExchangeContent = readTestFileContent(actualFile); Assertions.assertEquals(testFileContent, fileExchangeContent); @@ -107,7 +114,7 @@ void putFileByFileTest() throws IOException, URISyntaxException { } @Test - void putFileByStreamTest() throws IOException { + void putFileByStreamTest() throws IOException, URISyntaxException { String testFileName = "putFileByStreamTestFile"; String testFileContent = "lorem ipsum2"; @@ -115,7 +122,7 @@ void putFileByStreamTest() throws IOException { URL fileExchangeUrl = exchange.getURL(testFileName); exchange.putFile(is, fileExchangeUrl); - File fileExchangeFile = new File(fileExchangeUrl.getFile()); + File fileExchangeFile = new File(fileExchangeUrl.toURI()); String fileExchangeContent = readTestFileContent(fileExchangeFile); Assertions.assertEquals(testFileContent, fileExchangeContent); fileExchangeFile.delete(); @@ -176,7 +183,7 @@ void deleteFileTest() throws IOException, URISyntaxException { URL fileExchangeUrl = exchange.getURL(testFileName); exchange.putFile(is, fileExchangeUrl); - File fileExchangeFile = new File(fileExchangeUrl.getFile()); + File fileExchangeFile = new File(fileExchangeUrl.toURI()); Assertions.assertTrue(fileExchangeFile.exists()); exchange.deleteFile(fileExchangeUrl); Assertions.assertFalse(fileExchangeFile.exists()); diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/performancetest/MessageBusTimeToSendMessagesStressTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/performancetest/MessageBusTimeToSendMessagesStressTest.java index 4a877107f..6ce41eadd 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/performancetest/MessageBusTimeToSendMessagesStressTest.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/performancetest/MessageBusTimeToSendMessagesStressTest.java @@ -31,7 +31,6 @@ import org.bitrepository.protocol.MessageContext; import org.bitrepository.protocol.activemq.ActiveMQMessageBus; import org.bitrepository.protocol.bus.LocalActiveMQBroker; -import org.bitrepository.protocol.bus.MessageBusConfigurationFactory; import org.bitrepository.protocol.message.ExampleMessageFactory; import org.bitrepository.protocol.messagebus.MessageBus; import org.bitrepository.protocol.messagebus.MessageListener; @@ -78,16 +77,25 @@ void initializeSettings() { */ @Test @Tag("StressTest") - void SendManyMessagesDistributed() { + void SendManyMessagesDistributed() throws Exception { addDescription("Tests how fast a given number of messages can be handled."); addStep("Define constants", "This should not be possible to fail."); addStep("Make configuration for the messagebus.", "Both should be created."); - MessageBusConfiguration conf = MessageBusConfigurationFactory.createDefaultConfiguration(); + MessageBusConfiguration conf = new MessageBusConfiguration(); + int port = getFreePort(); + conf.setURL("tcp://localhost:" + port); + settings.getRepositorySettings().getProtocolSettings().setMessageBusConfiguration(conf); + LocalActiveMQBroker broker = new LocalActiveMQBroker(conf); + Assertions.assertNotNull(broker); + SecurityManager securityManager = new DummySecurityManager(); CountMessagesListener listener = null; try { + addStep("Starting the broker.", "Should be allowed"); + broker.start(); + addStep("Initialise the message-listener", "Should be allowed."); listener = new CountMessagesListener(securityManager); @@ -117,6 +125,7 @@ void SendManyMessagesDistributed() { if (listener != null) { listener.stop(); } + broker.stop(); } } diff --git a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/collector/IntegrityInformationCollectorTest.java b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/collector/IntegrityInformationCollectorTest.java index 65b6460d7..5a762973d 100644 --- a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/collector/IntegrityInformationCollectorTest.java +++ b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/collector/IntegrityInformationCollectorTest.java @@ -35,6 +35,7 @@ import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; +import java.net.URI; import java.net.URL; import java.util.List; @@ -141,7 +142,7 @@ void testCollectorGetFile() throws Exception { addDescription("Tests that the collector calls the GetFileClient"); addStep("Define variables", "No errors"); String auditTrailInformation = "audit trail for this test"; - URL uploadUrl = new URL("http://localhost:80/dav/test.txt"); + URL uploadUrl = new URI("http://localhost:80/dav/test.txt").toURL(); addStep("Setup a GetFileClient for test purpose.", "Should be OK."); GetFileClient getFileClient = mock(GetFileClient.class); @@ -173,7 +174,7 @@ void testCollectorPutFile() throws Exception { addDescription("Tests that the collector calls the PutFileClient"); addStep("Define variables", "No errors"); String auditTrailInformation = "audit trail for this test"; - URL uploadUrl = new URL("http://localhost:80/dav/test.txt"); + URL uploadUrl = new URI("http://localhost:80/dav/test.txt").toURL(); ChecksumDataForFileTYPE csForValidation = new ChecksumDataForFileTYPE(); addStep("Setup a PutFileClient for test purpose.", "Should be OK."); @@ -257,7 +258,7 @@ void testCollectorHandleGetFileClientFailures() throws Exception { addDescription("Test that the IntegrityInformationCollector works as a fault-barrier."); addStep("Define variables", "No errors"); String auditTrailInformation = "audit trail for this test"; - URL uploadUrl = new URL("http://localhost:80/dav/test.txt"); + URL uploadUrl = new URI("http://localhost:80/dav/test.txt").toURL(); addStep("Setup a GetFileClient for test purpose, and ensure that it throws an error when called.", "Should be OK."); @@ -280,7 +281,7 @@ void testCollectorHandlePutFileClientFailures() throws Exception { addDescription("Test that the IntegrityInformationCollector works as a fault-barrier."); addStep("Define variables", "No errors"); String auditTrailInformation = "audit trail for this test"; - URL uploadUrl = new URL("http://localhost:80/dav/test.txt"); + URL uploadUrl = new URI("http://localhost:80/dav/test.txt").toURL(); ChecksumDataForFileTYPE csForValidation = new ChecksumDataForFileTYPE(); addStep("Setup a PutFileClient for test purpose, and ensure that it throws an error when called.", diff --git a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/GetFileStepTest.java b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/GetFileStepTest.java index 042b39d70..918630262 100644 --- a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/GetFileStepTest.java +++ b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/GetFileStepTest.java @@ -30,6 +30,7 @@ import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; +import java.net.URI; import java.net.URL; import static org.bitrepository.common.utils.AllureTestUtils.addDescription; @@ -60,7 +61,7 @@ public Void answer(InvocationOnMock invocation) { eq(TEST_COLLECTION), eq(TEST_FILE_1), any(URL.class), any(EventHandler.class), anyString()); IntegrityWorkflowContext context = new IntegrityWorkflowContext(settings, collector, model, alerter, auditManager); - URL uploadUrl = new URL("http://localhost/dav/test.txt"); + URL uploadUrl = new URI("http://localhost/dav/test.txt").toURL(); GetFileStep step = new GetFileStep(context, TEST_COLLECTION, TEST_FILE_1, uploadUrl); step.performStep(); @@ -87,7 +88,7 @@ public Void answer(InvocationOnMock invocation) { IntegrityWorkflowContext context = new IntegrityWorkflowContext(settings, collector, model, alerter, auditManager); - URL uploadUrl = new URL("http://localhost/dav/test.txt"); + URL uploadUrl = new URI("http://localhost/dav/test.txt").toURL(); GetFileStep step = new GetFileStep(context, TEST_COLLECTION, TEST_FILE_1, uploadUrl); step.performStep(); diff --git a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/PutFileStepTest.java b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/PutFileStepTest.java index 1fb96fd91..7c31b30b6 100644 --- a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/PutFileStepTest.java +++ b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/PutFileStepTest.java @@ -31,6 +31,7 @@ import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; +import java.net.URI; import java.net.URL; import static org.bitrepository.common.utils.AllureTestUtils.addDescription; @@ -63,7 +64,7 @@ public Void answer(InvocationOnMock invocation) { any(EventHandler.class), anyString()); IntegrityWorkflowContext context = new IntegrityWorkflowContext(settings, collector, model, alerter, auditManager); - URL uploadUrl = new URL("http://localhost/dav/test.txt"); + URL uploadUrl = new URI("http://localhost/dav/test.txt").toURL(); PutFileStep step = new PutFileStep(context, TEST_COLLECTION, TEST_FILE_1, uploadUrl, TEST_CHECKSUM); step.performStep(); @@ -91,7 +92,7 @@ public Void answer(InvocationOnMock invocation) { any(EventHandler.class), anyString()); IntegrityWorkflowContext context = new IntegrityWorkflowContext(settings, collector, model, alerter, auditManager); - URL uploadUrl = new URL("http://localhost/dav/test.txt"); + URL uploadUrl = new URI("http://localhost/dav/test.txt").toURL(); PutFileStep step = new PutFileStep(context, TEST_COLLECTION, TEST_FILE_1, uploadUrl, TEST_CHECKSUM); step.performStep(); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfile/GetFileRequestIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfile/GetFileRequestIT.java index 3002caf9a..c5b841298 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfile/GetFileRequestIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfile/GetFileRequestIT.java @@ -27,6 +27,7 @@ import java.io.IOException; import java.io.InputStream; import java.math.BigInteger; +import java.net.URI; import java.net.URL; import java.nio.charset.StandardCharsets; import java.util.concurrent.TimeUnit; @@ -44,7 +45,7 @@ class GetFileRequestIT extends PillarFunctionTest { void initialiseReferenceTest() throws Exception { String pillarDestination = lookupGetFileDestination(); msgFactory = new GetFileMessageFactory(collectionID, settingsForTestClient, getPillarID(), pillarDestination); - testFileURL = new URL(defaultFileUrl.toExternalForm() + System.currentTimeMillis()); + testFileURL = new URI(defaultFileUrl.toExternalForm() + System.currentTimeMillis()).toURL(); fe = ProtocolComponentFactory.getInstance().getFileExchange(settingsForCUT); } From f401bbe1e2bd5d667b78e69e303e2c8507099338 Mon Sep 17 00:00:00 2001 From: kaah Date: Tue, 5 May 2026 14:27:59 +0200 Subject: [PATCH 7/7] Changes due to review of PR --- .../fileexchange/HttpServerConfiguration.java | 18 ++++++++++-------- .../GetChecksumsRequestHandler.java | 10 ++++++---- .../messagehandler/GetFileRequestHandler.java | 10 +++++++--- .../handler/GetAuditTrailsRequestHandler.java | 9 +++++---- 4 files changed, 28 insertions(+), 19 deletions(-) diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/HttpServerConfiguration.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/HttpServerConfiguration.java index 585879d91..4689d95f2 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/HttpServerConfiguration.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/HttpServerConfiguration.java @@ -45,7 +45,7 @@ public HttpServerConfiguration(FileExchangeSettings fileExchangeSettings) { } /** - * Prefix to use when working with files on the http server. The prefix is used to distinguish between different + * Prefix to use when working with files on the http server. The prefix is used to distinguish between different * users/processes working with the server in parallel */ public String getProtocol() { @@ -70,16 +70,18 @@ public String getHttpServerPath() { */ public URL getURL(String filename) throws MalformedURLException { try { - String path = getHttpServerPath() + "/" + filename; String scheme = getProtocol().toLowerCase(Locale.ROOT); - if (getHttpServerName() == null) { - String absolutePath = Paths.get(path).toAbsolutePath().normalize().toString().replace("\\", "/"); - if (!absolutePath.startsWith("/")) { - absolutePath = "/" + absolutePath; - } + String serverName = getHttpServerName(); + String serverPath = getHttpServerPath() == null ? "" : getHttpServerPath(); + + if (serverName == null) { + String absolutePath = Paths.get(serverPath, filename).toAbsolutePath().normalize().toUri().getPath(); return new URI(scheme, null, null, -1, absolutePath, null, null).toURL(); } - return new URI(scheme, null, getHttpServerName(), getPortNumber(), path, null, null).toURL(); + + // For remote URLs, paths must always use forward slashes + String path = serverPath + "/" + filename; + return new URI(scheme, null, serverName, getPortNumber(), path, null, null).toURL(); } catch (URISyntaxException e) { throw new MalformedURLException(e.getMessage()); } diff --git a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetChecksumsRequestHandler.java b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetChecksumsRequestHandler.java index b84ecf11d..51cac2a9c 100644 --- a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetChecksumsRequestHandler.java +++ b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetChecksumsRequestHandler.java @@ -58,6 +58,8 @@ import java.io.InputStream; import java.io.OutputStream; import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; import java.nio.charset.StandardCharsets; import java.time.Instant; @@ -239,14 +241,14 @@ private File makeTemporaryChecksumFile(GetChecksumsRequest request, * @param url The location where the file should be uploaded. * @throws IOException If something goes wrong. */ - private void uploadFile(File fileToUpload, String url) throws IOException { - final URI uploadUri = URI.create(url); + private void uploadFile(File fileToUpload, String url) throws IOException, URISyntaxException { + final URL uploadUrl = new URI(url).toURL(); // Upload the file. log.debug("Uploading file '{}' to {}", fileToUpload.getName(), url); try (InputStream in = new BufferedInputStream(new FileInputStream(fileToUpload))) { - FileExchange fileExchange = FileExchangeResolver.getBasicFileExchangeFromURL(uploadUri.toURL()); - fileExchange.putFile(in, uploadUri.toURL()); + FileExchange fileExchange = FileExchangeResolver.getBasicFileExchangeFromURL(uploadUrl); + fileExchange.putFile(in, uploadUrl); } } diff --git a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileRequestHandler.java b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileRequestHandler.java index 9a2d0fb9c..9c2973697 100644 --- a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileRequestHandler.java +++ b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileRequestHandler.java @@ -49,6 +49,8 @@ import java.io.InputStream; import java.math.BigInteger; import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; public class GetFileRequestHandler extends PerformRequestHandler { private final Logger log = LoggerFactory.getLogger(getClass()); @@ -128,14 +130,16 @@ protected void uploadToClient(GetFileRequest message) throws RequestHandlerExcep } log.info("Uploading file '{}' to {}", message.getFileID(), fileAddress); - final URI uploadUri = URI.create(fileAddress); - FileExchange fileExchange = FileExchangeResolver.getBasicFileExchangeFromURL(uploadUri.toURL()); - fileExchange.putFile(is, uploadUri.toURL()); + final URL uploadUrl = new URI(fileAddress).toURL(); + FileExchange fileExchange = FileExchangeResolver.getBasicFileExchangeFromURL(uploadUrl); + fileExchange.putFile(is, uploadUrl); } catch (IOException e) { log.warn("The file '{}' from collection '{}' could not be uploaded at '{}' cause: '{}'", message.getFileID(), message.getCollectionID(), fileAddress, e.getMessage()); throw new InvalidMessageException(ResponseCode.FILE_TRANSFER_FAILURE, "Could not deliver file to address '" + fileAddress + "', cause: " + e.getMessage(), e); + } catch (URISyntaxException e) { + throw new RuntimeException(e); } } diff --git a/bitrepository-service/src/main/java/org/bitrepository/service/contributor/handler/GetAuditTrailsRequestHandler.java b/bitrepository-service/src/main/java/org/bitrepository/service/contributor/handler/GetAuditTrailsRequestHandler.java index 2b515ac9d..98eeb974e 100644 --- a/bitrepository-service/src/main/java/org/bitrepository/service/contributor/handler/GetAuditTrailsRequestHandler.java +++ b/bitrepository-service/src/main/java/org/bitrepository/service/contributor/handler/GetAuditTrailsRequestHandler.java @@ -52,6 +52,7 @@ import java.io.IOException; import java.io.OutputStream; import java.net.URI; +import java.net.URL; import java.nio.charset.StandardCharsets; import java.time.Instant; @@ -174,11 +175,11 @@ protected void handleUpload(GetAuditTrailsRequest message, AuditTrailDatabaseRes log.debug("Creating audit trail file and uploading it."); try { File fileToUpload = createAuditTrailFile(message, extractedAuditTrails); - URI uploadUri = new URI(message.getResultAddress()); + URL uploadUrl = new URI(message.getResultAddress()).toURL(); - log.debug("Uploading file '{}' to {}", fileToUpload.getName(), uploadUri.toURL().toExternalForm()); - FileExchange fileExchange = FileExchangeResolver.getBasicFileExchangeFromURL(uploadUri.toURL()); - fileExchange.putFile(new FileInputStream(fileToUpload), uploadUri.toURL()); + log.debug("Uploading file '{}' to {}", fileToUpload.getName(), uploadUrl.toExternalForm()); + FileExchange fileExchange = FileExchangeResolver.getBasicFileExchangeFromURL(uploadUrl); + fileExchange.putFile(new FileInputStream(fileToUpload), uploadUrl); } catch (Exception e) { throw new InvalidMessageException(ResponseCode.FILE_TRANSFER_FAILURE, "Could not handle the creation and upload of the results due to: " + e.getMessage(), e);