Java Не работает метод подключения SpringCot FTPClient из другого класса - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь создать дополнительный класс, который позаботился бы о подключении и статусе пользователя, но я все еще получаю странную ошибку, которую я не понимаю.

Это мое ´FTPConnection Класс Я создал частный ftpClient с помощью DI (у меня есть аннотация @Bean в основном классе), и я пытаюсь подключиться к серверу, используя этот метод из другого класса

@Autowired
private FTPClient ftpClient;

public void connect() {
    try {
        ftpClient.connect("host");
        ftpClient.login("username", "password");

        int reply = ftpClient.getReplyCode();

        if (!FTPReply.isPositiveCompletion(reply)) {
            ftpClient.disconnect();
            System.err.println("FTP server refused connection.");
            System.exit(1);
        }

    }
    catch (IOException ex) {
        System.out.println(ex.getMessage());
    }
}

И это класс с методами RequestMapping

@PostMapping("/uploadFile")
    public void uploadFile(@RequestParam("file") MultipartFile file) {

        var connection = new FTPConnection();

        try {

            connection.connect();
            System.out.println(connection.isConnected());
            FTPClient ftpClient = connection.getFtpClient();

            ftpClient.changeWorkingDirectory("/usb");
            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

            [...]

И ошибка, которую я получаю:

Servlet.service () для сервлета [dispatcherServlet] в контексте с путем [] вызвала исключение [Ошибка обработки запроса; вложенное исключение - java .lang.NullPointerException] с root java .lang.NullPointerException: пусто в com.tenpetr.FTPFileUploader.FTPConnection.connect (FTPConnection. java: 16) ~ [main /: na] в com.tenpetr.FTPFileUploader.FileTransfer.uploadFile (FileTransfer. java: 29) ~ [main /: na] в java .base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) ~ [na: na] at java .base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl. java: 62) ...

У вас есть идеи, почему я застрял здесь ? Спасибо за ваши советы.

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Определение компонента с одноэлементной областью означает, что контейнер создает один экземпляр этого компонента

отредактировано:

@Bean
@Scope("singleton")
    public FTPClient  ftpClient(){
        return new FTPClient();
    }

Это не будет работать, если вы пытаетесь автоматически подключить интерфейс

0 голосов
/ 22 апреля 2020

Я предполагаю (будет обновляться после получения большего количества данных), что FtpClient неправильно инициализирован и, следовательно, FtpConnection также неправильно инициализирован.

ДЛЯ ОБНОВЛЕНИЯ

...