FOP/AEM:class org.apache.fop.fonts.FontCache 不允许反序列化
FOP/AEM: Deserialization not allowed for class org.apache.fop.fonts.FontCache
无法在 fop 中获取外部字体,正在获取消息:
java.lang.UnsupportedOperationException:class org.apache.fop.fonts.FontCache 不允许反序列化(2018 年 11 月 15 日星期四 11:07:35 PST)
在 org.kantega.notsoserial.DefaultNotSoSerial.preventDeserialization(DefaultNotSoSerial.java:256)
在 org.kantega.notsoserial.DefaultNotSoSerial.onBeforeResolveClass(DefaultNotSoSerial.java:248)
在 org.kantega.notsoserial.ObjectInputStreamClassVisitor.onBeforeResolveClass(ObjectInputStreamClassVisitor.java:48)
在 java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1868)
在 java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1751)
在 java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2042)
在 java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1573)
在 java.io.ObjectInputStream.readObject(ObjectInputStream.java:431)
在 org.apache.fop.fonts.FontCache.loadFrom(FontCache.java:151)
在 org.apache.fop.fonts.FontCache.load(FontCache.java:132)
在 org.apache.fop.fonts.FontManager.setUseCache(FontManager.java:121)
在 org.apache.fop.fonts.FontManager.(FontManager.java:63)
在 org.apache.fop.apps.FopFactory1 美元。(FopFactory.java:159)
a.lang.UnsupportedOperationException: class org.apache.fop.fonts.FontCachet org.apache.fop.apps.FopFactory.(FopFactory.java:156) 不允许反序列化
在 org.apache.fop.apps.FopFactory.newInstance(FopFactory.java:177)
在 com.intelsecurity.aem.services.impl.util.PDFFOPServiceImpl.createPDF(PDFFOPServiceImpl.java:74)
在 com.intelsecurity.aem.services.impl.checkout.CreatePurchaseReceiptDataServiceImpl.createPurchaseReceiptData(CreatePurchaseReceiptDataServiceImpl.java:172)
在 com.intelsecurity.aem.servlets.checkout.PurchaseOrderServlet.operationGetOrderSummary(PurchaseOrderServlet.java:342)
在 com.intelsecurity.aem.servlets.checkout.PurchaseOrderServlet.doPost(PurchaseOrderServlet.java:178)
在 org.apache.sling.api.servlets.SlingAllMethodsServlet.mayService(SlingAllMethodsServlet.java:146)
在 org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:342)
在 org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:374)
在
以下是 fopconfig 文件:
<?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>
我的字体保存在与 fop-config 相同的文件夹中
为了解决上述问题,我尝试了以下步骤:
final FopFactory fopFactory = FopFactory.newInstance();
fopFactory.getFontManager().getFontCache().clear();
但是,我的 osgi 包似乎仍处于安装状态。
我做错了什么?
AEM 使用反序列化防火墙,只有明确列入白名单的 classes 才允许反序列化。您需要在 osgi 配置中将您的 class 列入白名单 - com.adobe.cq.deserfw.impl.DeserializationFirewallImpl
无法在 fop 中获取外部字体,正在获取消息:
java.lang.UnsupportedOperationException:class org.apache.fop.fonts.FontCache 不允许反序列化(2018 年 11 月 15 日星期四 11:07:35 PST) 在 org.kantega.notsoserial.DefaultNotSoSerial.preventDeserialization(DefaultNotSoSerial.java:256) 在 org.kantega.notsoserial.DefaultNotSoSerial.onBeforeResolveClass(DefaultNotSoSerial.java:248) 在 org.kantega.notsoserial.ObjectInputStreamClassVisitor.onBeforeResolveClass(ObjectInputStreamClassVisitor.java:48) 在 java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1868) 在 java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1751) 在 java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2042) 在 java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1573) 在 java.io.ObjectInputStream.readObject(ObjectInputStream.java:431) 在 org.apache.fop.fonts.FontCache.loadFrom(FontCache.java:151) 在 org.apache.fop.fonts.FontCache.load(FontCache.java:132) 在 org.apache.fop.fonts.FontManager.setUseCache(FontManager.java:121) 在 org.apache.fop.fonts.FontManager.(FontManager.java:63) 在 org.apache.fop.apps.FopFactory1 美元。(FopFactory.java:159) a.lang.UnsupportedOperationException: class org.apache.fop.fonts.FontCachet org.apache.fop.apps.FopFactory.(FopFactory.java:156) 不允许反序列化 在 org.apache.fop.apps.FopFactory.newInstance(FopFactory.java:177) 在 com.intelsecurity.aem.services.impl.util.PDFFOPServiceImpl.createPDF(PDFFOPServiceImpl.java:74) 在 com.intelsecurity.aem.services.impl.checkout.CreatePurchaseReceiptDataServiceImpl.createPurchaseReceiptData(CreatePurchaseReceiptDataServiceImpl.java:172) 在 com.intelsecurity.aem.servlets.checkout.PurchaseOrderServlet.operationGetOrderSummary(PurchaseOrderServlet.java:342) 在 com.intelsecurity.aem.servlets.checkout.PurchaseOrderServlet.doPost(PurchaseOrderServlet.java:178) 在 org.apache.sling.api.servlets.SlingAllMethodsServlet.mayService(SlingAllMethodsServlet.java:146) 在 org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:342) 在 org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:374) 在
以下是 fopconfig 文件:
<?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>
我的字体保存在与 fop-config 相同的文件夹中
为了解决上述问题,我尝试了以下步骤:
final FopFactory fopFactory = FopFactory.newInstance();
fopFactory.getFontManager().getFontCache().clear();
但是,我的 osgi 包似乎仍处于安装状态。
我做错了什么?
AEM 使用反序列化防火墙,只有明确列入白名单的 classes 才允许反序列化。您需要在 osgi 配置中将您的 class 列入白名单 - com.adobe.cq.deserfw.impl.DeserializationFirewallImpl