gpt4 book ai didi

java - Android 上的伍德斯托克斯

转载 作者:太空宇宙 更新时间:2023-11-04 15:21:11 24 4
gpt4 key购买 nike

我之前曾大量使用 native Java 1.6 Stax 解析器用 Java 编写过一个库。然而,我现在想在 Android 上使用这个库,这意味着这个解析器不受支持。我想使用 Woodstox,因为它实现了 Stax 1.0 api,并且我不必重写任何当前代码,只需在依赖项中进行 sub 即可。

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

我是否有误解或做错了什么?我缺一个 jar 吗?我读过Woodstox help page彻底但找不到任何我丢失的东西。

编辑:我开始怀疑是否真的可以在 Android 上使用 Woodstox。问题在于对 stax api 的依赖。经过一些研究,我发现 Dalvik VM 似乎无法处理 javax.* 命名空间中的这些包。

最佳答案

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

您没有缺少任何 jar:core 和 stax2-api 总是需要的;如果平台不包含 Stax API jar(Android 由于某种奇怪的原因不包含 Stax API jar,即使它是 JDK 1.6 的一部分),那么就是那个。

编辑:

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

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

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

关于java - Android 上的伍德斯托克斯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20365186/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com