Tenho uma aplicação web que envia arquivos para FTPs externos. Desenvolvi usando o localmente o GlassFish, funcionou normalmente. Ao executar a aplicação em um Sun Application Server de produção, o método ftp.storeFile da API apache.commons.net.ftp.FTPClient retorna “Cannot assign requested address”.
Não há problemas com firewall ou permissões, fiz um teste com uma aplicação Java normal, executei o .jar no servidor e funcinou. Parece ser alguma restrição do Sun Application Server, regra de segurança ou bug.
Fiz o teste de copiar o server.policy do glashfish e colocar no Sun Application Server para teste, já que, a primeira vista, eram bastante parecidos. Não houve problemas na hora de reiniciar o Sun Server, ou seja, o server.policy do Glassfish é compatível, mas mesmo assim o problema não foi resolvido. Sabe se tem outro arquivo de configuração?
Estou lendo a documentação de segurança que me passou pra se acho algo.
É possível usar o FTP Client em modo passivo (ou seja, ele só pode abrir conexões TCP e não abre um socket em modo servidor) É que no modo ativo ele tem de abrir um socket em modo servidor (um ServerSocket) e isso pode dar problemas se o FTPClient for instanciado em mais de uma thread ao mesmo tempo.