Unable to get external font in fop, getting message:
java.lang.UnsupportedOperationException: Deserialization not allowed for class org.apache.fop.fonts.FontCache (on Thu Nov 15 11:07:35 PST 2018) at org.kantega.notsoserial.DefaultNotSoSerial.preventDeserialization(DefaultNotSoSerial.java:256) at org.kantega.notsoserial.DefaultNotSoSerial.onBeforeResolveClass(DefaultNotSoSerial.java:248) at org.kantega.notsoserial.ObjectInputStreamClassVisitor.onBeforeResolveClass(ObjectInputStreamClassVisitor.java:48) at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1868) at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1751) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2042) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1573) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:431) at org.apache.fop.fonts.FontCache.loadFrom(FontCache.java:151) at org.apache.fop.fonts.FontCache.load(FontCache.java:132) at org.apache.fop.fonts.FontManager.setUseCache(FontManager.java:121) at org.apache.fop.fonts.FontManager.(FontManager.java:63) at org.apache.fop.apps.FopFactory$1.(FopFactory.java:159) a.lang.UnsupportedOperationException: Deserialization not allowed for class org.apache.fop.fonts.FontCachet org.apache.fop.apps.FopFactory.(FopFactory.java:156) at org.apache.fop.apps.FopFactory.newInstance(FopFactory.java:177) at com.intelsecurity.aem.services.impl.util.PDFFOPServiceImpl.createPDF(PDFFOPServiceImpl.java:74) at com.intelsecurity.aem.services.impl.checkout.CreatePurchaseReceiptDataServiceImpl.createPurchaseReceiptData(CreatePurchaseReceiptDataServiceImpl.java:172) at com.intelsecurity.aem.servlets.checkout.PurchaseOrderServlet.operationGetOrderSummary(PurchaseOrderServlet.java:342) at com.intelsecurity.aem.servlets.checkout.PurchaseOrderServlet.doPost(PurchaseOrderServlet.java:178) at org.apache.sling.api.servlets.SlingAllMethodsServlet.mayService(SlingAllMethodsServlet.java:146) at org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:342) at org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:374) at
Following is by fopconfig file:
<?xml version="1.0"?>
<fop version="1.0">
<base>.</base>
<source-resolution>72</source-resolution>
<target-resolution>72</target-resolution>
<default-page-settings height="11.00in" width="8.50in"/>
<renderers>
<renderer mime="application/pdf">
<filterList>
<value>flate</value>
</filterList>
<fonts>
<font embed-url=".">
<font-triplet name="TrueType" style="normal" weight="normal"/>
</font>
</fonts>
</renderer>
</renderers>
</fop>
and my font is kept is the same folders as fop-config
To fix the above issue, I tried the following step:
final FopFactory fopFactory = FopFactory.newInstance();
fopFactory.getFontManager().getFontCache().clear();
however, my osgi bundle seems to be still in installed state.
What am I doing wrong ?
AEM uses a deserialization firewall and only explicitly white-listed classes are allowed to be de-serialized. you need to white-list your class in the osgi configuration for - com.adobe.cq.deserfw.impl.DeserializationFirewallImpl