Problema
Con l'aggiornamento ad AEM 6.2 SP1 CFP9, Granite Apache POI non riesce dopo l'installazione del componente aggiuntivo di Forms.
Più specificamente, i metodi della classe SXSSFWorkbook potrebbero non riuscire, con eccezioni simili alle seguenti:
Exception : org.apache.xmlbeans.impl.schema.SchemaTypeImpl cannot be cast to org.apache.xmlbeans.impl.values.TypeStoreUserFactory java.lang.ClassCastException: org.apache.xmlbeans.impl.schema.SchemaTypeImpl cannot be cast to org.apache.xmlbeans.impl.values.TypeStoreUserFactory at org.apache.xmlbeans.impl.store.Xobj.setStableType(Xobj.java:1402) at org.apache.xmlbeans.impl.store.Cur.setType(Cur.java:2500) at org.apache.xmlbeans.impl.store.Cur.setType(Cur.java:2485) at org.apache.xmlbeans.impl.store.Locale.newInstance(Locale.java:636) at org.apache.xmlbeans.impl.store.Locale.newInstance(Locale.java:612) at org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.newInstance(SchemaTypeLoaderBase.java:198) at org.apache.poi.POIXMLTypeLoader.newInstance(POIXMLTypeLoader.java:112) at org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbook$Factory.newInstance(Unknown Source) at org.apache.poi.xssf.usermodel.XSSFWorkbook.onWorkbookCreate(XSSFWorkbook.java:446) at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:244) su org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:235) su org.apache.poi.xssf.streaming.SXSSFWorkbook.<init>(SXSSFWorkbook.java:240) su org.apache.poi.xssf.streaming.SXSSFWorkbook.<init>(SXSSFWorkbook.java:210) su org.apache.poi.xssf.streaming.SXSSFWorkbook.<init>(SXSSFWorkbook.java:185) su org.apache.poi.xssf.streaming.SXSSFWorkbook.<init>(SXSSFWorkbook.java:271) su testpoi.servlets.TestPOIServlet.doGet(TestPOIServlet.java:28) |
La traccia dello stack di cui sopra viene lanciata quando si esegue il seguente cast, per esempio:
SXSSFWorkbook w = new SXSSFWorkbook(1000); |
Ambiente
AEM 6.x con il pacchetto Forms installato
-> AEM 6.2 SP1 con CFP9 tra CFP15 installato.
-> AEM 6.3
-> AEM 6.4
Causa
Il problema si verifica perché la libreria POI di Apache (com.adobe.granite.poi) sta importando alcune classi "org.apache.xmlbeans.impl.*" da un bundle aggiunto da Forms (Apache ServiceMix :: Bundles :: xmlbeans (org.apache.servicemix.bundles.xmlbeans) e alcune classi sono usate dal bundle POI stesso.
Entrambi i bundles contengono diverse versioni di "org.apache.xmlbeans.impl.*" classi: pacchetti Forms versione 2.4.0 mentre granite.poi contiene la versione 2.0.6 della stessa.
Diverse versioni della classe selezionata danno come risultato l'eccezione cast.
Risoluzione
La soluzione temporanea è disinstallare "Apache ServiceMix :: Bundles :: xmlbeansorg.apache.servicemix.bundles.xmlbeans Versione 2.4.0.5".
Questo bundle è usato nel connettore J2EE e quindi può essere rimosso in sicurezza se utilizzi un'istanza OSGi di AEM Forms.
Se utilizzi un'istanza J2EE di AEM Forms:
Su AEM 6.2, la questione è stata affrontata a partire dalla CFP16 e sarà affrontata anche nella prossima versione importante di AEM: 6.5.
Per una correzione nelle versioni 6.3 e 6.4, contatta il Supporto Tecnico Adobe e richiedi una correzione per il riferimento del bug CQ-4244778.