Hi,
WebLogic 10 And WebLogic 10.3 creates a Jar file (_wls_cls_gen.jar)while deploying our Archieved Applications (WAR files). Which includes all the contains available inside the WEB-INF/classes directory inside this jar file(_wls_cls_gen.jar). I didnot find a way to tell WebLogic Server to not to create this JAR file, because it creates many issues.
Example: if we have placed a Property file or Some XML files inside the “WEB-INF/classes” directory with the name “test.properties” or “test.xml” then WebLogic Server will place this Property file as well inside the (_Wls_cls_gen.jar) file while deployment…
zip:C:/bea103/user_projects/domains/Test_Domain/servers/AdminServer/tmp/_WL_user/testWebApp/8j5e1y/war/WEB-INF/lib/_wl_cls_gen.jar!/test.properties
Now if we write the following code inside out application like Servlet then it won’t work and will fail while reading the Properties file:
Note: Many frameworks uses the Following techinques and Sometimes WebLogic Code causes this issue..(http://forums.oracle.com/forums/thread.jspa?messageID=4217650#4217650 AND http://forums.oracle.com/forums/thread.jspa?threadID=2223518&tstart=105 )…which may cause our applications to fail while reading jar Archieved resources. because they uses the following techinque to read the resources available inside a JAR file:
——————————————-WRONG – APPROACH – BELOW———————
InputStream stream = null; try { Properties p = new Properties(); String path=Thread.currentThread().getContextClassLoader().getResource("Info.properties").getPath(); System.out.println("----------------PATH: "+path); p.load(new java.io.FileInputStream(path)); Host = p.getProperty("Host"); Pot = p.getProperty("Port"); User = p.getProperty("User"); Passwd = p.getProperty("Passwd"); System.out.println("Property Key-Values:" +"n"+ Host +"n"+ Pot + "n"+User+ "n"+Passwd); } catch (Exception e) { e.printStackTrace(); }
To avoid the above issue…we need to change our code like following: most of the Frameworks also need to change their implementations…
———————— CORRECT – APPROACH – BELOW ——————-
InputStream stream = null; System.out.println("------------------------------------"); try { Properties p = new Properties(); stream=this.getClass().getClassLoader().getResourceAsStream("Info.properties"); p.load(stream); Host = p.getProperty("Host"); Pot = p.getProperty("Port"); User = p.getProperty("User"); Passwd = p.getProperty("Passwd"); System.out.println("Property Key-Values:" +"n"+ Host +"n"+ Pot + "n"+User+ "n"+Passwd); } catch (Exception e) { e.printStackTrace(); }
The above piece of code can be used whenever we want to read a Non-Class/Class resource from inside a JAR file.
Thanks
Jay SenSharma
November 24th, 2011 on 3:16 pm
So, how do you write back into Info.properties file if you want to change the passord for example, or the username.
Thanks,
July 11th, 2018 on 8:52 pm
Thanks Jay, it worked for me to pick xsd file.