diff --git a/spring-integration-file/src/main/java/org/springframework/integration/file/remote/RemoteFileTemplate.java b/spring-integration-file/src/main/java/org/springframework/integration/file/remote/RemoteFileTemplate.java index 786dd619f35..93f9ec30ecf 100644 --- a/spring-integration-file/src/main/java/org/springframework/integration/file/remote/RemoteFileTemplate.java +++ b/spring-integration-file/src/main/java/org/springframework/integration/file/remote/RemoteFileTemplate.java @@ -511,7 +511,7 @@ protected boolean shouldMarkSessionAsDirty(Exception ex) { } @Override - public T executeWithClient(ClientCallback callback) { + public @Nullable T executeWithClient(ClientCallback callback) { throw new UnsupportedOperationException("executeWithClient() is not supported by the generic template"); } diff --git a/spring-integration-file/src/main/java/org/springframework/integration/file/remote/server/FileServerEvent.java b/spring-integration-file/src/main/java/org/springframework/integration/file/remote/server/FileServerEvent.java index b2bdb507387..5a31293b839 100644 --- a/spring-integration-file/src/main/java/org/springframework/integration/file/remote/server/FileServerEvent.java +++ b/spring-integration-file/src/main/java/org/springframework/integration/file/remote/server/FileServerEvent.java @@ -16,6 +16,8 @@ package org.springframework.integration.file.remote.server; +import org.jspecify.annotations.Nullable; + import org.springframework.integration.events.IntegrationEvent; /** @@ -34,7 +36,7 @@ public FileServerEvent(Object source) { super(source); } - public FileServerEvent(Object source, Throwable cause) { + public FileServerEvent(Object source, @Nullable Throwable cause) { super(source, cause); } diff --git a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/config/package-info.java b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/config/package-info.java index 2ea284b8236..15977fa1902 100644 --- a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/config/package-info.java +++ b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/config/package-info.java @@ -1,4 +1,5 @@ /** * Provides classes for configuration - parsers, namespace handlers. */ +@org.jspecify.annotations.NullMarked package org.springframework.integration.sftp.config; diff --git a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/dsl/Sftp.java b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/dsl/Sftp.java index c881cfeff37..a37351f2b35 100644 --- a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/dsl/Sftp.java +++ b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/dsl/Sftp.java @@ -20,6 +20,7 @@ import java.util.Comparator; import org.apache.sshd.sftp.client.SftpClient; +import org.jspecify.annotations.Nullable; import org.springframework.integration.file.remote.MessageSessionCallback; import org.springframework.integration.file.remote.RemoteFileTemplate; @@ -28,7 +29,6 @@ import org.springframework.integration.file.support.FileExistsMode; import org.springframework.integration.sftp.gateway.SftpOutboundGateway; import org.springframework.integration.sftp.session.SftpRemoteFileTemplate; -import org.springframework.lang.Nullable; /** * The factory for SFTP components. diff --git a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/dsl/SftpInboundChannelAdapterSpec.java b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/dsl/SftpInboundChannelAdapterSpec.java index 126d905a742..6e9cda24e8d 100644 --- a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/dsl/SftpInboundChannelAdapterSpec.java +++ b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/dsl/SftpInboundChannelAdapterSpec.java @@ -20,6 +20,7 @@ import java.util.Comparator; import org.apache.sshd.sftp.client.SftpClient; +import org.jspecify.annotations.Nullable; import org.springframework.integration.file.dsl.RemoteFileInboundChannelAdapterSpec; import org.springframework.integration.file.filters.CompositeFileListFilter; @@ -31,7 +32,6 @@ import org.springframework.integration.sftp.filters.SftpSimplePatternFileListFilter; import org.springframework.integration.sftp.inbound.SftpInboundFileSynchronizer; import org.springframework.integration.sftp.inbound.SftpInboundFileSynchronizingMessageSource; -import org.springframework.lang.Nullable; /** * A {@link RemoteFileInboundChannelAdapterSpec} for an {@link SftpInboundFileSynchronizingMessageSource}. diff --git a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/dsl/SftpStreamingInboundChannelAdapterSpec.java b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/dsl/SftpStreamingInboundChannelAdapterSpec.java index ec2172449b7..d581d7c8a23 100644 --- a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/dsl/SftpStreamingInboundChannelAdapterSpec.java +++ b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/dsl/SftpStreamingInboundChannelAdapterSpec.java @@ -19,6 +19,7 @@ import java.util.Comparator; import org.apache.sshd.sftp.client.SftpClient; +import org.jspecify.annotations.Nullable; import org.springframework.integration.file.dsl.RemoteFileStreamingInboundChannelAdapterSpec; import org.springframework.integration.file.filters.CompositeFileListFilter; @@ -29,7 +30,6 @@ import org.springframework.integration.sftp.filters.SftpRegexPatternFileListFilter; import org.springframework.integration.sftp.filters.SftpSimplePatternFileListFilter; import org.springframework.integration.sftp.inbound.SftpStreamingMessageSource; -import org.springframework.lang.Nullable; /** * @author Gary Russell diff --git a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/dsl/package-info.java b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/dsl/package-info.java index d17169b3ed7..a9d344d123a 100644 --- a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/dsl/package-info.java +++ b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/dsl/package-info.java @@ -1,6 +1,5 @@ /** * Provides SFTP Components for the Java DSL. */ -@org.springframework.lang.NonNullApi -@org.springframework.lang.NonNullFields +@org.jspecify.annotations.NullMarked package org.springframework.integration.sftp.dsl; diff --git a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/filters/SftpRegexPatternFileListFilter.java b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/filters/SftpRegexPatternFileListFilter.java index 7b9ac6ff132..3704999b993 100644 --- a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/filters/SftpRegexPatternFileListFilter.java +++ b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/filters/SftpRegexPatternFileListFilter.java @@ -43,7 +43,7 @@ public SftpRegexPatternFileListFilter(Pattern pattern) { @Override protected String getFilename(SftpClient.DirEntry entry) { - return (entry != null) ? entry.getFilename() : null; + return entry.getFilename(); } @Override diff --git a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/filters/SftpSimplePatternFileListFilter.java b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/filters/SftpSimplePatternFileListFilter.java index 2d6a769b5d7..302d347161e 100644 --- a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/filters/SftpSimplePatternFileListFilter.java +++ b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/filters/SftpSimplePatternFileListFilter.java @@ -37,7 +37,7 @@ public SftpSimplePatternFileListFilter(String pattern) { @Override protected String getFilename(SftpClient.DirEntry entry) { - return (entry != null) ? entry.getFilename() : null; + return entry.getFilename(); } @Override diff --git a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/filters/package-info.java b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/filters/package-info.java index f78b5598c48..1c2d7cc0003 100644 --- a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/filters/package-info.java +++ b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/filters/package-info.java @@ -1,4 +1,5 @@ /** * Provides classes supporting SFTP file filtering. */ +@org.jspecify.annotations.NullMarked package org.springframework.integration.sftp.filters; diff --git a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/gateway/SftpOutboundGateway.java b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/gateway/SftpOutboundGateway.java index 7777083e1d4..2695c7f55ed 100644 --- a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/gateway/SftpOutboundGateway.java +++ b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/gateway/SftpOutboundGateway.java @@ -23,6 +23,7 @@ import java.util.stream.Collectors; import org.apache.sshd.sftp.client.SftpClient; +import org.jspecify.annotations.Nullable; import org.springframework.integration.file.remote.AbstractFileInfo; import org.springframework.integration.file.remote.ClientCallbackWithoutResult; @@ -33,7 +34,6 @@ import org.springframework.integration.file.remote.session.SessionFactory; import org.springframework.integration.sftp.session.SftpFileInfo; import org.springframework.integration.sftp.session.SftpRemoteFileTemplate; -import org.springframework.lang.Nullable; /** * Outbound Gateway for performing remote file operations via SFTP. diff --git a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/gateway/package-info.java b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/gateway/package-info.java index 6539c47db16..c2d89a69e75 100644 --- a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/gateway/package-info.java +++ b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/gateway/package-info.java @@ -1,4 +1,5 @@ /** * Provides classes supporting SFTP gateways. */ +@org.jspecify.annotations.NullMarked package org.springframework.integration.sftp.gateway; diff --git a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/inbound/SftpInboundFileSynchronizer.java b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/inbound/SftpInboundFileSynchronizer.java index c3fe45648e2..4b0f67de06f 100644 --- a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/inbound/SftpInboundFileSynchronizer.java +++ b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/inbound/SftpInboundFileSynchronizer.java @@ -47,12 +47,12 @@ public SftpInboundFileSynchronizer(SessionFactory sessionFa @Override protected boolean isFile(SftpClient.DirEntry file) { - return file != null && file.getAttributes().isRegularFile(); + return file.getAttributes().isRegularFile(); } @Override protected String getFilename(SftpClient.DirEntry file) { - return file != null ? file.getFilename() : null; + return file.getFilename(); } @Override diff --git a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/inbound/SftpInboundFileSynchronizingMessageSource.java b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/inbound/SftpInboundFileSynchronizingMessageSource.java index 730b1eae622..5ab858f84eb 100644 --- a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/inbound/SftpInboundFileSynchronizingMessageSource.java +++ b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/inbound/SftpInboundFileSynchronizingMessageSource.java @@ -20,6 +20,7 @@ import java.util.Comparator; import org.apache.sshd.sftp.client.SftpClient; +import org.jspecify.annotations.Nullable; import org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizer; import org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizingMessageSource; @@ -42,7 +43,7 @@ public SftpInboundFileSynchronizingMessageSource(AbstractInboundFileSynchronizer } public SftpInboundFileSynchronizingMessageSource(AbstractInboundFileSynchronizer synchronizer, - Comparator comparator) { + @Nullable Comparator comparator) { super(synchronizer, comparator); } diff --git a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/inbound/SftpStreamingMessageSource.java b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/inbound/SftpStreamingMessageSource.java index eef5d405b10..30703816b12 100644 --- a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/inbound/SftpStreamingMessageSource.java +++ b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/inbound/SftpStreamingMessageSource.java @@ -22,6 +22,7 @@ import java.util.List; import org.apache.sshd.sftp.client.SftpClient; +import org.jspecify.annotations.Nullable; import org.springframework.integration.file.remote.AbstractFileInfo; import org.springframework.integration.file.remote.AbstractRemoteFileStreamingMessageSource; @@ -58,7 +59,7 @@ public SftpStreamingMessageSource(RemoteFileTemplate templa */ @SuppressWarnings("this-escape") public SftpStreamingMessageSource(RemoteFileTemplate template, - Comparator comparator) { + @Nullable Comparator comparator) { super(template, comparator); doSetFilter(new SftpPersistentAcceptOnceFileListFilter(new SimpleMetadataStore(), "sftpStreamingMessageSource")); @@ -80,7 +81,7 @@ protected List> asFileInfoList(Collection< @Override protected boolean isDirectory(SftpClient.DirEntry file) { - return file != null && file.getAttributes().isDirectory(); + return file.getAttributes().isDirectory(); } } diff --git a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/inbound/package-info.java b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/inbound/package-info.java index d1f9565319a..7c6f05491e0 100644 --- a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/inbound/package-info.java +++ b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/inbound/package-info.java @@ -1,4 +1,5 @@ /** * Provides classes supporting inbound endpoints. */ +@org.jspecify.annotations.NullMarked package org.springframework.integration.sftp.inbound; diff --git a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/outbound/package-info.java b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/outbound/package-info.java index ade8d224fb7..da36f5f9ef1 100644 --- a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/outbound/package-info.java +++ b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/outbound/package-info.java @@ -1,4 +1,5 @@ /** * Provides classes for the SFTP outbound channel adapter. */ +@org.jspecify.annotations.NullMarked package org.springframework.integration.sftp.outbound; diff --git a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/server/ApacheMinaSftpEvent.java b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/server/ApacheMinaSftpEvent.java index c6d9a21bf9a..d52472d1a07 100644 --- a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/server/ApacheMinaSftpEvent.java +++ b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/server/ApacheMinaSftpEvent.java @@ -17,6 +17,7 @@ package org.springframework.integration.sftp.server; import org.apache.sshd.server.session.ServerSession; +import org.jspecify.annotations.Nullable; import org.springframework.integration.file.remote.server.FileServerEvent; @@ -35,7 +36,7 @@ public ApacheMinaSftpEvent(Object source) { super(source); } - public ApacheMinaSftpEvent(Object source, Throwable cause) { + public ApacheMinaSftpEvent(Object source, @Nullable Throwable cause) { super(source, cause); } diff --git a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/server/ApacheMinaSftpEventListener.java b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/server/ApacheMinaSftpEventListener.java index 5a7d72e8176..35232e003b2 100644 --- a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/server/ApacheMinaSftpEventListener.java +++ b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/server/ApacheMinaSftpEventListener.java @@ -24,6 +24,7 @@ import org.apache.sshd.server.session.ServerSession; import org.apache.sshd.sftp.server.FileHandle; import org.apache.sshd.sftp.server.SftpEventListener; +import org.jspecify.annotations.Nullable; import org.springframework.beans.factory.BeanNameAware; import org.springframework.beans.factory.InitializingBean; @@ -45,9 +46,10 @@ public class ApacheMinaSftpEventListener implements SftpEventListener, ApplicationEventPublisherAware, BeanNameAware, InitializingBean { + @SuppressWarnings("NullAway.Init") private ApplicationEventPublisher applicationEventPublisher; - private String beanName; + private @Nullable String beanName; @Override public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) { @@ -63,7 +65,7 @@ public void setBeanName(String name) { this.beanName = name; } - public String getBeanName() { + public @Nullable String getBeanName() { return this.beanName; } diff --git a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/server/DirectoryCreatedEvent.java b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/server/DirectoryCreatedEvent.java index f235284b619..28639874ed2 100644 --- a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/server/DirectoryCreatedEvent.java +++ b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/server/DirectoryCreatedEvent.java @@ -19,8 +19,6 @@ import java.nio.file.Path; import java.util.Map; -import org.springframework.lang.Nullable; - /** * An event emitted when a directory is created. * @@ -43,7 +41,6 @@ public DirectoryCreatedEvent(Object source, Path path, Map attrs) { this.attrs = attrs; } - @Nullable public Path getPath() { return this.path; } diff --git a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/server/FileWrittenEvent.java b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/server/FileWrittenEvent.java index 38430ee4742..8c1e6630a40 100644 --- a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/server/FileWrittenEvent.java +++ b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/server/FileWrittenEvent.java @@ -18,7 +18,7 @@ import java.nio.file.Path; -import org.springframework.lang.Nullable; +import org.jspecify.annotations.Nullable; /** * An event that is emitted when a file is written. @@ -48,7 +48,6 @@ public String getRemoteHandle() { return this.remoteHandle; } - @Nullable public Path getFile() { return this.file; } diff --git a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/server/PathMovedEvent.java b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/server/PathMovedEvent.java index b0c1aa44ab1..c88dc049766 100644 --- a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/server/PathMovedEvent.java +++ b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/server/PathMovedEvent.java @@ -18,7 +18,7 @@ import java.nio.file.Path; -import org.springframework.lang.Nullable; +import org.jspecify.annotations.Nullable; /** * An event emitted when a path is moved. @@ -41,12 +41,10 @@ public PathMovedEvent(Object source, Path srcPath, Path dstPath, @Nullable Throw this.dstPath = dstPath; } - @Nullable public Path getSrcPath() { return this.srcPath; } - @Nullable public Path getDstPath() { return this.dstPath; } diff --git a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/server/PathRemovedEvent.java b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/server/PathRemovedEvent.java index 8f24df82261..ed43df0e158 100644 --- a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/server/PathRemovedEvent.java +++ b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/server/PathRemovedEvent.java @@ -18,7 +18,7 @@ import java.nio.file.Path; -import org.springframework.lang.Nullable; +import org.jspecify.annotations.Nullable; /** * An event emitted when a file or directory is removed. @@ -41,7 +41,6 @@ public PathRemovedEvent(Object source, Path path, boolean isDirectory, @Nullable this.isDirectory = isDirectory; } - @Nullable public Path getPath() { return this.path; } diff --git a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/server/package-info.java b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/server/package-info.java index 5bc2acec1e2..bb9434570b4 100644 --- a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/server/package-info.java +++ b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/server/package-info.java @@ -1,4 +1,5 @@ /** * Provides classes related to SFTP servers. */ +@org.jspecify.annotations.NullMarked package org.springframework.integration.sftp.server; diff --git a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/DefaultSftpSessionFactory.java b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/DefaultSftpSessionFactory.java index 43a8b51fecf..73ca9085920 100644 --- a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/DefaultSftpSessionFactory.java +++ b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/DefaultSftpSessionFactory.java @@ -51,6 +51,7 @@ import org.apache.sshd.sftp.client.SftpVersionSelector; import org.apache.sshd.sftp.client.impl.AbstractSftpClient; import org.apache.sshd.sftp.client.impl.DefaultSftpClient; +import org.jspecify.annotations.Nullable; import org.springframework.beans.factory.DisposableBean; import org.springframework.core.io.Resource; @@ -94,27 +95,29 @@ public class DefaultSftpSessionFactory private final boolean isSharedSession; - private final Lock sharedSessionLock; + private final @Nullable Lock sharedSessionLock; private boolean isInnerClient = false; + @SuppressWarnings("NullAway.Init") private String host; private int port = SshConstants.DEFAULT_PORT; + @SuppressWarnings("NullAway.Init") private String user; - private String password; + private @Nullable String password; - private HostConfigEntry hostConfig; + private @Nullable HostConfigEntry hostConfig; - private Resource knownHosts; + private @Nullable Resource knownHosts; - private Resource privateKey; + private @Nullable Resource privateKey; - private String privateKeyPassphrase; + private @Nullable String privateKeyPassphrase; - private UserInteraction userInteraction; + private @Nullable UserInteraction userInteraction; private boolean allowUnknownKeys = false; @@ -122,7 +125,7 @@ public class DefaultSftpSessionFactory private SftpVersionSelector sftpVersionSelector = SftpVersionSelector.CURRENT; - private volatile SftpClient sharedSftpClient; + private volatile @Nullable SftpClient sharedSftpClient; private Consumer sshClientConfigurer = (sshClient) -> { }; diff --git a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/SftpRemoteFileTemplate.java b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/SftpRemoteFileTemplate.java index 3c0b25564dc..28602bbd6df 100644 --- a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/SftpRemoteFileTemplate.java +++ b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/SftpRemoteFileTemplate.java @@ -21,11 +21,11 @@ import org.apache.sshd.sftp.client.SftpClient; import org.apache.sshd.sftp.common.SftpConstants; import org.apache.sshd.sftp.common.SftpException; +import org.jspecify.annotations.Nullable; import org.springframework.integration.file.remote.ClientCallback; import org.springframework.integration.file.remote.RemoteFileTemplate; import org.springframework.integration.file.remote.session.SessionFactory; -import org.springframework.lang.Nullable; /** * SFTP version of {@code RemoteFileTemplate} providing type-safe access to @@ -60,11 +60,11 @@ public SftpRemoteFileTemplate(SessionFactory sessionFactory @SuppressWarnings("unchecked") @Override - public T executeWithClient(final ClientCallback callback) { + public @Nullable T executeWithClient(final ClientCallback callback) { return doExecuteWithClient((ClientCallback) callback); } - protected T doExecuteWithClient(final ClientCallback callback) { + protected @Nullable T doExecuteWithClient(final ClientCallback callback) { return execute(session -> callback.doWithClient((SftpClient) session.getClientInstance())); } @@ -89,14 +89,16 @@ protected boolean isStatusDirty(int status) { return !NOT_DIRTY_STATUSES.contains(status); } - @Nullable - private static SftpException findSftpException(Throwable ex) { - if (ex == null || ex instanceof SftpException) { - return (SftpException) ex; + private static @Nullable SftpException findSftpException(@Nullable Throwable ex) { + if (ex == null) { + return null; } - else { - return findSftpException(ex.getCause()); + + if (ex instanceof SftpException sftpException) { + return sftpException; } + + return findSftpException(ex.getCause()); } } diff --git a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/SftpSession.java b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/SftpSession.java index b5128c1cf6f..a2934a51b5a 100644 --- a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/SftpSession.java +++ b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/SftpSession.java @@ -31,6 +31,7 @@ import org.apache.sshd.sftp.client.SftpClient; import org.apache.sshd.sftp.common.SftpConstants; import org.apache.sshd.sftp.common.SftpException; +import org.jspecify.annotations.Nullable; import org.springframework.integration.file.remote.session.Session; import org.springframework.util.Assert; @@ -92,20 +93,21 @@ public boolean remove(String path) throws IOException { } @Override - public SftpClient.DirEntry[] list(String path) throws IOException { + public SftpClient.DirEntry[] list(@Nullable String path) throws IOException { return doList(path) .toArray(SftpClient.DirEntry[]::new); } @Override - public String[] listNames(String path) throws IOException { + public String[] listNames(@Nullable String path) throws IOException { return doList(path) .map(SftpClient.DirEntry::getFilename) .toArray(String[]::new); } - public Stream doList(String path) throws IOException { - String remotePath = StringUtils.trimTrailingCharacter(path, '/'); + public Stream doList(@Nullable String path) throws IOException { + String validPath = path != null ? path : "."; + String remotePath = StringUtils.trimTrailingCharacter(validPath, '/'); String remoteDir = remotePath; int lastIndex = remotePath.lastIndexOf('/'); if (lastIndex > 0) { @@ -115,9 +117,9 @@ public Stream doList(String path) throws IOException { boolean isPattern = remoteFile != null && remoteFile.contains("*"); if (!isPattern && remoteFile != null) { - SftpClient.Attributes attributes = this.sftpClient.stat(path); + SftpClient.Attributes attributes = this.sftpClient.stat(validPath); if (!attributes.isDirectory()) { - return Stream.of(new SftpClient.DirEntry(remoteFile, path, attributes)); + return Stream.of(new SftpClient.DirEntry(remoteFile, validPath, attributes)); } else { remoteDir = remotePath; diff --git a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/package-info.java b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/package-info.java index 70667be1c9b..5c653d6b5f5 100644 --- a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/package-info.java +++ b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/package-info.java @@ -1,4 +1,5 @@ /** * Provides classes supporting SFTP sessions. */ +@org.jspecify.annotations.NullMarked package org.springframework.integration.sftp.session;