I need to load a static PDF document, from a java class, running in my J2EE web app on WebLogic 12c; however although my code works in Tomcat, when trying to run it in WebLogic 12c (WebLogic Server Version: 12.2.1.2.0), I get a server error that the PDF file cannot be found (java.io.FileNotFoundException).
I am using Apache's PDF library, PDFBox version 2.0.8 to load a fillable PDF file that I created, and then populate that fillable PDF with data. My code works fine in Tomcat, but fails to find the pdf file when deployed to WebLogic 12c .
-This appears to be because when an EAR file is deployed to WebLogic 12c, the contents in the WAR file (all of the application code/files, including the fillable PDF file), remain archived up in a jar file that WebLogic creates, instead of exploded.
My application utilizes the standard Maven application structure, so as is standard with all static files, I have put my PDF file in the directory for static resources:
src/main/resources/
In my pom.xml file, I have the following, which builds any pdf files in the /src/main/resources/ folder, into the class path root folder of the WAR file.
<resource>
<directory>${basedir}/src/main/resources/</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
<include>**/*.pdf</include>
</includes>
</resource>
When I build the WAR and EAR file, the pdf file does indeed get copied into the root folder of the application's class files.
The following 3 lines of code, work to load the PDF, when my application's EAR file is deployed in Tomcat, but do not in WebLogic 12c (WebLogic Server Version: 12.2.1.2.0).
//this classLoader works for Tomcat, but no in WebLogic 12c
ClassLoader classLoader = getClass().getClassLoader();
File file= new File(classLoader.getResource("myPdfFile.pdf").getFile());
PDDocument document = PDDocument.load(file);
WebLogic 12c produces the following error:
<[ACTIVE] ExecuteThread: '6' for queue:'weblogic.kernel.Default (self-tuning)'> <> <> <3902331f-a214-42fe-a6a1-35b3531e4b56-000000a9> <1523985710798> <[severity-value: 8] [rid: 0] [partition-id: 0] [partition-name: DOMAIN] > <[ServletContext@1661988196[app:mmhsrp-ear-4.9.0.1-3 module:/mmhsrp path:null spec-version:3.1]] Servlet failed with an IOException. java.io.FileNotFoundException: C:\Users\shawn.oplinger\AppData\Roaming\JDeveloper\system12.2.1.2.42.161008.1648\DefaultDomain\servers\DefaultServer\tmp_WL_user\mmhsrp-ear-4.9.0.1-3\l27tj7\war\WEB-INF\lib_wl_cls_gen.jar!\myPdfFile.pdf (The system cannot find the path specified)
-When I browse my file system, to manually try to find the pdf file using the path in the WebLogic I can get as far as this directory: C:\Users\shawn.oplinger\AppData\Roaming\JDeveloper\system12.2.1.2.42.161008.1648\DefaultDomain\servers\DefaultServer\tmp_WL_user\mmhsrp-ear-4.9.0.1-3\l27tj7\war\WEB-INF\lib\
in that directory is then this file: _wl_cls_gen.jar
in that jar file is indeed my pdf file:myPdfFile.pdf
-So why can't the classLoader find/load the pdf file?
-does it have anything to do with the pdf file is actually in the archived _wl_cls_gen.jar file, and not exploded?
-Any suggestions on how my java class can load a static pdf file in WebLogic 12c?
Thanks! Shawn