[ 
https://issues.apache.org/jira/browse/XMLBEANS-597?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17489117#comment-17489117
 ] 

PJ Fanning commented on XMLBEANS-597:
-------------------------------------

Another possibility is to change the SaxLoader code so that it sets the 
namespace feature first and then sets the namespace-prefix feature but catches 
any exceptions from the 2nd call and quietly ignores them (or just logs them).

> Improve support for using XMLBeans on Android
> ---------------------------------------------
>
>                 Key: XMLBEANS-597
>                 URL: https://issues.apache.org/jira/browse/XMLBEANS-597
>             Project: XMLBeans
>          Issue Type: New Feature
>    Affects Versions: Version 5.0.3
>            Reporter: Dominik Stadler
>            Assignee: Dominik Stadler
>            Priority: Major
>             Fix For: Version 5.1.0
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> The project [https://github.com/centic9/poi-on-android] allows to run Apache 
> POI as part of Android Apps and thus also uses XMLBeans.
> When trying to update to Apache POI 5.2.0, I saw that there is a problem with 
> the SAX parser on Android as it fails when both features "namespaces" and 
> "namespace-prefix" are set to true.
> XMLBeans currently does this in the class {{Locale.SaxLoader}} and thus an 
> Android Application crashes with an error "The 'namespace-prefix' feature is 
> not supported while the 'namespaces' feature is enabled."
>  
> Therefore I  will introduce a system property which can be used to control 
> the SAX feature "namespace-prefixes" to be able to set it to "false" if 
> required.
>  
> The full stacktrace is:
>  
> {noformat}
> E/AndroidRuntime: FATAL EXCEPTION: main
>     Process: org.dstadler.poiandroidtest.poitest, PID: 26552
>     java.lang.RuntimeException: Unable to start activity 
> ComponentInfo{org.dstadler.poiandroidtest.poitest/org.dstadler.poiandroidtest.poitest.DocumentListActivity}:
>  java.lang.IllegalStateException: org.apache.poi.ooxml.POIXMLException: 
> unable to parse shared strings table
>         at 
> android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)
>         at 
> android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
>         at android.app.ActivityThread.-wrap11(Unknown Source:0)
>         at 
> android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
>         at android.os.Handler.dispatchMessage(Handler.java:105)
>         at android.os.Looper.loop(Looper.java:164)
>         at android.app.ActivityThread.main(ActivityThread.java:6541)
>         at java.lang.reflect.Method.invoke(Native Method)
>         at 
> com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
>         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
>      Caused by: java.lang.IllegalStateException: 
> org.apache.poi.ooxml.POIXMLException: unable to parse shared strings table
>         at 
> org.dstadler.poiandroidtest.poitest.DocumentListActivity.onCreate(DocumentListActivity.java:191)
>         at android.app.Activity.performCreate(Activity.java:6975)
>         at 
> android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)
>         at 
> android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)
>         at 
> android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) 
>         at android.app.ActivityThread.-wrap11(Unknown Source:0) 
>         at 
> android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) 
>         at android.os.Handler.dispatchMessage(Handler.java:105) 
>         at android.os.Looper.loop(Looper.java:164) 
>         at android.app.ActivityThread.main(ActivityThread.java:6541) 
>         at java.lang.reflect.Method.invoke(Native Method) 
>         at 
> com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
>         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
>      Caused by: org.apache.poi.ooxml.POIXMLException: unable to parse shared 
> strings table
>         at 
> org.apache.poi.ooxml.POIXMLFactory.createDocumentPart(POIXMLFactory.java:68)
>         at 
> org.apache.poi.ooxml.POIXMLDocumentPart.read(POIXMLDocumentPart.java:661)
>         at org.apache.poi.ooxml.POIXMLDocument.load(POIXMLDocument.java:165)
>         at 
> org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:274)
>         at 
> org.apache.poi.xssf.usermodel.XSSFWorkbookFactory.createWorkbook(XSSFWorkbookFactory.java:118)
>         at 
> org.apache.poi.xssf.usermodel.XSSFWorkbookFactory.create(XSSFWorkbookFactory.java:98)
>         at 
> org.apache.poi.xssf.usermodel.XSSFWorkbookFactory.create(XSSFWorkbookFactory.java:36)
>         at 
> org.apache.poi.ss.usermodel.WorkbookFactory.lambda$create$2(WorkbookFactory.java:224)
>         at 
> org.apache.poi.ss.usermodel.WorkbookFactory$$ExternalSyntheticLambda4.create(Unknown
>  Source:2)
>         at 
> org.apache.poi.ss.usermodel.WorkbookFactory.wp(WorkbookFactory.java:329)
>         at 
> org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:224)
>         at 
> org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:185)
>         at 
> org.dstadler.poiandroidtest.poitest.DocumentListActivity.onCreate(DocumentListActivity.java:81)
>         at android.app.Activity.performCreate(Activity.java:6975) 
>         at 
> android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213) 
>         at 
> android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770) 
>         at 
> android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) 
>         at android.app.ActivityThread.-wrap11(Unknown Source:0) 
>         at 
> android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) 
>         at android.os.Handler.dispatchMessage(Handler.java:105) 
>         at android.os.Looper.loop(Looper.java:164) 
>         at android.app.ActivityThread.main(ActivityThread.java:6541) 
>         at java.lang.reflect.Method.invoke(Native Method) 
>         at 
> com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
>         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
>      Caused by: java.io.IOException: unable to parse shared strings table
>         at 
> org.apache.poi.xssf.model.SharedStringsTable.readFrom(SharedStringsTable.java:136)
>         at 
> org.apache.poi.xssf.model.SharedStringsTable.<init>(SharedStringsTable.java:112)
>         at 
> org.apache.poi.xssf.usermodel.XSSFRelation$$ExternalSyntheticLambda14.init(Unknown
>  Source:2)
>         at 
> org.apache.poi.ooxml.POIXMLFactory.createDocumentPart(POIXMLFactory.java:61)
>         at 
> org.apache.poi.ooxml.POIXMLDocumentPart.read(POIXMLDocumentPart.java:661) 
>         at org.apache.poi.ooxml.POIXMLDocument.load(POIXMLDocument.java:165) 
>         at 
> org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:274) 
>         at 
> org.apache.poi.xssf.usermodel.XSSFWorkbookFactory.createWorkbook(XSSFWorkbookFactory.java:118)
>  
>         at 
> org.apache.poi.xssf.usermodel.XSSFWorkbookFactory.create(XSSFWorkbookFactory.java:98)
>  
>         at 
> org.apache.poi.xssf.usermodel.XSSFWorkbookFactory.create(XSSFWorkbookFactory.java:36)
>  
>         at 
> org.apache.poi.ss.usermodel.WorkbookFactory.lambda$create$2(WorkbookFactory.java:224)
>  
>         at 
> org.apache.poi.ss.usermodel.WorkbookFactory$$ExternalSyntheticLambda4.create(Unknown
>  Source:2) 
>         at 
> org.apache.poi.ss.usermodel.WorkbookFactory.wp(WorkbookFactory.java:329) 
>         at 
> org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:224) 
>         at 
> org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:185) 
>         at 
> org.dstadler.poiandroidtest.poitest.DocumentListActivity.onCreate(DocumentListActivity.java:81)
>  
>         at android.app.Activity.performCreate(Activity.java:6975) 
>         at 
> android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213) 
>         at 
> android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770) 
>         at 
> android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) 
>         at android.app.ActivityThread.-wrap11(Unknown Source:0) 
>         at 
> android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) 
>         at android.os.Handler.dispatchMessage(Handler.java:105) 
>         at android.os.Looper.loop(Looper.java:164) 
>         at android.app.ActivityThread.main(ActivityThread.java:6541) 
>         at java.lang.reflect.Method.invoke(Native Method) 
>         at 
> com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
>         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
>      Caused by: org.apache.xmlbeans.XmlException: error: The 
> 'namespace-prefix' feature is not supported while the 'namespaces' feature is 
> enabled.
>         at 
> org.apache.xmlbeans.impl.store.Locale$SaxLoader.load(Locale.java:2565)
>         at 
> org.apache.xmlbeans.impl.store.Locale.lambda$parseToXmlObject$3(Locale.java:725)
>         at 
> org.apache.xmlbeans.impl.store.Locale$$ExternalSyntheticLambda4.parse(Unknown 
> Source:6)
>         at org.apache.xmlbeans.impl.store.Locale.syncWrap(Locale.java:498)
>         at 
> org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:724)
>         at 
> org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:233)
>         at 
> org.apache.xmlbeans.impl.schema.AbstractDocumentFactory.parse(AbstractDocumentFactory.java:71)
>         at 
> org.apache.poi.xssf.model.SharedStringsTable.readFrom(SharedStringsTable.java:125)
>         at 
> org.apache.poi.xssf.model.SharedStringsTable.<init>(SharedStringsTable.java:112)
>  
>         at 
> org.apache.poi.xssf.usermodel.XSSFRelation$$ExternalSyntheticLambda14.init(Unknown
>  Source:2) 
>         at 
> org.apache.poi.ooxml.POIXMLFactory.createDocumentPart(POIXMLFactory.java:61) 
>         at 
> org.apache.poi.ooxml.POIXMLDocumentPart.read(POIXMLDocumentPart.java:661) 
>         at org.apache.poi.ooxml.POIXMLDocument.load(POIXMLDocument.java:165) 
>         at 
> org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:274) 
>         at 
> org.apache.poi.xssf.usermodel.XSSFWorkbookFactory.createWorkbook(XSSFWorkbookFactory.java:118)
>  
>         at 
> org.apache.poi.xssf.usermodel.XSSFWorkbookFactory.create(XSSFWorkbookFactory.java:98)
>  
>         at 
> org.apache.poi.xssf.usermodel.XSSFWorkbookFactory.create(XSSFWorkbookFactory.java:36)
>  
>         at 
> org.apache.poi.ss.usermodel.WorkbookFactory.lambda$create$2(WorkbookFactory.java:224)
>  
>         at 
> org.apache.poi.ss.usermodel.WorkbookFactory$$ExternalSyntheticLambda4.create(Unknown
>  Source:2) 
>         at 
> org.apache.poi.ss.usermodel.WorkbookFactory.wp(WorkbookFactory.java:329) 
>         at 
> org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:224) 
>         at 
> org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:185) 
>         at 
> org.dstadler.poiandroidtest.poitest.DocumentListActivity.onCreate(DocumentListActivity.java:81)
>  
>         at android.app.Activity.performCreate(Activity.java:6975) 
>         at 
> android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213) 
>         at 
> android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770) 
>         at 
> android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) 
>         at android.app.ActivityThread.-wrap11(Unknown Source:0) 
>         at 
> android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) 
>         at android.os.Handler.dispatchMessage(Handler.java:105) 
>         at android.os.Looper.loop(Looper.java:164) 
>         at android.app.ActivityThread.main(ActivityThread.java:6541) 
>         at java.lang.reflect.Method.invoke(Native Method) 
>         at 
> com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
>         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
> E/AndroidRuntime: Caused by: org.xml.sax.SAXNotSupportedException: The 
> 'namespace-prefix' feature is not supported while the 'namespaces' feature is 
> enabled.
>         at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:258)
>         at 
> org.apache.xmlbeans.impl.store.Locale$SaxLoader.load(Locale.java:2538)
>             ... 34 more {noformat}



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@poi.apache.org
For additional commands, e-mail: dev-h...@poi.apache.org

Reply via email to