Technology Blogs by Members
Explore a vibrant mix of technical expertise, industry insights, and tech buzz in member blogs covering SAP products, technology, and events. Get in the mix!
cancel
Showing results for 
Search instead for 
Did you mean: 
Former Member

Hi All,

I wrote this basic code to solve on simple requirement in a File to File scenario where I need to put a to a SFTP location but the SFTP adapter is absent there.

I first tried by using a JAVA mapping code the code for the same is as below. I used the Jsch Library to use the connection.

Here a text file is placed to the target location to notify when a file is placed at SFTP.

Code:

i

import java.io.InputStream;

import java.io.OutputStream;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.HashMap;

import java.util.Map;

import com.jcraft.jsch.Channel;

import com.jcraft.jsch.ChannelSftp;

import com.jcraft.jsch.JSch;

import com.jcraft.jsch.Session;

import com.sap.aii.mapping.api.AbstractTrace;

import com.sap.aii.mapping.api.StreamTransformation;

import com.sap.aii.mapping.api.StreamTransformationException;

public class SFTP implements StreamTransformation{

  private Map map = null;

  private AbstractTrace trace = null;

  public void setParameter(Map arg0) {

    map = arg0;   // Store reference to the mapping parameters

    if (map == null) {

    this.map = new HashMap();

    }

  }

  String SFTPHOST = "<IP or HOST>";

  int SFTPPORT = <PORT>; //usually 22

  String SFTPUSER = "<USERNAME>";

  String SFTPPASS = "<PASSWORD>;

  String destinationDir = "/";

  Session session = null;

  Channel channel = null;

  ChannelSftp channelSftp = null;

  String fileName="";

  /*public static void main(String args[]){  //FOR EXTERNAL STANDALONE TESTING

  try{

  FileInputStream fin = new FileInputStream ("C:/Users/ashutosh.a.upadhyay/My Documents/AA.XLS"); //INPUT FILE (PAYLOAD)

  FileOutputStream fout = new FileOutputStream ("C:/Users/ashutosh.a.upadhyay/My Documents/file.txt"); //OUTPUT FILE (PAYLOAD)

  SFTP mapping = new SFTP();

  mapping.execute(fin, fout);

  }

  catch (Exception e1){

  e1.printStackTrace();

  }

  }*/

  public void execute(InputStream inputstream, OutputStream outputstream) throws StreamTransformationException{

  try{

  Date date = new Date();

  SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

  String formattedDate = sdf.format(date);

  System.out.println(formattedDate);

  fileName = "<Arbitrary name>" + formattedDate;

  //Placing file to SFTP

  JSch jsch = new JSch();

  session = jsch.getSession(SFTPUSER,SFTPHOST,SFTPPORT);

  session.setPassword(SFTPPASS);

  java.util.Properties config = new java.util.Properties();

  config.put("StrictHostKeyChecking", "no");

  System.out.println("Establishing Connection...");

  session.setConfig(config);

  session.connect();

  System.out.println("Session Established");

  channel = session.openChannel("sftp");

  System.out.println("Connecting the channel.." );

  channel.connect();

  channelSftp = (ChannelSftp) channel;

  System.out.println("Hitting the directory" );

  channelSftp.put(inputstream,fileName);

  System.out.println("File placed.." );

  channelSftp.disconnect();

  System.out.println("Channel Disconnected..." );

  session.disconnect();

  sdf = new SimpleDateFormat("MM/dd/yyyy h:mm:ss a");

  formattedDate = sdf.format(date);

  System.out.println(formattedDate);

      String file = "Output file placed to SFTP server at "+formattedDate;

                    outputstream.write(file.getBytes());

          inputstream.close();

  System.out.println("Server Disconnected..." );

  }

  catch(Exception e){

  session.disconnect();

  channelSftp.disconnect();

  e.printStackTrace();

  throw new StreamTransformationException("Exception occured, disconnecting.. "+ e.getMessage(), e);

  }

  }

}

Code to download the file:

import java.io.FileInputStream;

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.InputStream;

import java.io.FileOutputStream;

import java.io.OutputStream;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.HashMap;

import java.util.Map;

import com.jcraft.jsch.Channel;

import com.jcraft.jsch.ChannelSftp;

import com.jcraft.jsch.JSch;

import com.jcraft.jsch.Session;

import com.sap.aii.mapping.api.AbstractTrace;

import com.sap.aii.mapping.api.StreamTransformation;

import com.sap.aii.mapping.api.StreamTransformationException;

public class SFTPDownload implements StreamTransformation{

  private Map map = null;

  private AbstractTrace trace = null;

  public void setParameter(Map arg0) {

    map = arg0;   // Store reference to the mapping parameters

    if (map == null) {

    this.map = new HashMap();

    }

  }

  String SFTPHOST = "<IP or HOST>";

  int SFTPPORT = <PORT>; //usually 22

  String SFTPUSER = "<USERNAME>";

  String SFTPPASS = "<PASSWORD>;

  String destinationDir = "/";

  Session session = null;

  Channel channel = null;

  ChannelSftp channelSftp = null;

  String fileName="";

  /*public static void main(String args[]){  //FOR EXTERNAL STANDALONE TESTING 

  try{ 

  FileInputStream fin = new FileInputStream ("C:/Users/ashutosh.a.upadhyay/My Documents/AA.XLS"); //INPUT FILE (PAYLOAD) 

  FileOutputStream fout = new FileOutputStream ("C:/Users/ashutosh.a.upadhyay/My Documents/SFTP.XLS"); //OUTPUT FILE (PAYLOAD) 

  SFTPDownload mapping = new SFTPDownload(); 

  mapping.execute(fin, fout); 

  } 

  catch (Exception e1){ 

  e1.printStackTrace(); 

  }

  }*/

  public void execute(InputStream inputstream, OutputStream outputstream) throws StreamTransformationException{

  try{

  JSch jsch = new JSch();

  session = jsch.getSession(SFTPUSER,SFTPHOST,SFTPPORT);

  session.setPassword(SFTPPASS);

  java.util.Properties config = new java.util.Properties();

  config.put("StrictHostKeyChecking", "no");

  System.out.println("Establishing Connection...");

  session.setConfig(config);

  session.connect();

  System.out.println("Session Established");

  channel = session.openChannel("sftp");

  System.out.println("Connecting the channel.." );

  channel.connect();

  channelSftp = (ChannelSftp) channel;

  System.out.println("Hitting the directory" );

  channelSftp.cd(destinationDir);

  byte[] buffer = new byte[1024];

  BufferedInputStream bis = new BufferedInputStream(channelSftp.get("SFTP.XLS"));

  //File newFile = new File(+fileName);

  //OutputStream os = new FileOutputStream(newFile);

  BufferedOutputStream bos = new BufferedOutputStream(outputstream);

  int readCount;

  while( (readCount = bis.read(buffer)) > 0) {

  System.out.println("Writing: " );

  bos.write(buffer, 0, readCount);

  }

  bis.close();

  bos.close();

  channelSftp.disconnect();

  System.out.println("Channel Disconnected..." );

  session.disconnect();

                    outputstream.close();

         inputstream.close();

  System.out.println("Server Disconnected..." );

  }

  catch(Exception e){

  session.disconnect();

  channelSftp.disconnect();

  e.printStackTrace();

  throw new StreamTransformationException("Exception occured, disconecting.. "+ e.getMessage(), e);

  }

  }

}

1 Comment
Labels in this area