Quantcast
Channel: SCN : Document List - Process Integration (PI) & SOA Middleware
Viewing all articles
Browse latest Browse all 571

Java Mapping code for SFTP connection in SAP PI 7.0

$
0
0

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);

  }

  }

}


Viewing all articles
Browse latest Browse all 571

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>