Unable to delete file '/messages/somefile.xml'; FTP command DELE returned unexpected reply code : 550 WSIF JCA Execute of operation ''FTPMove'' failed due to: The IO operation failed. The IO operation failed. The "OPER[NOOP][S->R,T->R]" IO operation for "/messages/somefile.xml" failed. ; nested exception is: BINDING.JCA-11096 The IO operation failed. The IO operation failed',null,null,null);
Looking in the oracle.tip.adapter.ftp.outbound.FTPIoOperation, I find out that "S->R,T->R" means "Source=Remote, Target=Remote - in fact we are moving files on the remote destination only.
and I see in the logs:
Error deleting file from FTP Server. Error deleting file from FTP Server. Unable to delete file from server. Please ensure whether the remote file has delete permission. at oracle.tip.adapter.ftp.FTPClient.deleteFile(FTPClient.java:1362) at oracle.tip.adapter.ftp.FTPAgent.deleteFile(FTPAgent.java:736) at oracle.tip.adapter.ftp.outbound.FTPIoOperation.deleteFile(FTPIoOperation.java:188) at oracle.tip.adapter.ftp.outbound.FTPIoOperation.ioOnly(FTPIoOperation.java:174)
and in this case the code executed is:
if(!alreadyMoved && success && move)
try
{
deleteFile(fs.getSourceAgent(), spec, fInfo);
}
catch(Exception e)
{
throw new FileRetriableResourceException(11096, new Object[] {
(new StringBuilder()).append("OPER[NOOP][").append(mode).append("]").toString(), (new StringBuilder()).append(targetDir).append("/").append(targetFile).toString()
}, e);
}
Error "Please ensure whether the remote file has delete permission" is 11434
The delete is actually done in oracle.tip.adapter.ftp.FTPClient:
public boolean deleteFile(FTPManagedConnection managedConnection, String file) throws IOException, ResourceException { Socket controlSocket = managedConnection.getControlSocket(); String replyStr = dele(controlSocket, file); int rc = getReplyCode(replyStr, m_ftpDesc.ftpHost); log((new StringBuilder()).append("FTPClient.deleteFile(): ").append(replyStr).toString(), 102); if(!m_ftpReplyValidator.isValidDELEReturnCode(rc)) { log((new StringBuilder()).append("Unable to delete file '").append(file).append("'; ").append("FTP command DELE returned unexpected reply code : ").append(rc).toString(), 100); FileResourceException frex = new FileResourceException(11434); frex.setEISErrorCode(String.valueOf(rc)); frex.setEISErrorMessage(replyStr); throw frex; } else { return true; } }
in oracle.tip.adapter.ftp.FTPReply I find out that:
public static final int FILE_UNAVAILABLE = 550;
still no clue on what goes wrong...
I understand that there is a FTP RNTO mode, if you want to enable, specify the JCA activation property UseFtpRenameOperation=true or UseNativeRenameOperation=true.
This will entail using a move() operation rather than a copy followed by a delete (you have to look at FTPIoOperation.ioOnly() method).
PS I discovered after a lot of pain that we were generating twice the same filename on the destination.... not a good idea...
No comments:
Post a Comment