The need:
I want to write data into compressed and normal format as well. When I'll have to write data into compressed format "useCompression" will be sent as "true" and "useCompression" will be false when data needs to be stored in normal(as it is given to the Writer class) format.
The problem here is, how will I identify whether the data is compressed or not later when Reader class is trying to read the data?
So, to solve the problem, I am writing "1" into file if is "useCompression" is true and "0" if "useCompression" is false.
writing is fine, but when we try to skip the first element using "fIn.skip(1)" cause it is the identifier and not actual data, it is leaving behind some garbage value.
For, example, I am trying to write "2019-07-31" into a file and "useCompression" is false, so my file will hold "02019-07-31" and post "fIn.skip(1)" call it should hold "2019-07-31" but it is holding "^#2019-07-31".
Please help me figure out what I am doing wrong here
I've tried to update Reader class's constructor as:
public Reader(String key)
{
mKey = key;
try {
FileInputStream fIn = new FileInputStream(streamFileForKey(key));
byte[] firstByte = new byte[1];
int read = fIn.read(firstByte);
boolean shouldUseDecompression = (1 == firstByte[0]);
if (shouldUseDecompression) {
mFin = new GZIPInputStream(fIn);
}
else {
mFin = fIn;
}
}
catch (Exception e) {
System.out.println("Failed to open (r) key " + key + " exception : " + e);
}
}
But it does not solve the problem.
The actual code is:
import java.io.InputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.DataOutputStream;
import java.util.zip.GZIPOutputStream;
import java.util.zip.GZIPInputStream;
public class forStackOverflow {
public static void main(String []args) {
// Write to normal file
mReader1 = new Reader(mInputFileName);
mWriter1 = new Writer(mOutputFilename1, false);
int availableBytes = mReader1.availableBytes();
int readBytes = 1000;
while (availableBytes > 0)
{
if (availableBytes >= 1000) {
availableBytes = availableBytes - readBytes;
}
else {
readBytes = availableBytes;
availableBytes = availableBytes - readBytes;
}
mWriter1.write(mReader1.read(readBytes), 0, readBytes);
}
mReader1.close();
mWriter1.close();
}
private static File streamFileForKey(String key)
{
return new File(key);
}
static String mInputFileName = "~/Downloads/inputStream.txt";
static String mOutputFilename1 = "~/Downloads/outputStream.txt";
static Reader mReader1;
static Writer mWriter1;
private static class Writer
{
public Writer(String key, boolean useCompression) {
mKey = key;
try {
FileOutputStream fileOutput = new FileOutputStream(streamFileForKey(key));
if (useCompression) {
fileOutput.write(1);
gOutputStream = new GZIPOutputStream(fileOutput);
}
else {
fileOutput.write(0);
gOutputStream = new DataOutputStream(fileOutput);
}
}
catch (Exception e) {
System.out.println("Got error while opening stream for " + mKey + ". Ex: " + e);
}
}
public boolean write(byte[] bytes, int pos, int len)
{
boolean retVal = true;
if (gOutputStream == null) {
return false;
}
try {
gOutputStream.write(bytes, pos, len);
retVal = true;
}
catch (Exception e) {
System.out.println("Failed to write " + len + " bytes to key " +
mKey + e);
retVal = false;
}
return retVal;
}
public void close()
{
if (gOutputStream != null) {
try {
gOutputStream.close();
}
catch (Exception e) {
System.out.println("Failed to close key " + mKey + e);
}
gOutputStream = null;
}
}
private String mKey;
private OutputStream gOutputStream;
}
private static class Reader
{
public Reader(String key)
{
mKey = key;
try {
FileInputStream fIn = new FileInputStream(streamFileForKey(key));
if (shouldUseDecompression()) {
long skipped = fIn.skip(1);
mFin = new GZIPInputStream(fIn);
}
else {
long skipped = fIn.skip(1);
mFin = fIn;
}
}
catch (Exception e) {
System.out.println("Failed to open (r) key " + key + " exception : " + e);
}
}
public byte[] read(int len)
{
if (mFin == null) {
return null;
}
byte[] b = null;
try {
b = new byte[len];
int read;
read = mFin.read(b, 0, len);
if (read <= 0) {
return null;
}
}
catch (Exception e) {
System.out.println("Failed to read " + len + " bytes from key " +
mKey + " exception : " + e);
}
return b;
}
public void close()
{
if (mFin != null) {
try {
mFin.close();
}
catch (Exception e) {
System.out.println("Failed to close key " + mKey + " exception : " + e);
}
mFin = null;
}
}
private boolean shouldUseDecompression()
{
boolean retVal = false;
try {
FileInputStream fIn = new FileInputStream(streamFileForKey(mKey));
byte[] firstByte = new byte[1];
int read = fIn.read(firstByte);
// If first byte is `1` the we need to use decompression on it.
retVal = (1 == firstByte[0]);
fIn.close();
}
catch(Exception e) {
System.out.println("Exception in shouldUseDecompression() : " + e);
retVal = false;
}
return retVal;
}
public int availableBytes()
{
int available = 0;
try {
if (mFin != null) {
available = mFin.available();
}
}
catch (IOException e) {
System.out.println("Failed to read available bytes for " + mKey + ". Exception : " + e);
}
return available;
}
private String mKey;
private InputStream mFin;
}
}
The expected result should be, post "fIn.skip(1)" call file should hold "2019-07-31" and not "^#2019-07-31".
After a lot of struggle, I found out that it was the expected result.
^# was nothing but the binary 0 I was writing from Writer class's constructor incase useCompression was false.
From line fileOutput.write(0);.
The file which i am trying to store in the back end is not a valid directory.. I think the code has a Unix directory config which i need to change to make this work in your windows.
how i can identify the directory where the file is trying to be stored.
i am getting the following error.
[com.keenan.oacommon.forms.services.FormServiceImpl] [checkFileDtlPathCreateIfNotExists] - strFileMstPath is not valid
[INFO ] [java.lang.Class] [processListFiles] - strFinalUploadPath []
[INFO ] [com.keenan.oacommon.forms.services.FormServiceImpl] [verifyFilePath] - Validating path []
[ERROR] [com.keenan.oacommon.forms.services.FormServiceImpl] [verifyFilePath] - strFilePath is NULL
[ERROR] [java.lang.Class] [processListFiles] - File upload path is not valid
here is my java code..
#Override
public boolean verifyFilePath(String inFilePath) {
boolean isFilePathValid = false;
String strFilePath = inFilePath;
logger.info("Validating path [" + strFilePath + "]");
if (strFilePath == null || strFilePath.equalsIgnoreCase("")) {
logger.error("strFilePath is NULL");
isFilePathValid = false;
} else {
try {
File fileUploadDir = new File(strFilePath);
if (fileUploadDir.exists() && fileUploadDir.isDirectory()) {
logger.error("File Path [" + strFilePath + "] is good");
isFilePathValid = true;
} else {
logger.warn("File Path [" + strFilePath + "] is not valid");
isFilePathValid = false;
}
} catch (Exception e) {
isFilePathValid = false;
logger.error("Exception while validating File Path [" + strFilePath + "] - " + e.getMessage(), e);
}
}
return isFilePathValid;
}
#Override
public String checkFileDtlPathCreateIfNotExists(String inFilePath, String inAppSeqNo, String inUploadSeqNo) {
boolean isFilePathValid = false;
/* Main directory (all file uploads) */
String strFileMstPath = null;
File fileUploadMstDir = null;
/* Sub directory (file uploads per application) */
String strFileDtlAppPath = null;
File fileUploadDtlAppDir = null;
/* Sub-sub directory (file uploads per upload request) */
String strFileDtlAppUploadPath = null;
File fileUploadDtlAppUploadDir = null;
boolean fileDirExists = false;
String strFinalReturnPath = null;
if (inFilePath == null || inFilePath.equalsIgnoreCase("")) {
logger.error("inFilePath is NULL");
isFilePathValid = false;
} else {
try {
if (!inFilePath.endsWith("/"))
strFileMstPath = inFilePath + "/";
else
strFileMstPath = inFilePath;
fileUploadMstDir = new File(strFileMstPath);
if (fileUploadMstDir.exists() && fileUploadMstDir.isDirectory()) {
logger.error("strFileMstPath is good");
strFileDtlAppPath = strFileMstPath + inAppSeqNo + "/";
fileUploadDtlAppDir = new File(strFileDtlAppPath);
if (fileUploadDtlAppDir.exists() && fileUploadDtlAppDir.isDirectory()) {
fileDirExists = true;
logger.debug("fileUploadDtlAppDir [" + fileUploadDtlAppDir.toString() + "] exists and is a dir");
} else {
fileDirExists = fileUploadDtlAppDir.mkdir();
}
if (fileDirExists) {
/* Set fileDirExists to false for the next check */
fileDirExists = false;
strFileDtlAppUploadPath = strFileDtlAppPath + inUploadSeqNo + "/";
fileUploadDtlAppUploadDir = new File(strFileDtlAppUploadPath);
if (fileUploadDtlAppUploadDir.exists() && fileUploadDtlAppUploadDir.isDirectory()) {
fileDirExists = true;
logger.debug("fileUploadDtlAppUploadDir [" + fileUploadDtlAppUploadDir.toString()
+ "] exists and is a dir");
} else {
fileDirExists = fileUploadDtlAppUploadDir.mkdir();
}
strFinalReturnPath = strFileDtlAppUploadPath;
} else
logger.error("Could not create strFileDtlAppPath [" + strFileDtlAppPath
+ "] - not attempting to create strFileDtlAppUploadPath [" + strFileDtlAppUploadPath + "]");
if (fileDirExists)
isFilePathValid = true;
else
isFilePathValid = false;
} else {
logger.info("strFileMstPath is not valid");
isFilePathValid = false;
}
} catch (Exception e) {
isFilePathValid = false;
logger.error("Exception while validating filePath - " + e.getMessage(), e);
}
}
if (isFilePathValid)
return strFinalReturnPath;
else
return "";
}
#Override
#Transactional(readOnly = true)
public FileUpload getUploadedFileBySeqNo(int inFileSeqNo) {
FileUpload fileUploadInstance = null;
try {
logger.debug("Fetching FileUpload for inFileUploadSeqNo [" + inFileSeqNo + "]");
fileUploadInstance = FormsHelper.getFormDAO().getUploadedFileDetailsBySeqNo(inFileSeqNo);
logger.debug("FileUpload for inFileUploadSeqNo[" + inFileSeqNo + "] is [" + fileUploadInstance.toString() + "]");
} catch (Exception e) {
logger.error("Exceoption while fetching FileUpload for inFileUploadSeqNo [" + inFileSeqNo + "] - " + e.getMessage(), e);
fileUploadInstance = null;
}
return fileUploadInstance;
}
#Override
#Transactional(readOnly = true)
public FileUpload getUploadedFileByName(String inFileName, String inUploadSeqNo, String inAppSeqNo) {
FileUpload fileUploadInstance = null;
int uploadSeqNo = 0;
int appSeqNo = 0;
try {
uploadSeqNo = Integer.parseInt(inUploadSeqNo);
appSeqNo = Integer.parseInt(inAppSeqNo);
logger.debug("Fetching FileUpload for inFileName [" + inFileName + "]");
fileUploadInstance = FormsHelper.getFormDAO().getUploadedFileDetailsByName(inFileName, uploadSeqNo, appSeqNo);
logger.debug("FileUpload for inFileName [" + inFileName + "] is [" + fileUploadInstance.toString() + "]");
} catch (Exception e) {
logger.error("Exception while fetching FileUpload for inFileName [" + inFileName + "] - " + e.getMessage(), e);
fileUploadInstance = null;
}
return fileUploadInstance;
}
#Override
#Transactional(readOnly = false)
public boolean saveUploadedFileInfo(FileUpload inFileUpload) {
boolean fileUploadInfoSavedSuccessfully = false;
try {
if (inFileUpload == null) {
logger.error("inFileUpload is NULL / Blank");
fileUploadInfoSavedSuccessfully = false;
} else {
FormsHelper.getFormDAO().saveUploadedFileInfo(inFileUpload);
fileUploadInfoSavedSuccessfully = true;
}
} catch (Exception e) {
logger.error("Exception while saving FileUpload - " + e.getMessage(), e);
fileUploadInfoSavedSuccessfully = false;
}
return fileUploadInfoSavedSuccessfully;
}
#Override
#Transactional(readOnly = true)
public List<FileUpload> getUploadedFilesList(int inUploadSeqNo) {
List<FileUpload> uploadedFilesList = null;
try {
logger.debug("Fetching FileUpload for inFileUploadSeqNo [" + inUploadSeqNo + "]");
uploadedFilesList = FormsHelper.getFormDAO().getUploadedFilesList(inUploadSeqNo);
logger.debug("FileUpload for inUploadSeqNo [" + inUploadSeqNo + "]");
} catch (Exception e) {
logger.error("Exceoption while fetching FileUpload for inUploadSeqNo [" + inUploadSeqNo + "] - " + e.getMessage(), e);
uploadedFilesList = null;
}
return uploadedFilesList;
}
#Override
public Map<String, String> getUserNUploadDetailsForMail(int appSeqNo, String emailAddress) {
Map<String, String> details = new HashMap<String, String>();
try {
logger.debug("Fetching getUserNUploadDetailsForMail appSeqNo =[" + appSeqNo + "]" + "and emailAddress = [" + emailAddress
+ "]");
details = FormsHelper.getFormDAO().getUserNUploadDetailsForMail(appSeqNo, emailAddress);
logger.debug("Fetched details [" + details + "]");
} catch (Exception e) {
logger.error("Exceoption while fetching getUserNUploadDetailsForMail " + e.getMessage(), e);
}
return details;
}
Thanks..
I am seeing the following error in logs from last week:
<Feb 7> <Warning> <WLW> <000000> <Id=top-level; Method=processes.FTPInboundProcess.subscription(); Failure=com.bea.wli.bpm.runtime.UnhandledProcessException: Unhandled process exception [ServiceException]>
<Feb 7> <Info> <EJB> <BEA-010213> <Message-Driven EJB: AsyncDispatcher's transaction was rolledback. The transaction details are: Xid=BEA1-3C63D2E9CC47D571774C(183265728),Status=Rolled back.
The code is below:
FTPInboundProcess.jpd
package processes;
import com.bea.data.RawData;
import com.bea.jpd.JpdContext;
import com.bea.jpd.JpdContext.ExceptionInfo;
import com.bea.jpd.ProcessDefinition;
import com.bea.wli.eventGenerator.FileEventGeneratorDocument;
import com.bea.wli.eventGenerator.TimerEventGeneratorDocument;
import com.bea.xml.XmlObject;
import com.bea.xml.XmlTokenSource;
import com.integration.exception.AppException;
import com.integration.util.EnvProperties;
import com.integration.util.KeyGenerator;
import com.integration.util.LogParameters;
import com.integration.util.MessageDataOperation;
import com.integration.util.PASLevel;
import com.integration.util.PASLogger;
import com.integration.util.StringEncrypter;
import com.integration.util.Utility;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;
import ftp.InterfaceDocument.Interface;
import ftp.InterfacesDocument;
import ftp.InterfacesDocument.Factory;
import ftp.InterfacesDocument.Interfaces;
import inbound.IFileAdapter;
import inbound.impl.FTPClientImpl;
import inbound.impl.FileClientImpl;
import inbound.impl.SFTPClientImpl;
import outbound.PostProcess;
public class FTPInboundProcess
implements ProcessDefinition
{
public boolean bIsFtpDeleteSuccess;
public boolean isWriteToLocalDirSuccess;
public String fileArchiveDir;
public boolean isChDirSuccess;
public byte[] ftpData;
public boolean isPutSuccess;
public TimerEventGeneratorDocument timerEventGeneratorDoc;
public FileEventGeneratorDocument fileEventGeneratorDoc;
public RawData inputRawData;
public IFileAdapter ftp;
public static String PROCESS_NAME = "FileXFRI";
public String processLabel;
public long processStartTime;
public long originalStartTime;
public long processId;
public long parentProcessId;
public String key;
public String protocol;
public String documentKey;
public boolean bAppException;
public boolean bMesageInorder;
public boolean bNewMessage;
public String errorStr;
public String sftpkey;
public String fileName;
public int fileCounter;
public String emailUser;
public transient Logger logger;
static final long serialVersionUID = 1L;
public FTPInboundProcess.Callback callback;
public String ftpHostName;
public int ftpPort;
public String ftpUserName;
public String ftpPassword;
public String ftpDir;
public String ftpArchDir;
public String ftpLocalDir;
public String filePattern;
public String isFtpPostActionDeleteRequired;
public String isFtpPostActionArchiveRequired;
public String isEncryptRequired;
public long fileSize;
public String interfaceId;
public String emailYN;
public HashMap dataMap;
public XmlObject inputXML;
public String[] listOfFTPFiles;
public boolean isFTPConnected;
JpdContext context;
int postProcessReturnvalue;
public void subscription(XmlObject x0, TimerEventGeneratorDocument x1)
{
this.inputXML = x0;
this.timerEventGeneratorDoc = x1;
}
void initProcessVariables()
{
this.processStartTime = System.currentTimeMillis();
this.processLabel = "";
this.processId = 0L;
this.postProcessReturnvalue = 0;
this.parentProcessId = 0L;
this.documentKey = "";
this.bAppException = false;
this.errorStr = "";
this.fileSize = 0L;
this.interfaceId = "";
this.emailYN = "";
this.emailUser = "";
this.dataMap = new HashMap();
}
public void init()
throws Exception
{
try
{
this.logger = PASLogger.getLogger("PAS." + PROCESS_NAME);
this.logger.log(PASLevel.FINER, "Timer InputXML :" + this.inputXML.xmlText());
this.logger.log(PASLevel.FINER, "Type::" + this.inputXML.getClass());
initProcessVariables();
String xmlText = this.inputXML.xmlText();
this.logger.log(PASLevel.FINER, "INPUT::" + xmlText);
InterfacesDocument input = InterfacesDocument.Factory.parse(xmlText);
this.interfaceId = input.getInterfaces().getInterfaceArray()[0].getId();
this.logger.log(PASLevel.FINER, "Interface id : " + ((InterfacesDocument)this.inputXML).getInterfaces().getInterfaceArray(0).getId());
this.processId = KeyGenerator.generateKey("PROCESS_ID");
this.documentKey = (PROCESS_NAME + "::FTP::" + this.interfaceId + "::" + this.processId);
this.key = (PROCESS_NAME + "::FTP::" + this.interfaceId + "::" + this.processId);
this.logger.log(PASLevel.FINER, "Parsing Input Document End:" + System.currentTimeMillis());
this.processLabel = ("Key=" + this.key + ",ProcessId=" + this.processId + ",InterfaceId=" + this.interfaceId);
this.processStartTime = System.currentTimeMillis();
MessageDataOperation.insertMessageData(this.processId, this.documentKey, PROCESS_NAME, this.key, this.processStartTime, this.parentProcessId);
updateProcessLabel(this.processLabel);
this.protocol = EnvProperties.getProperty(PROCESS_NAME + "." + this.interfaceId + ".PROTOCOL");
this.ftpHostName = EnvProperties.getProperty(PROCESS_NAME + "." + this.interfaceId + ".FTPHOST");
this.logger.log(PASLevel.FINEST, " ftpHostName :" + this.ftpHostName);
try
{
this.ftpPort = Integer.parseInt(EnvProperties.getProperty(PROCESS_NAME + "." + this.interfaceId + ".PORT"));
}
catch (Exception e)
{
this.logger.log(PASLevel.WARNING, "FTP Port not defined for the Interface :" + this.interfaceId + " .... using default port");
this.ftpPort = 21;
}
this.logger.log(PASLevel.FINE, " ftpPort :" + this.ftpPort);
this.sftpkey = Utility.nullToStr(EnvProperties.getProperty(PROCESS_NAME + "." + this.interfaceId + ".SFTPKEY"));
this.logger.log(PASLevel.FINE, " SFTPKEY :" + this.sftpkey);
this.dataMap.put("SFTPKEY", this.sftpkey);
this.ftpUserName = EnvProperties.getProperty(PROCESS_NAME + "." + this.interfaceId + ".FTPUSER");
this.logger.log(PASLevel.FINE, " ftpUserName :" + this.ftpUserName);
this.ftpPassword = EnvProperties.getProperty(PROCESS_NAME + "." + this.interfaceId + ".FTPPASSWORD");
this.logger.log(PASLevel.FINE, " ftpPassword :" + this.ftpPassword);
this.filePattern = EnvProperties.getProperty(PROCESS_NAME + "." + this.interfaceId + ".FILEPATTERN");
this.logger.log(PASLevel.FINE, " filePattern :" + this.filePattern);
this.ftpArchDir = EnvProperties.getProperty(PROCESS_NAME + "." + this.interfaceId + ".FTPARCH");
this.logger.log(PASLevel.FINE, " ftpArchDir :" + this.ftpArchDir);
this.ftpDir = Utility.nullToStr(EnvProperties.getProperty(PROCESS_NAME + "." + this.interfaceId + ".FTPDIR"));
this.ftpLocalDir = EnvProperties.getProperty(PROCESS_NAME + "." + this.interfaceId + ".FTPLOCALDIR");
this.fileArchiveDir = EnvProperties.getProperty(PROCESS_NAME + "." + this.interfaceId + ".FILEARCHIVEDIR");
this.isFtpPostActionDeleteRequired = EnvProperties.getProperty(PROCESS_NAME + "." + this.interfaceId + ".FTPPOSTDELETE");
this.isEncryptRequired = EnvProperties.getProperty(PROCESS_NAME + "." + this.interfaceId + ".ENCRYPT");
this.isFtpPostActionArchiveRequired = EnvProperties.getProperty(PROCESS_NAME + "." + this.interfaceId + ".FTPPOSTARCHIVE");
this.logger.log(PASLevel.FINE, " ftpLocalDir :" + this.ftpLocalDir);
this.logger.log(PASLevel.FINE, " isFtpPostActionArchiveRequired :" + this.isFtpPostActionArchiveRequired);
this.logger.log(PASLevel.FINE, " isFtpPostActionDeleteRequired :" + this.isFtpPostActionDeleteRequired);
return;
}
catch (Exception e)
{
e.printStackTrace();
this.logger.log(PASLevel.SYSTEM_ERROR, e.getMessage(), new LogParameters(this.processId, PROCESS_NAME, this.processLabel, e));
throw e;
}
}
void updateProcessLabel(String label)
{
this.context.setProcessLabel(this.processLabel);
}
public boolean isAppException()
{
return this.bAppException;
}
public boolean isMessageInorder()
{
return this.bMesageInorder;
}
String getErrorEmailUser(Object[] args)
throws Exception
{
try
{
if ((args == null) || (args.length == 0)) {
return "";
}
this.emailUser = EnvProperties.getProperty(PROCESS_NAME + "." + this.interfaceId + ".EMAIL_USER");
return this.emailUser;
}
catch (Exception e)
{
this.logger.log(PASLevel.SYSTEM_ERROR, "ProcessLabel:" + this.processLabel + ":Error:" + e.getMessage(), new LogParameters(this.processId, PROCESS_NAME, this.processLabel, e));
}
return "";
}
public void context_onInitialMessageFailure(String methodName, Object[] args)
throws Exception
{
try
{
this.processId = Utility.context_onInitialMessageFailure(PROCESS_NAME, args, this.logger);
String body = "Due to the error the interface file could not be sent. \n";
body = body + "System will retry the file after sometime.";
this.errorStr = "";
sendErrorEmail(body, getErrorEmailUser(args));
return;
}
catch (Exception e)
{
this.logger.log(PASLevel.SYSTEM_ERROR, "ProcessLabel:" + this.processLabel + ":Error:" + e.getMessage(), new LogParameters(this.processId, PROCESS_NAME, this.processLabel, e));
throw e;
}
}
public void globalExceptionHandler()
throws Exception
{
Exception e = null;
try
{
e = this.context.getExceptionInfo().getException();
this.errorStr = e.getMessage();
}
catch (Throwable localThrowable) {}
this.bAppException = Utility.globalExceptionHandler(e, this.logger, PROCESS_NAME, this.processId, this.parentProcessId, "", this.inputRawData.byteValue(), "xml", true);
if (this.bAppException) {
this.processLabel = (this.processLabel + ",AppException , " + e.getClass());
} else {
this.processLabel = (this.processLabel + ",SystemException , " + e.getClass());
}
updateProcessLabel(this.processLabel);
this.logger.log(PASLevel.INFO, "Exception Raised in Process , Process Label:" + this.processLabel);
}
public void systemExceptionProcessing()
throws Exception
{}
public void sendDataErrorEmail()
throws Exception
{
String body = "Due to the error the file could not sent \n\n\n";
body = body + ",Filename=" + this.fileName;
this.emailUser = EnvProperties.getProperty(PROCESS_NAME + "." + this.interfaceId + ".EMAIL_USER");
sendErrorEmail(body, this.emailUser);
}
public void sendErrorEmail(String body, String to)
throws Exception
{
String subject = "";
String cc = "";
String bcc = "";
HashMap map = new HashMap();
try
{
body = body + this.errorStr;
subject = "Due to the error the interface file could not be sent. " + this.key;
if ((to == null) || (to.equals(""))) {
to = Utility.getErrorEmail();
}
Utility.sendEmail(PROCESS_NAME, this.processId, "Business", body, subject, to, "", cc, bcc, "");
return;
}
catch (Exception e)
{
this.logger.log(PASLevel.SYSTEM_ERROR, "ProcessLabel:" + this.processLabel + ":Error:" + e.getMessage(), new LogParameters(this.processId, PROCESS_NAME, this.processLabel, e));
throw e;
}
}
public boolean isMessageInorder1()
{
return this.bMesageInorder;
}
public void handleAppException()
throws Exception
{}
public void cleanup()
throws Exception
{
this.inputRawData = null;
}
public void setFilesCount()
throws Exception
{
this.fileCounter = 0;
}
public void decrementFileCount()
throws Exception
{
this.fileCounter += 1;
}
public boolean checkFileCounterCondition()
{
return this.fileCounter < this.listOfFTPFiles.length;
}
public void raiseFTPConnectionException()
throws Exception
{
Exception e = new Exception("Error: FTP Connection Failure");
this.logger.log(PASLevel.SYSTEM_ERROR, ":ProcessLabel:" + this.processLabel + ":Error: FTP Connection Failure", new LogParameters(this.processId, PROCESS_NAME, this.processLabel, e));
throw e;
}
public boolean isFTPConnected()
{
return this.ftp.isConnected();
}
public boolean checkNoOfFilesReceived()
{
if ((this.listOfFTPFiles != null) && (this.listOfFTPFiles.length > 0)) {
return true;
}
return false;
}
public void sendEmail()
throws Exception
{
String subject = "";
String to = "";
String cc = "";
String bcc = "";
String body = "";
HashMap map = new HashMap();
try
{
this.emailYN = EnvProperties.getProperty(PROCESS_NAME + "." + this.interfaceId + ".EMAIL_YN");
if ((this.emailYN != null) && (!this.emailYN.equals("Y"))) {
return;
}
this.emailUser = EnvProperties.getProperty(PROCESS_NAME + "." + this.interfaceId + ".EMAIL_USER");
body = "Interface has processed the following file succesfully. :Filename:" + this.fileName;
to = this.emailUser;
subject = "Interface has sent the following file succesfully. Key::" + this.key + ":Filename:" + this.fileName;
if ((to == null) || (to.equals("")))
{
this.logger.log(PASLevel.WARNING, "ProcessLabel:" + this.processLabel + ":Error:" + "Email Receipent not specified.", new LogParameters(this.processId, PROCESS_NAME, this.processLabel, null));
to = Utility.getErrorEmail();
}
this.logger.log(PASLevel.FINE, "SCPExtract ... Sending an Email");
Utility.sendEmail(PROCESS_NAME, this.processId, "Business", body, subject, to, "", cc, bcc, "");
return;
}
catch (Exception e)
{
this.logger.log(PASLevel.SYSTEM_ERROR, "ProcessLabel:" + this.processLabel + ":Error:" + e.getMessage(), new LogParameters(this.processId, PROCESS_NAME, this.processLabel, e));
throw e;
}
}
public void createFTPClient()
throws Exception
{
if (this.protocol.equalsIgnoreCase("SFTP"))
{
this.ftp = new SFTPClientImpl();return;
}
if (this.protocol.equalsIgnoreCase("FTP"))
{
this.ftp = new FTPClientImpl();return;
}
this.ftp = new FileClientImpl();
}
public void connect()
throws Exception
{
try
{
if (((this.protocol.equals("FTP")) || (this.protocol.equals("SFTP"))) && ((this.ftpUserName == null) || (this.ftpPassword == null) || (this.ftpHostName == null)))
{
Exception e = new Exception("ftpUserName = null || this.ftpPassword = null || ftpHostName = null");
this.logger.log(PASLevel.SYSTEM_ERROR, e.getMessage(), new LogParameters(this.processId, PROCESS_NAME, this.processLabel, e));
throw e;
}
this.logger.log(PASLevel.FINE, "Connecting to the server .... :" + this.ftpHostName);
this.logger.log(PASLevel.FINE, "Host:" + this.ftpHostName + ":User:" + this.ftpUserName + ":Password:" + this.ftpPassword);
this.ftp.connect(this.ftpHostName, this.ftpPort, this.ftpUserName, this.ftpPassword, this.dataMap);
this.logger.log(PASLevel.FINE, "Connected to the server:" + this.ftpHostName);
return;
}
catch (Exception e)
{
this.logger.log(PASLevel.SYSTEM_ERROR, "ProcessLabel:" + this.processLabel + ":Error:" + e.getMessage(), new LogParameters(this.processId, PROCESS_NAME, this.processLabel, e));
throw e;
}
}
public void getRemoteFilesList()
throws Exception
{
try
{
this.logger.log(PASLevel.FINE, "Retriving List of Files .... :FtpDir:" + this.ftpDir);
this.logger.log(PASLevel.FINE, "File Pattern .... ::" + this.filePattern);
if (!this.ftpLocalDir.equals("")) {
this.ftp.setLocalDir(this.ftpLocalDir);
}
if (!this.ftpDir.equals("")) {
this.ftp.changeWorkingDirectory(this.ftpDir);
}
ArrayList list = this.ftp.listFiles(this.filePattern);
this.listOfFTPFiles = new String[list.size()];
System.arraycopy(list.toArray(), 0, this.listOfFTPFiles, 0, list.size());
for (int ind = 0; ind < this.listOfFTPFiles.length; ind++) {
this.logger.log(PASLevel.FINE, "List of Files:" + this.listOfFTPFiles[ind]);
}
return;
}
catch (Exception e)
{
this.logger.log(PASLevel.SYSTEM_ERROR, "ProcessLabel:" + this.processLabel + ":Error:" + e.getMessage(), new LogParameters(this.processId, PROCESS_NAME, this.processLabel, e));
e.printStackTrace();
throw e;
}
}
public void disconnect()
throws Exception
{
this.logger.log(PASLevel.FINE, "Zero input files ..... Disconnecting ...");
this.ftp.disconnect();
}
public void getFile()
throws Exception
{
try
{
this.fileName = this.listOfFTPFiles[this.fileCounter];
if (this.fileName == null) {
throw new Exception(" FTP fileName is null");
}
ByteArrayOutputStream getFileByteArrayOutputStream = this.ftp.getFile(this.fileName);
this.ftpData = getFileByteArrayOutputStream.toByteArray();
this.logger.log(PASLevel.FINE, "Got File Data ...");
return;
}
catch (Exception e)
{
this.logger.log(PASLevel.SYSTEM_ERROR, ":ProcessLabel:" + this.processLabel + ":Error:" + e.getMessage(), new LogParameters(this.processId, PROCESS_NAME, this.processLabel, e));
throw e;
}
}
public void backup()
throws Exception
{
try
{
String archiveYN = EnvProperties.getProperty(PROCESS_NAME + "." + this.interfaceId + ".LOCALARCHIVE");
String asciiYN = EnvProperties.getProperty(PROCESS_NAME + "." + this.interfaceId + ".ASCII_YN");
if (archiveYN.equals("Y"))
{
byte[] fileArchData;
if ((asciiYN.equals("Y")) && (this.isEncryptRequired.equals("Y")))
{
StringEncrypter encrypter = new StringEncrypter();
fileArchData = encrypter.encrypt(new String(this.ftpData)).getBytes();
}
else
{
fileArchData = this.ftpData;
}
Utility.createFile(this.fileArchiveDir + "/" + this.interfaceId + "_" + this.processId + "_" + this.fileName, fileArchData);
}
this.logger.log(PASLevel.FINE, "File Archieved ...::" + archiveYN + "::EncryptionYN::" + this.isEncryptRequired);
return;
}
catch (Exception e)
{
this.logger.log(PASLevel.SYSTEM_ERROR, ":ProcessLabel:" + this.processLabel + ":Error:" + e.getMessage(), new LogParameters(this.processId, PROCESS_NAME, this.processLabel, e));
throw e;
}
}
public void disconnect1()
throws Exception
{
try
{
this.ftp.disconnect();
return;
}
catch (Throwable localThrowable) {}
}
public void disconnect2()
throws Exception
{
try
{
this.ftp.disconnect();
return;
}
catch (Throwable localThrowable) {}
}
public void doPostProcess()
throws Exception
{
try
{
String sapPostProcessClass = EnvProperties.getProperty(PROCESS_NAME + "." + this.interfaceId + ".POSTPROCESS");
sapPostProcessClass = "washpost.pas.outbound.impl." + sapPostProcessClass;
Map fileMap = new HashMap();
this.logger.log(PASLevel.FINE, "PostProcess ::" + sapPostProcessClass);
if (!sapPostProcessClass.equals(""))
{
Class c = Class.forName(sapPostProcessClass);
PostProcess postProcess = (PostProcess)c.newInstance();
String passByRefFlag = EnvProperties.getProperty(PROCESS_NAME + "." + this.interfaceId + ".REFERENCE_YN");
byte[] tempFtpData = this.ftpData;
if ((passByRefFlag != null) && (passByRefFlag.equalsIgnoreCase("Y")))
{
String localDir = EnvProperties.getProperty(PROCESS_NAME + "." + this.interfaceId + ".LOCALDIR");
String localFileName = localDir + System.getProperty("file.separator") + this.fileName;
Utility.createFile(localFileName, this.ftpData);
tempFtpData = new byte[0];
}
this.postProcessReturnvalue = postProcess.doUpload(tempFtpData, this.fileName, this.interfaceId, this.processId, fileMap);
this.logger.log(PASLevel.FINE, "***** PostProcess Return::" + this.postProcessReturnvalue);
return;
}
}
catch (Exception e)
{
this.logger.log(PASLevel.SYSTEM_ERROR, ":ProcessLabel:" + this.processLabel + ":Error:" + e.getMessage(), new LogParameters(this.processId, PROCESS_NAME, this.processLabel, e));
this.postProcessReturnvalue = -1;
this.errorStr = e.getMessage();
throw e;
}
}
public void writeFileToExceptionDir()
throws Exception
{
String exceptionDirPath = EnvProperties.getProperty(PROCESS_NAME + "." + this.interfaceId + ".EXCEPTION_DIR_PATH");
try
{
Utility.createFile(exceptionDirPath + "/" + this.fileName, this.ftpData);
String message = "Error while performing post process :: " + this.fileName + ", File is stored in Exception Directory. ";
message = message = "::ErrorMessage::" + this.errorStr;
performSendErrorEmail(message);
return;
}
catch (Exception e)
{
this.logger.log(PASLevel.SYSTEM_ERROR, ":ProcessLabel:" + this.processLabel + ":Error:" + e.getMessage(), new LogParameters(this.processId, PROCESS_NAME, this.processLabel, e));
throw e;
}
}
public void writeFileToInputDir()
throws Exception
{
String inputDirPath = EnvProperties.getProperty(PROCESS_NAME + "." + this.interfaceId + ".INPUT_DIR_PATH");
try
{
String completeFileName = this.interfaceId + "." + this.fileName;
Utility.createFile(inputDirPath + "/" + completeFileName, this.ftpData);
String message = "Interface has saved the file: " + completeFileName + " to input Directory ";
performSendErrorEmail(message);
return;
}
catch (Exception e)
{
this.logger.log(PASLevel.SYSTEM_ERROR, ":ProcessLabel:" + this.processLabel + ":Error:" + e.getMessage(), new LogParameters(this.processId, PROCESS_NAME, this.processLabel, e));
throw e;
}
}
public void updateLog()
throws Exception
{
try
{
this.processLabel = (this.processLabel + ",FilesProcessed=" + this.fileCounter);
updateProcessLabel(this.processLabel);
MessageDataOperation.updateMessageSentData(this.processId, "Y");
this.logger.log(PASLevel.INFO, "Process Completed, Process Label:" + this.processLabel);
return;
}
catch (Exception e)
{
this.logger.log(PASLevel.SYSTEM_ERROR, ":ProcessLabel:" + this.processLabel + ":Error:" + e.getMessage(), new LogParameters(this.processId, PROCESS_NAME, this.processLabel, e));
throw e;
}
}
public void updateLog1()
throws Exception
{
try
{
this.processLabel += ",FilesProcessed=0";
updateProcessLabel(this.processLabel);
MessageDataOperation.updateMessageSentData(this.processId, "Y");
this.logger.log(PASLevel.INFO, "Process Completed, Process Label:" + this.processLabel);
return;
}
catch (Exception e)
{
this.logger.log(PASLevel.SYSTEM_ERROR, ":ProcessLabel:" + this.processLabel + ":Error:" + e.getMessage(), new LogParameters(this.processId, PROCESS_NAME, this.processLabel, e));
throw e;
}
}
}
This code makes use of a FTP timer even generator to kick off a transaction daily. The problem is, when the timer triggers its spitting out that error and at the same time the transaction is going through. I did try multiple try/catch blocks, but could not get any additional information so far. This has been happening ever since a server outage. Can anyone suggest
I am new to cryptography. I have to develop project based on cryptography..In part of my project I have to insert a key to the registry and afterwards I have to retrieve the same key for decryption.. I done until getting the path of the registry ..
Here I am showing my code:
import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
public final class Project {
public static final String readRegistry(String location, String key) {
try {
// Run reg query, then read output with StreamReader (internal class)
Process process = Runtime.getRuntime().exec("reg query " +
'"' + location + "\" /v " + key);
StreamReader reader = new StreamReader(process.getInputStream());
reader.start();
process.waitFor();
reader.join();
String output = reader.getResult();
// Output has the following format:
// \n<Version information>\n\n<key>\t<registry type>\t<value>
if (!output.contains("\t")) {
return null;
}
// Parse out the value
String[] parsed = output.split("\t");
return parsed[parsed.length - 1];
} catch (Exception e) {
return null;
}
}
static class StreamReader extends Thread {
private InputStream is;
private StringWriter sw = new StringWriter();
public StreamReader(InputStream is) {
this.is = is;
}
public void run() {
try {
int c;
while ((c = is.read()) != -1) {
System.out.println("Reading" + c);
sw.write(c);
}
} catch (IOException e) {
System.out.println("Exception in run() " + e);
}
}
public String getResult() {
System.out.println("Content " + sw.toString());
return sw.toString();
}
}
public static boolean addValue(String key, String valName, String val) {
try {
// Run reg query, then read output with StreamReader (internal class)
Process process = Runtime.getRuntime().exec("reg add \"" + key + "\" /v \"" + valName + "\" /d \"\\\"" + val + "\\\"\" /f");
StreamReader reader = new StreamReader(process.getInputStream());
reader.start();
process.waitFor();
reader.join();
String output = reader.getResult();
System.out.println("Processing........ggggggggggggggggggggg." + output);
// Output has the following format:
// \n<Version information>\n\n<key>\t<registry type>\t<value>
return output.contains("The operation completed successfully");
} catch (Exception e) {
System.out.println("Exception in addValue() " + e);
}
return false;
}
public static void main(String[] args) {
// Sample usage
JAXRDeleteConcept hc = new JAXRDeleteConcept();
System.out.println("Before Insertion");
if (JAXRDeleteConcept.addValue("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ComDlg32\\OpenSaveMRU", "REG_SZ", "Muthus")) {
System.out.println("Inserted Successfully");
}
String value = JAXRDeleteConcept.readRegistry("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ComDlg32\\OpenSaveMRU" , "Project_Key");
System.out.println(value);
}
}
But i dont know how to insert a key in a registry and read the particular key which i inserted..Please help me..
Thanks in advance..
It would be a lot easier to use the JRegistry library to edit the registry, rather than execute commands.