• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

Getting some Exceptions !!!! Plse Help me

 
Greenhorn
Posts: 6
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I added these codes in my server.xml file.
<Logger className="org.apache.catalina.logger.FileLogger"
directory="logs" prefix="localhost_log." suffix=".txt"
timestamp="true"/>
So tomcat will creat a local host log file daily basis. And i am getting some exceptions in that file. Unable to find the root cause. Apllication is working properly. If i am clicking on some links in my application it will go to the server and download some jarsto client PC and after that it will work as a standalone.
This error is comming only at the time of this downloading time. I am attaching that exception message and my servlet file along with this query. Plse give me some hint about this type of exceptions.

exceptions
------------------
2006-04-05 06:09:56 StandardWrapperValve[default]: Servlet.service() for servlet default threw exception
java.io.IOException: There is no process to read data written to a pipe.
at java.net.SocketOutputStream.socketWrite(Native Method)
at java.net.SocketOutputStream.write(SocketOutputStream.java(Compiled Code))
at org.apache.catalina.connector.ResponseBase.flushBuffer(ResponseBase.java(Compiled Code))
at org.apache.catalina.connector.ResponseBase.write(ResponseBase.java(Compiled Code))
at org.apache.catalina.connector.ResponseBase.write(ResponseBase.java(Compiled Code))
at org.apache.catalina.connector.http.HttpResponseStream.write(HttpResponseStream.java(Compiled Code))
at org.apache.catalina.connector.http.HttpResponseStream.write(HttpResponseStream.java(Compiled Code))
at org.apache.catalina.servlets.DefaultServlet.copyRange(DefaultServlet.java(Compiled Code))
at org.apache.catalina.servlets.DefaultServlet.copy(DefaultServlet.java(Compiled Code))
at org.apache.catalina.servlets.DefaultServlet.serveResource(DefaultServlet.java(Compiled Code))
at org.apache.catalina.servlets.DefaultServlet.doGet(DefaultServlet.java(Compiled Code))
at javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code))
at javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code))
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java(Compiled Code))
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java(Compiled Code))
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java(Compiled Code))
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java(Compiled Code))
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java(Compiled Code))
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java(Compiled Code))
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java(Compiled Code))
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java(Compiled Code))
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java(Compiled Code))
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java(Compiled Code))
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java(Compiled Code))
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java(Compiled Code))
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java(Compiled Code))
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java(Compiled Code))
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java(Compiled Code))
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java(Compiled Code))
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java(Compiled Code))
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java(Compiled Code))
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java(Compiled Code))
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java(Compiled Code))
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java(Compiled Code))
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java(Compiled Code))
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java(Compiled Code))
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java(Compiled Code))
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java(Compiled Code))
at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java(Compiled Code))
at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java(Compiled Code))
at java.lang.Thread.run(Thread.java:498)

2006-04-05 06:09:56 ErrorDispatcherValve[localhost]: Exception Processing ErrorPage[exceptionType=java.lang.Exception, location=/error]
java.lang.IllegalStateException
at java.lang.IllegalStateException.<init>(IllegalStateException.java:36)
at org.apache.catalina.connector.ResponseFacade.reset(ResponseFacade.java:243)
at org.apache.catalina.valves.ErrorDispatcherValve.custom(ErrorDispatcherValve.java:384)
at org.apache.catalina.valves.ErrorDispatcherValve.throwable(ErrorDispatcherValve.java:250)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java(Compiled Code))
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java(Compiled Code))
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java(Compiled Code))
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java(Compiled Code))
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java(Compiled Code))
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java(Compiled Code))
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java(Compiled Code))
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java(Compiled Code))
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java(Compiled Code))
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java(Compiled Code))
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java(Compiled Code))
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java(Compiled Code))
at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java(Compiled Code))
at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java(Compiled Code))
at java.lang.Thread.run(Thread.java:498)

