首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android上的Woodstox

Android上的Woodstox
EN

Stack Overflow用户
提问于 2013-12-04 09:35:00
回答 1查看 603关注 0票数 1

我之前使用原生的Java1.6StAX解析器用Java编写了一个库。但是,我现在想在Android上使用这个库,这意味着不支持这个解析器。我希望使用Woodstox,因为它实现了Stax 1.0 api,而且我不必重写任何当前代码,只需在依赖项中重写sub即可。

Android没有StAX1API,所以我意识到我必须添加它。现在,我已经将woodstox-core-asl-4.2.0.jar、stax-api-1.0-2.jar和stax2-api-3.1.3.jar添加到类路径中。一切都编译得很好,但是当我实际尝试运行一个依赖于这个库的Android应用程序时,我得到的运行时错误表明它没有使用Woodstox作为StAX1API的实现。

是不是有什么地方我误解了或者做错了?我是不是少了一个罐子?我已经彻底阅读了Woodstox help page,但找不到我遗漏的其他任何东西。

编辑:我开始怀疑是否真的可以在Android上使用Woodstox。问题出在对stax api的依赖上。经过一些研究后,我发现Dalvik VM似乎不适合使用javax.*名称空间中的那些包。

EN

回答 1

Stack Overflow用户

发布于 2013-12-05 04:17:30

如何传递XMLInputFactory / XMLOutputFactory实例?通常,直接构造( WstxInputFactoryWstxOutputFactory的)实例更好,因为调用XMLInputFactory.newInstance()并没有真正的好处:至多它增加了开销(扫描类路径要慢得多)。

您不会遗漏任何jar : core和stax2-api总是需要的;如果平台不包括Stax API jar( Android出于某种奇怪的原因不包括,尽管它是JDK 1.6的一部分),那么就是那个jar。

编辑

自动发现应该基于以下几点:

  1. XMLInputFactory (etc)检查匹配的系统属性("javax.xml.stream.XMLInputFactory")是否有值;这是要使用的工厂的类名。因此,您可以使用特定Impl值设置系统属性
  2. 如果未找到系统属性,请查看是否有要读取的资源META-INF/services/javax.xml.stream.XMLInputFactory;一行包含类名
  3. 如果两者都不起作用,请尝试创建默认实例;对于J2SE SDK,这将是

提供的(Sjsxp)的实现

Woodstox提供SPI信息(步骤2),以自动注册自身。但是,因为在Android上重新打包jars (作为Android包,APK?),所以资源文件可能不包含,也可能找不到。如果这是根本原因,您仍然可以设置匹配的系统属性。如果不是,则需要使用其他方式提供类名或工厂实例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20365186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档