Oracle java stored procedure 에서 FTP 접속하기 오류 0 1 4,035

by 디비야 [Oracle Admin] [2017.09.16 02:27:08]


안녕하세요,

저는 Oracle java stored procedure 에서 FTP로 접속해 파일을 가져오려고 합니다. 이클립스에서 같은 java 코드로 실행하면 잘 실행 되는데 java 코드를  Oracle java stored procedure 로 만들어 실행하면 아래 처럼 오류가 나옵니다. 그리고 아래 나오는데로 permission 을 부여해 주고 다시 실행하면 계속 돌기만 하고 실행이 안됩니다. (서비스 강제 종료 시킴ㅠㅠ)

해결 방법이 있으면 조언 부탁드립니다.

오류 보고 -
ORA-29532: 자바 호출이 잡혀지지 않은 자바 예외로 인해 종료되었습니다: java.security.AccessControlException: the Permission (java.net.SocketPermission localhost:1024- listen,resolve) has not been granted to USER_XXX. The PL/SQL to grant this is dbms_java.grant_permission( 'USER_XXX', 'SYS:java.net.SocketPermission', 'localhost:1024-', 'listen,resolve' )
29532. 00000 -  "Java call terminated by uncaught Java exception: %s"
*Cause:    A Java exception or error was signaled and could not be
           resolved by the Java code.
*Action:   Modify Java code, if this behavior is not intended.

java 소스

create or replace 
 and compile java source named "FtpTransfer" 
 as 

import java.io.*; 
import java.net.*; 
import org.apache.commons.net.ftp.*; 

public class FtpTransfer 
{ 
    public static void ftpTransfer(String fileFolder)
    {    
        FTPClient ftp = null;
        try {
            ftp = new FTPClient();
            ftp.setControlEncoding("UTF-8");
            ftp.connect("SERVERNAME", PORTNUMBER);
            ftp.login("ID", "PASSWORD");
            ftp.changeWorkingDirectory("/test_dir");

            File f = new File(fileFolder, "test.txt");
            FileOutputStream fos = null;

            try {
                fos = new FileOutputStream(f);
                boolean isSuccess = ftp.retrieveFile("test.txt", fos);

                if (isSuccess) {
                    System.out.println("isSuccess");
                } else {
                    System.out.println("fail");
                }
            } catch(IOException ex) {
                System.out.println(ex.getMessage());
            }             
            finally {
                if (fos != null) {
                    try { fos.close(); } 
                    catch(IOException ex) {System.out.println(ex.getMessage());}
                }
            }
            ftp.logout();
        } catch (SocketException e) {
            System.out.println("Socket:"+e.getMessage());
        } catch (IOException e) {
            System.out.println("IO:");
            e.printStackTrace();
        }
    }
}

 

by 디비야 [2017.09.19 11:49:58]

아래처럼 하면 되네요.ㅋ


ftp.login("ID", "PASSWORD");

ftp.enterRemotePassiveMode();// 추가
ftp.enterLocalPassiveMode();// 추가

ftp.changeWorkingDirectory("/test_dir");

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입