-----------------
Servlet file
------------
public class DynamicJNLPServlet extends HttpServlet
{
private static char replaceChar='/';
private static String strjnlpCodeBasePath="JNLP_CODEBASE_PATH";
private static String strjnlpCjarsPath="JNLP_CJARS_PATH";
private static String strjnlpSjarsPath="JNLP_SJARS_PATH";
private static String strjnlpFileName="JNLP_FILE_NAME";
private static String strCommonJnlpFileName="JNLP_COMMON_FILE_NAME";
private static String strDynamicJarFileName="JNLP_DYNAMIC_JAR_FILE";
private static String strJnlpTemplatePath="JNLP_TEMPLATE_PATH";
private static String ApplCtxPath=null;

public void init(ServletConfig config) throws ServletException
{
super.init( config );
}

protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
{
String strCertCode="";
String strTemp = req.getContextPath();
String strServerName = req.getServerName();
int iport = req.getServerPort();
ApplCtxPath=req.getContextPath();
HttpSession session = null;
String tmpJnlp = null;
String tmpCjars = null;
BufferedReader bReader = null;
BufferedWriter bWriter = null;
File tempJnlpFolder = null;
File tempCjarsFolder = null;
File templateJnlpFile = null;
File actualJnlpFile = null;
session=req.getSession();
String readLine = null; // used to store each line read from file
StringBuffer buffer = new StringBuffer(); // used to store the each line read from file and replace the
// key words defined in jnlp template with the actual value
String cjarFileTobeDeleted = null; // this jar file will be coppied to temp cjar folder and after 2 min
// this jar will get deleted
String loggerdUser = null;
boolean jnlp_extension=false;
String localTempJnlpPath = null; // used to store the path of temp jnlp folder to be create at run time
String localTempCjarsPath = null; // used to store the path of temp cjars folder to be create at run time
String localCjarPath=null; //used to store the path from where one common jar file need to be copied
// to the cjar folder under temp folder
String originalCodeBase=null;

String jnlpCodeBasePath = null; // values will be read from any datasource
String jnlpCjarsPath = null; // values will be read from any datasource
String jnlpSjarsPath = null; // values will be read from any datasource
String jnlpTemplatePath = null; // values will be read from any datasource
String jnlpFileName = null; // value will be obtain from request object
String localJnlpTemplatePath = null; // this will be created at run time after assing the value of JNLP_TEMPLATE_PATH
String commonJnlpFileName=null; // values will be red from any datasource
// and used to read the template file
SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// check file separator for the OS in which application is running
if (File.separator.equals("\\"))
replaceChar = '/';
else if (File.separator.equals("/"))
replaceChar = '\\';
// read these following values from datasource and request
// JNLP_CODEBASE_PATH,JNLP_CJARS_PATH,
// JNLP_SJARS_PATH,JNLP_TEMPLATE_PATH
// get the JNLP_FILE_NAME from incomming request

//Added By Venkat for Application usage logging
if (req.getParameter("certcode") != null) {
strCertCode = (String) req.getParameter("certcode");
}

Connection con = (Connection)session.getAttribute("dcsconnection");
//Added By Venkat for Application usage logging
User user = (User)session.getAttribute("user");
try
{
ApplicationHelper.writeUsageInfo(con, user, strCertCode);
}
catch(SQLException e)
{
this.getServletContext().log("*******Error in ApplicationHelper.writeUsageInfo(************" + e.toString());

}

if (req.getParameter("filename") != null)
{
jnlpFileName= (String) req.getParameter("filename");
}
else
throw new ServletException("CLASS :- DynamicJNLPServlet METHOD :-service ERROR MSG :- "+
" could not find JNLP FILE NAME in the request object ");

if (req.getParameter("jarfilename") != null)
cjarFileTobeDeleted =(String) req.getParameter("jarfilename");
else
throw new ServletException("CLASS :- DynamicJNLPServlet METHOD :-service ERROR MSG :- "+
" could not find CJAR FILE NAME in the request object ");



if( session.getAttribute("jnlpCodeBasePath") == null ||
session.getAttribute("jnlpCjarsPath")== null ||
session.getAttribute("jnlpSjarsPath")== null ||
session.getAttribute("jnlpTemplatePath")== null ||
session.getAttribute("commonJnlpFileName")== null)
// || session.getAttribute("cjarFileTobeDeleted")==null
{

try
{

Statement st = con.createStatement();
ResultSet rs = st.executeQuery("SELECT SYS_PARAM,SYS_VALUE FROM sys_keys WHERE sys_param like 'JNLP%'");

while(rs.next())
{
if(rs.getString(1)!=null && rs.getString(1).equals(strjnlpCodeBasePath))
{
jnlpCodeBasePath = rs.getString(2);
originalCodeBase= rs.getString(2);
jnlpCodeBasePath = "http://"+strServerName+":"+iport+strTemp +jnlpCodeBasePath;
originalCodeBase = "http://"+strServerName+":"+iport+strTemp+originalCodeBase;
}
if(rs.getString(1)!=null && rs.getString(1).equals(strjnlpCjarsPath))
jnlpCjarsPath = rs.getString(2);
if(rs.getString(1)!=null && rs.getString(1).equals(strjnlpSjarsPath))
jnlpSjarsPath = rs.getString(2);
if(rs.getString(1)!=null && rs.getString(1).equals(strJnlpTemplatePath))
{
jnlpTemplatePath = rs.getString(2);
localJnlpTemplatePath=rs.getString(2);
}
if(rs.getString(1)!=null && rs.getString(1).equals(strCommonJnlpFileName))
commonJnlpFileName=rs.getString(2);
}
}
catch(Exception sq)
{
//sq.printStackTrace();
System.out.println(myFormat.format(new java.util.Date()) +" Error in CLASS :- DynamicJNLPServlet METHOD :-service ERROR MSG :-"+sq.getMessage());
}



if( jnlpCodeBasePath ==null)
throw new ServletException(myFormat.format(new java.util.Date()) +" CLASS :- DynamicJNLPServlet METHOD :-service ERROR MSG :- "+
"could not find entry for JNLP_CODEBASE_PATH sys_param in sys_keys database table");
if( jnlpCjarsPath ==null)
throw new ServletException(myFormat.format(new java.util.Date()) +" CLASS :- DynamicJNLPServlet METHOD :-service ERROR MSG :- " +
" could not find entry for JNLP_CJARS_PATH sys_param in sys_keys database table");

if( jnlpSjarsPath ==null)
throw new ServletException(myFormat.format(new java.util.Date()) +" CLASS :- DynamicJNLPServlet METHOD :-service ERROR MSG :- "+
" could not find entry for JNLP_SJARS_PATH sys_param in sys_keys database table");

if( jnlpTemplatePath ==null)
throw new ServletException(myFormat.format(new java.util.Date()) +" CLASS :- DynamicJNLPServlet METHOD :-service ERROR MSG :- "+
" could not find entry for JNLP_TEMPLATE_PATH sys_param in sys_keys database table");

if( commonJnlpFileName ==null)
throw new ServletException(myFormat.format(new java.util.Date()) +" CLASS :- DynamicJNLPServlet METHOD :-service ERROR MSG :- "+
" could not find entry for JNLP_COMMON_FILE_NAME sys_param in sys_keys database table");

session.setAttribute("jnlpCodeBasePath",jnlpCodeBasePath);
session.setAttribute("jnlpCjarsPath",jnlpCjarsPath);
session.setAttribute("jnlpSjarsPath",jnlpSjarsPath);
session.setAttribute("jnlpTemplatePath",jnlpTemplatePath);
session.setAttribute("commonJnlpFileName",commonJnlpFileName);
// session.setAttribute("cjarFileTobeDeleted",cjarFileTobeDeleted);
}
else
{
jnlpCodeBasePath = (String)session.getAttribute("jnlpCodeBasePath");
originalCodeBase= (String)session.getAttribute("jnlpCodeBasePath");
jnlpCjarsPath = (String)session.getAttribute("jnlpCjarsPath");
jnlpSjarsPath = (String)session.getAttribute("jnlpSjarsPath");
jnlpTemplatePath = (String)session.getAttribute("jnlpTemplatePath");
localJnlpTemplatePath=(String)session.getAttribute("jnlpTemplatePath");
commonJnlpFileName=(String)session.getAttribute("commonJnlpFileName");
// cjarFileTobeDeleted =(String)session.getAttribute("cjarFileTobeDeleted");
}
loggerdUser = req.getParameter("user");

tmpJnlp = "temp" + File.separator + loggerdUser + "_" + req.getRemoteAddr() +File.separator + "jnlp";
tmpCjars = "temp" + File.separator + loggerdUser + "_" + req.getRemoteAddr() +File.separator + "cjars";

// creating the folder structure in local m/c where the appl runs for the folder Jnlp Template
// first check if the file path separator in the variable jnlpTemplatePath is compatible to OS
if (localJnlpTemplatePath.indexOf(replaceChar) != -1)
{
localJnlpTemplatePath = localJnlpTemplatePath.replace(replaceChar,File.separatorChar);
}

// so now all the template file be located under this path held by variable localJnlpTemplatePath
localJnlpTemplatePath = this.getServletContext().getRealPath(localJnlpTemplatePath);
// first check if the last index of slash is one less than the total length of template path it means
// the value stored in localJnlpTemplatePath has slash at the end and we need to remove it
if (localJnlpTemplatePath.lastIndexOf(File.separator) ==localJnlpTemplatePath.length() - 1)
{
localJnlpTemplatePath = localJnlpTemplatePath.substring(0,
localJnlpTemplatePath.length() - 1);
}

// we will assign the value of localJnlpTemplatePath to localTmpPath and replace the template folder with
// the value tmpJnlp and then tmpCjars
localTempJnlpPath = localJnlpTemplatePath;
//========================== creating temp folders =======================================================
// Now we will create a temp folder at the same level as the jnlp template folder reside. This is created by
// taking the path of jnlp template folder and replacing the template folder name with the values stored in
// variable tmpJnlp and then tmpCjars
// NOTE : under this temp folder there will be multiple folder created the format will be like this
// username_ipaddress_of_user\jnlp and username_ipaddress_of_user\cjars where username and ip address
// are read at run time from the request object

int lastIndexOf = localJnlpTemplatePath.lastIndexOf(File.separator) + 1;
localTempJnlpPath = localTempJnlpPath.substring(0, lastIndexOf);

// now append the complete temp folder path for jnlp the variable
localTempJnlpPath = localTempJnlpPath + tmpJnlp;

// now create the temp folder
tempJnlpFolder = new File(localTempJnlpPath);
tempJnlpFolder.mkdirs();
//=====================================================================================


//============== read jnlp template file and write to new JNLP file ==================
// start reading the jnlp template file and write the contents to new JNLP file by replacing
// the key words like JNLP_CODEBASE_PATH, JNLP_CJARS_PATH , JNLP_SJARS_PATH , JNLP_TEMPLATE_PATH
// JNLP_FILE_NAME with their respective values stored in the variables

//!!! only when the jnlp file being created is not a common.jnlp file !!!
// Also replace the codebase's last folder with tmpJnlp so that Java web start will look for jnlp file
// under the tmpJnlp for this first we check if the last index of slash is one less than the total length
// of template path it means the value stored in jnlpCodeBasePath has slash at the end and we need to
// remove it
if(jnlpFileName.indexOf("comm")==-1)
{
if (jnlpCodeBasePath.lastIndexOf("\\") == jnlpCodeBasePath.length() - 1)
jnlpCodeBasePath = jnlpCodeBasePath.substring(0,jnlpCodeBasePath.length() - 1);
else if (jnlpCodeBasePath.lastIndexOf("/") == jnlpCodeBasePath.length() - 1)
jnlpCodeBasePath = jnlpCodeBasePath.substring(0,jnlpCodeBasePath.length() - 1);
else
jnlpCodeBasePath = jnlpCodeBasePath;
// now remove the last folder from the codebase path
if (jnlpCodeBasePath.lastIndexOf("\\") != -1)
{
jnlpCodeBasePath = jnlpCodeBasePath.substring(0,jnlpCodeBasePath.lastIndexOf("\\"));
jnlpCodeBasePath = jnlpCodeBasePath.concat("\\");
tmpJnlp = tmpJnlp.replace('/', '\\');
}
else if (jnlpCodeBasePath.lastIndexOf("/") != -1)
{
jnlpCodeBasePath = jnlpCodeBasePath.substring(0,jnlpCodeBasePath.lastIndexOf("/"));
jnlpCodeBasePath = jnlpCodeBasePath.concat("/");
tmpJnlp = tmpJnlp.replace('\\', '/');
}
// now append the tmpJnlp path into this modified codebasepath
jnlpCodeBasePath = jnlpCodeBasePath.concat(tmpJnlp);
}

//!!!

/*
Before creating any application specific jnlp we first check if the temp_ common jnlp file is existing
in the template folder or not if not create a new one the contents of this temp_ common jnlp file will
be same as the common jnlp name specified in the database but the tags like JNLP_CODEBASE_PATH
JNLP_CJARS_PATH JNLP_SJARS_PATH etc will get replace with the value retreived from the data source
inside this temp_ common jnlp file

or if the temp_ common jnlp file exists but there has been some changes made in the data source
table sys_keys then this temp_ common jnlp file should be be recreated
the checking for the values JNLP_CODEBASE_PATH JNLP_CJARS_PATH
JNLP_TEMPLATE_PATH JNLP_COMMON_FILE_NAME JNLP_SJARS_PATH in sys_keys table is done by
comparing these values in the system properties with the latest values obtained from DB

*/

if(System.getProperty("OLD_JNLP_SJARS_PATH")==null)
System.setProperty("OLD_JNLP_SJARS_PATH",jnlpSjarsPath);
if(System.getProperty("OLD_JNLP_CODEBASE_PATH")==null)
System.setProperty("OLD_JNLP_CODEBASE_PATH",originalCodeBase);
if(System.getProperty("OLD_JNLP_CJARS_PATH")==null)
System.setProperty("OLD_JNLP_CJARS_PATH",jnlpCjarsPath);
if(System.getProperty("OLD_JNLP_COMMON_FILE_NAME")==null)
System.setProperty("OLD_JNLP_COMMON_FILE_NAME",commonJnlpFileName);

// creating File Object for template jnlp file and the new jnlp file to be created

actualJnlpFile = new File(localJnlpTemplatePath + File.separator +"temp_"+commonJnlpFileName);
int start = 0;
int end = 0;
if(!actualJnlpFile.exists() || !System.getProperty("OLD_JNLP_SJARS_PATH").equals(jnlpSjarsPath)
|| !System.getProperty("OLD_JNLP_CODEBASE_PATH").equals(originalCodeBase)
|| !System.getProperty("OLD_JNLP_CJARS_PATH").equals(jnlpCjarsPath)
|| !System.getProperty("OLD_JNLP_COMMON_FILE_NAME").equals(commonJnlpFileName)
)
{
// actualJnlpFile.createNewFile();
templateJnlpFile = new File(localJnlpTemplatePath + File.separator +commonJnlpFileName);
bReader = new BufferedReader(new FileReader(templateJnlpFile));
bWriter = new BufferedWriter(new FileWriter(actualJnlpFile));
readLine = bReader.readLine();
start = 0;
end = 0;
while (readLine != null)
{
buffer.delete(0, buffer.toString().length()); // clean the buffer
buffer.append(readLine);

if (buffer.toString().indexOf(strjnlpSjarsPath) != -1)
{
start = 0;
end = 0;
start = buffer.toString().indexOf(strjnlpSjarsPath);
end = strjnlpSjarsPath.length() + start;
buffer.replace(start, end,ApplCtxPath+jnlpSjarsPath);
}

if (buffer.toString().indexOf(strjnlpCodeBasePath) != -1)
{
start = 0;
end = 0;
start = buffer.toString().indexOf(strjnlpCodeBasePath);
end = strjnlpCodeBasePath.length() + start;
buffer.replace(start, end,originalCodeBase);
}

if (buffer.toString().indexOf(strjnlpCjarsPath) != -1)
{
start = 0;
end = 0;
start = buffer.toString().indexOf(strjnlpCjarsPath);
end = strjnlpCjarsPath.length() + start;
buffer.replace(start, end,ApplCtxPath+jnlpCjarsPath);
}

if (buffer.toString().indexOf(strCommonJnlpFileName) != -1)
{
start = 0;
end = 0;
start = buffer.toString().indexOf(strCommonJnlpFileName);
end = strCommonJnlpFileName.length() + start; ;
buffer.replace(start, end, "temp_"+commonJnlpFileName);
}
bWriter.write("\n"+buffer.toString());
readLine = bReader.readLine();
}
bWriter.flush();
bWriter.close();
bReader.close();
}

System.setProperty("OLD_JNLP_SJARS_PATH",jnlpSjarsPath);
System.setProperty("OLD_JNLP_CODEBASE_PATH",originalCodeBase);
System.setProperty("OLD_JNLP_CJARS_PATH",jnlpCjarsPath);
System.setProperty("OLD_JNLP_COMMON_FILE_NAME",commonJnlpFileName);
// change the name of the common jnlp obt from data source to temp_ common jnlp
// so that modified appl jnlp file will refer to this new temp_ common jnlp file
//
commonJnlpFileName="temp_"+commonJnlpFileName;

templateJnlpFile = new File(localJnlpTemplatePath + File.separator +jnlpFileName);
actualJnlpFile = new File(localTempJnlpPath + File.separator +jnlpFileName);
if (actualJnlpFile != null)
actualJnlpFile.createNewFile();
bReader = new BufferedReader(new FileReader(templateJnlpFile));
bWriter = new BufferedWriter(new FileWriter(actualJnlpFile));
readLine = bReader.readLine();
start = 0;
end = 0;
while (readLine != null)
{
buffer.delete(0, buffer.toString().length()); // clean the buffer
buffer.append(readLine);
jnlp_extension=false;
/*
if the line read contain the common jnlp file name tag JNLP_COMMON_FILE_NAME
then replace it with the file name set the flag to true
*/
if (buffer.toString().indexOf(strCommonJnlpFileName) != -1)
{
start = 0;
end = 0;
start = buffer.toString().indexOf(strCommonJnlpFileName);
end = strCommonJnlpFileName.length() + start;
buffer.replace(start, end, commonJnlpFileName);
jnlp_extension=true;
}
/*
if jnlp_extension is true it means we are not working with common.jnlp file and tag JNLP_CODEBASE_PATH
is contain in this line is the code base for extension jnlp for common.jnlp file so this value should
be same as that is read from datasource
*/
if (buffer.toString().indexOf(strjnlpCodeBasePath) != -1)
{
start = 0;
end = 0;
start = buffer.toString().indexOf(strjnlpCodeBasePath);
end = strjnlpCodeBasePath.length() + start;
if(jnlp_extension)
buffer.replace(start, end, originalCodeBase);
else
buffer.replace(start, end, jnlpCodeBasePath);
}
/*
checking if this line has JNLP_CJARS_PATH tag then we check if there is cjar file that is to be
deleted for security reason if yes then append the cjarTemp Path to the JNLP_CJARS_PATH obt
from datasource
else directly replace the tag JNLP_CJARS_PATH with datasource value
*/
if (buffer.toString().indexOf(strjnlpCjarsPath) != -1)
{
start = 0;
end = 0;
start = buffer.toString().indexOf(strjnlpCjarsPath);
end = strjnlpCjarsPath.length() + start;
if (buffer.toString().indexOf(strDynamicJarFileName) != -1)
{
String localtmpJnlp = null;
if (jnlpCjarsPath.lastIndexOf("\\") == jnlpCjarsPath.length() - 1)
localTempCjarsPath = jnlpCjarsPath.substring(0,jnlpCjarsPath.length() - 1);
else if (jnlpCjarsPath.lastIndexOf("/") == jnlpCjarsPath.length() - 1)
localTempCjarsPath = jnlpCjarsPath.substring(0,jnlpCjarsPath.length() - 1);
else
localTempCjarsPath = jnlpCjarsPath;

if (jnlpCjarsPath.indexOf("\\") != -1)
{
if (tmpCjars.indexOf("\\") == -1)
localtmpJnlp = tmpCjars.replace('/', '\\');
else
localtmpJnlp= tmpCjars;

lastIndexOf = localTempCjarsPath.lastIndexOf("\\") + 1;
localTempCjarsPath = localTempCjarsPath.substring(0, lastIndexOf);
}

if (jnlpCjarsPath.indexOf("/") != -1)
{
if (tmpCjars.indexOf("/") == -1)
localtmpJnlp = tmpCjars.replace('\\', '/');
else
localtmpJnlp = tmpCjars;
lastIndexOf = localTempCjarsPath.lastIndexOf("/") + 1;
localTempCjarsPath = localTempCjarsPath.substring(0, lastIndexOf);
}
// now append the complete temp folder path for cjars to these variable
localTempCjarsPath = localTempCjarsPath + localtmpJnlp;
buffer.replace(start, end, ApplCtxPath+localTempCjarsPath);
}
else
buffer.replace(start, end,ApplCtxPath+jnlpCjarsPath);

if (buffer.toString().indexOf(strDynamicJarFileName) != -1)
{
start = 0;
end = 0;
start = buffer.toString().indexOf(strDynamicJarFileName);
end = strDynamicJarFileName.length() + start;
buffer.replace(start, end, cjarFileTobeDeleted);
}
}

/*
checking if this line has JNLP_SJARS_PATH tag then we check if there is cjar file that is to be
deleted for security reason if yes then append the cjarTemp Path to the JNLP_SJARS_PATH obt
from datasource
else directly replace the tag JNLP_SJARS_PATH with datasource value
*/
if (buffer.toString().indexOf(strjnlpSjarsPath) != -1)
{
start = 0;
end = 0;
start = buffer.toString().indexOf(strjnlpSjarsPath);
end = strjnlpSjarsPath.length() + start;
if (buffer.toString().indexOf(strDynamicJarFileName) != -1)
{
String localtmpJnlp = null;
if (jnlpCjarsPath.lastIndexOf("\\") == jnlpCjarsPath.length() - 1)
localTempCjarsPath = jnlpCjarsPath.substring(0,jnlpCjarsPath.length() - 1);
else if (jnlpCjarsPath.lastIndexOf("/") == jnlpCjarsPath.length() - 1)
localTempCjarsPath = jnlpCjarsPath.substring(0,jnlpCjarsPath.length() - 1);
else
localTempCjarsPath = jnlpCjarsPath;
if (jnlpCjarsPath.indexOf("\\") != -1)
{
if (tmpCjars.indexOf("\\") == -1)
localtmpJnlp = tmpCjars.replace('/', '\\');
else
localtmpJnlp = tmpCjars;
lastIndexOf = localTempCjarsPath.lastIndexOf("\\") + 1;
localTempCjarsPath = localTempCjarsPath.substring(0, lastIndexOf);
}

if (jnlpCjarsPath.indexOf("/") != -1)
{
if (tmpCjars.indexOf("/") == -1)
localtmpJnlp = tmpCjars.replace('\\', '/');
else
localtmpJnlp = tmpCjars;
lastIndexOf = localTempCjarsPath.lastIndexOf("/") + 1;
localTempCjarsPath = localTempCjarsPath.substring(0, lastIndexOf);
}

// now append the complete temp folder path for cjars to these variable
localTempCjarsPath = localTempCjarsPath + localtmpJnlp;
buffer.replace(start, end, ApplCtxPath+localTempCjarsPath);
}
else
{
buffer.replace(start, end, ApplCtxPath+jnlpSjarsPath);
}
if (buffer.toString().indexOf(strDynamicJarFileName) != -1)
{
start = 0;
end = 0;
start = buffer.toString().indexOf(strDynamicJarFileName);
end = strDynamicJarFileName.length() + start;
buffer.replace(start, end, cjarFileTobeDeleted);
}
}
/*
Checking for the tag JNLP_FILE_NAME in this line then replacing with the value obtain from database
*/
if (buffer.toString().indexOf(strjnlpFileName) != -1)
{
start = 0;
end = 0;
start = buffer.toString().indexOf(strjnlpFileName);
end = strjnlpFileName.length() + start; ;
buffer.replace(start, end, jnlpFileName);
}

/*
Checking for the tag $ in this line then replacing it with the user name
*/

if (buffer.toString().indexOf("$") != -1)
{
start = 0;
end = 0;
start = buffer.toString().indexOf("$");
buffer.replace(start, start + 1, loggerdUser);
}

bWriter.write("\n"+buffer.toString());
readLine = bReader.readLine();
}
bWriter.flush();
bWriter.close();
bReader.close();

//======================= completed the jnlp file creation ==============================

//==================== Copying one of the CJar file into temp folder ====================
// this is done for security reason
/*
first checking if the localTempCjarsPath has the file separator according to OS
if not replace them
*/
if (localTempCjarsPath.indexOf(File.separator) == -1 && localTempCjarsPath.indexOf("\\") > -1)
localTempCjarsPath = localTempCjarsPath.replace('\\',replaceChar );
if (localTempCjarsPath.indexOf(File.separator) == -1 && localTempCjarsPath.indexOf("/") > -1)
localTempCjarsPath = localTempCjarsPath.replace('/', replaceChar);

// getting the local path for temp cjar in the server using servletContext
localTempCjarsPath = this.getServletContext().getRealPath(localTempCjarsPath);
// creating File Object for creating temp and cjar folder from which jar file will be deleted
tempCjarsFolder = new File(localTempCjarsPath+File.separator);
if (tempCjarsFolder != null)
tempCjarsFolder.mkdirs();
// getting the local cjar path in the server using servletContext
localCjarPath=this.getServletContext().getRealPath(jnlpSjarsPath);
// copy the cjar file to be deleted from cjar folder to temp cjar folder
try
{
packjnlp.FSDeleteFile.copyFile(localCjarPath+ File.separator+cjarFileTobeDeleted,
localTempCjarsPath+ File.separator+cjarFileTobeDeleted);
}
catch(Exception exp)
{
System.out.println(myFormat.format(new java.util.Date()) +" CLASS :- DynamicJNLPServlet METHOD :-service ERROR MSG :- WHILE " +
"trying to copy the jar file that need to be deleted from folder " +localCjarPath+
File.separator+cjarFileTobeDeleted + " to folder is " + localTempCjarsPath+
File.separator+cjarFileTobeDeleted );
//exp.printStackTrace();

}

// setting the System property for delete path this will help FSDeleteFile to delete the files
// under this folder
String strDelete_Path = localTempCjarsPath.substring(0,localTempCjarsPath.indexOf("temp")+4);
if (System.getProperty("DELETE_PATH") == null)
System.setProperty("DELETE_PATH", strDelete_Path);
//=======================================================================================

start=jnlpCodeBasePath.indexOf(req.getContextPath())+req.getContextPath().length()+1;
end=jnlpCodeBasePath.length();
String requestDespPath=jnlpCodeBasePath.substring(start,end);
if(requestDespPath.indexOf("\\")!=-1)
requestDespPath=requestDespPath.concat("\\");
else if(requestDespPath.indexOf("/")!=-1)
requestDespPath=requestDespPath.concat("/");
requestDespPath=requestDespPath.concat(jnlpFileName);
RequestDispatcher rd = req.getRequestDispatcher(requestDespPath);
res.setContentType("application/x-java-jnlp");
rd.forward(req, res);
}
}
 
Just the other day, I was thinking ... about this tiny ad:
a bit of art, as a gift, that will fit in a stocking
https://gardener-gift.com
reply
    Bookmark Topic Watch Topic
  • New Topic