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 a61ebeff1..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; @@ -35,7 +36,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.jms.JMSException; import java.time.Instant; import java.util.Collection; 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 c2b39c003..9a0ee88e1 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,11 +41,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.jms.JMSException; -import java.time.Instant; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.time.Instant; /** * Class to expose the functionality of the AuditTrailService. 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/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 11ed897a7..627b285a3 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,9 +46,9 @@ 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.URI; import java.net.URL; import java.security.NoSuchAlgorithmException; import java.time.Duration; @@ -325,8 +326,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. @@ -344,12 +344,10 @@ protected URL getURLOrUploadFile() { String urlArg = cmdHandler.getOptionValue(Constants.URL_ARG); try { - final URL url = new URL(urlArg); + final URL url = new URI(urlArg).toURL(); 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) url.openConnection(); int responseCode = connection.getResponseCode(); 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/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/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/http/HttpFileExchange.java b/bitrepository-core/src/main/java/org/bitrepository/protocol/http/HttpFileExchange.java index b3d1dfa28..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 @@ -52,10 +52,9 @@ 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; -import java.nio.charset.StandardCharsets; public class HttpFileExchange implements FileExchange { private final Logger log = LoggerFactory.getLogger(getClass()); @@ -99,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 { @@ -110,12 +109,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 +189,25 @@ 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 += "/"; + } + + try { + URI baseURI = new URI(settings.getProtocolType().value(), null, settings.getServerName(), + settings.getPort().intValue(), path, null, null); + 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/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 5d89964c9..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; @@ -94,7 +99,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/bus/ActiveMQMessageBusTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/ActiveMQMessageBusTest.java index a2874deb2..139c7dbf0 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; @@ -75,7 +75,7 @@ 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()); @@ -136,7 +136,7 @@ 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()); @@ -160,7 +160,7 @@ 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()); @@ -173,7 +173,7 @@ 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 2f44293fa..d11bcbf53 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 43b15ec10..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 @@ -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,7 +27,11 @@ import org.bitrepository.settings.referencesettings.FileExchangeSettings; import java.net.MalformedURLException; +import java.net.URI; +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 @@ -41,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() { @@ -65,9 +69,21 @@ public String getHttpServerPath() { * @param filename */ public URL getURL(String filename) throws MalformedURLException { - if (getHttpServerName() == null) { - return new URL(getProtocol(), null, 0, getHttpServerPath() + "/" + filename); + try { + String scheme = getProtocol().toLowerCase(Locale.ROOT); + 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(); + } + + // 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()); } - 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 69940eb52..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 @@ -17,9 +17,9 @@ 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; import java.nio.charset.StandardCharsets; import java.nio.file.FileAlreadyExistsException; import java.nio.file.Files; @@ -27,7 +27,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 @@ -48,15 +48,18 @@ private void createFileExchangeDir() throws IOException { @Test @Tag("regressiontest") - void getUrlTest() throws MalformedURLException { + void getUrlTest() throws MalformedURLException, URISyntaxException { String testFile = "getUrlTestfile"; File basedir = new File(BASE_FILE_EXCHANGE_DIR); - URL expectedUrl = new URL("file:" + basedir.getAbsolutePath() + "/" + testFile); + 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()); } @@ -73,8 +76,10 @@ 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)); + 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); @@ -86,19 +91,22 @@ void putFileByFileContainingHashTest() throws Exception { } @Test - void putFileByFileTest() throws IOException { + 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); + 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); @@ -106,7 +114,7 @@ void putFileByFileTest() throws IOException { } @Test - void putFileByStreamTest() throws IOException { + void putFileByStreamTest() throws IOException, URISyntaxException { String testFileName = "putFileByStreamTestFile"; String testFileContent = "lorem ipsum2"; @@ -114,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(); @@ -175,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/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/http/HttpFileExchangeTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/http/HttpFileExchangeTest.java index 97eccd072..a4a86e570 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 @@ class HttpFileExchangeTest { @Test @Tag("regressiontest") - void checkUrlEncodingOfFilenamesTest() throws MalformedURLException { + 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 @@ 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/performancetest/MessageBusNumberOfListenersStressTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/performancetest/MessageBusNumberOfListenersStressTest.java index f4207924f..55af2fd1b 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 7c6c63ee5..6a0bd20d1 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.time.Instant; 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 76976c81b..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(); } } @@ -234,7 +243,7 @@ public void run() { } finally { try { bus.close(); - } catch (javax.jms.JMSException e) { + } catch (jakarta.jms.JMSException e) { // ignore } } @@ -266,7 +275,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-core/src/test/java/org/bitrepository/protocol/utils/FileExchangeResolverTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/utils/FileExchangeResolverTest.java index ff77d6dbf..3b87d035b 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 @@ void resolveHttpsProtocol() { } @Test - void resolveFileProtocolURL() throws MalformedURLException { - URL url = new URL("file:///home/user/Desktop/my-cool-file.txt"); + 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 - void resolveHttpProtocolURL() throws MalformedURLException { - URL url = new URL("http://localhost:80/myfile.txt"); + 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 - void resolveHttpsProtocolURL() throws MalformedURLException { - URL url = new URL("https://localhost:443/myfile.txt"); + 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 - void resolveBadProtocolURL() throws MalformedURLException { + 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-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-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 d8be89ef4..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 @@ -57,6 +57,8 @@ import java.io.IOException; 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,8 +241,8 @@ 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 { - URL uploadUrl = new URL(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); 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 e305d849b..1a5a7e696 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 @@ -58,7 +58,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.time.Instant; @@ -210,12 +210,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..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 @@ -48,10 +48,9 @@ import java.io.IOException; import java.io.InputStream; import java.math.BigInteger; +import java.net.URI; +import java.net.URISyntaxException; import java.net.URL; -import java.net.URLDecoder; -import java.nio.charset.StandardCharsets; -import java.util.UUID; public class GetFileRequestHandler extends PerformRequestHandler { private final Logger log = LoggerFactory.getLogger(getClass()); @@ -131,7 +130,7 @@ protected void uploadToClient(GetFileRequest message) throws RequestHandlerExcep } log.info("Uploading file '{}' to {}", message.getFileID(), fileAddress); - URL uploadUrl = new URL(fileAddress); + final URL uploadUrl = new URI(fileAddress).toURL(); FileExchange fileExchange = FileExchangeResolver.getBasicFileExchangeFromURL(uploadUrl); fileExchange.putFile(is, uploadUrl); } catch (IOException e) { @@ -139,6 +138,8 @@ protected void uploadToClient(GetFileRequest message) throws RequestHandlerExcep 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-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 81b8a9008..70dd397dc 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 @@ -44,8 +44,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.xml.datatype.XMLGregorianCalendar; import java.io.IOException; -import java.net.URL; +import java.net.URI; +import java.util.Date; import java.time.Instant; /** @@ -227,9 +229,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 f4e1b9d46..cf0eb58a4 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 @@ -51,7 +51,7 @@ import javax.xml.datatype.Duration; import java.io.IOException; -import java.net.URL; +import java.net.URI; import java.time.Instant; import java.util.Map; import java.util.concurrent.ConcurrentSkipListMap; @@ -316,9 +316,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 2d7e22bd4..2bb5492d2 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-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); } 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/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 c6838cb14..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 @@ -51,6 +51,7 @@ import java.io.FileOutputStream; 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,7 +175,7 @@ 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()); + URL uploadUrl = new URI(message.getResultAddress()).toURL(); log.debug("Uploading file '{}' to {}", fileToUpload.getName(), uploadUrl.toExternalForm()); FileExchange fileExchange = FileExchangeResolver.getBasicFileExchangeFromURL(uploadUrl); diff --git a/pom.xml b/pom.xml index ad70a0b75..cf219a1a1 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,17 +582,14 @@ - 11 - 11 - - process-classes - + 21 + 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