title: How can a java class locate and load a static pdf file in WebLogic 12c?
body: <p>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).</p>
  
  <p>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 .</p>
  
  <p>-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.</p>
  
  <p>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:</p>
  
  <p>src/main/resources/</p>
  
  <p>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.</p>
  
  <pre><code>&lt;resource&gt;
      &lt;directory&gt;${basedir}/src/main/resources/&lt;/directory&gt;
          &lt;includes&gt;
          &lt;include&gt;**/*.xml&lt;/include&gt;
          &lt;include&gt;**/*.properties&lt;/include&gt;
         &lt;include&gt;**/*.pdf&lt;/include&gt;
      &lt;/includes&gt;
  &lt;/resource&gt;
  </code></pre>
  
  <p>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.</p>
  
  <p>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).</p>
  
  <pre><code>//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);
  </code></pre>
  
  <blockquote>
    <p>WebLogic 12c produces the following error:</p>
    
         &lt;[ACTIVE] ExecuteThread: '6' for queue:
    
    <p>'weblogic.kernel.Default (self-tuning)'> &lt;> &lt;>
    &lt;3902331f-a214-42fe-a6a1-35b3531e4b56-000000a9> &lt;1523985710798>
    &lt;[severity-value: 8] [rid: 0] [partition-id: 0] [partition-name:
    DOMAIN] > 
    &lt;[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)</p>
    
    <p>-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\</p>
  </blockquote>
  
  <p>in that directory is then this file:
  _wl_cls_gen.jar</p>
  
  <p>in that jar file is indeed my pdf file:myPdfFile.pdf</p>
  
  <p>-So why can't the classLoader find/load the pdf file?</p>
  
  <p>-does it have anything to do with the pdf file is actually in the archived _wl_cls_gen.jar file, and not exploded?</p>
  
  <p>-Any suggestions on how my java class can load a static pdf file in WebLogic 12c?</p>
  
  <p>Thanks!
  Shawn</p>