用gcj编译java和XStream. (例外:无法创建XmlPullParser)

前端之家收集整理的这篇文章主要介绍了用gcj编译java和XStream. (例外:无法创建XmlPullParser)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在增强一个客户,这是一个更大的项目的一部分.由于速度不足,我被迫切换到CNI,因此我必须使用GNU-gcj编译器生成本机代码(gnu 4.6.3).

编译和链接工作正常(感谢-findirect-dispatch标志),我没有任何问题执行输出.
但是当涉及到客户端和服务器之间的通信时,客户端会立即断开连接.原因:

[XStreamClient Reader] WARN – Client disconnected (Exception:
com.thoughtworks.xstream.io.StreamException: Cannot create
XmlPullParser)

(此Exeption仅出现在客户端的gcj编译版本中.当我使用java解释器运行代码时 – 事情运行良好(但速度太慢^^))
– >具有挑战性的部分是我无法检索发生此异常的源代码,因为它位于客户端使用的预编译(Java文件)库中. (我无法联系该图书馆的作者)

我想该库调用XppReader然后尝试创建一个XmlPullParser类并失败.

我通过解压缩它们并编译创建的* .class文件然后链接目标文件来绑定XStream(vers.1.4.3)库(以及其他所需的* .jars).这似乎也适用于所有其他图书馆. (我的操作系统= Ubuntu)

我已经做了什么来克服这个问题:
搜索了XStream / XmlPullParser和gcj,并用不同版本替换了“xmlpull” – 和“kxml2”文件.
但没有任何效果.
你们中的任何人都知道可能是什么解决方案吗?

编辑:

我发现XmlPullParser创建失败的原因是XmlPullParserFactory.newInstance函数无法找到带有/services/org.xmlpull.v1.XmlPullParserFactory文件Meta-INF目录.
这是因为我只编译并链接了* .jar的* .class文件.
因此,只要我找到了将Meta-INF目录链接到该函数可以找到并访问它的可执行文件方法,就应该解决问题.
你们中的任何人都知道这样做的方法吗?

解决方法

我认为xmlpull需要一个可以使用xpp3作为其实现的实现.
请将以下代码添加到您的pom.xml中,如果需要,请将这些jar文件添加到需要它们的软件中.
<dependency>
    <groupId>xmlpull</groupId>
    <artifactId>xmlpull</artifactId>
    <version>1.1.3.1</version>
</dependency>
<dependency>
    <groupId>xpp3</groupId>
    <artifactId>xpp3</artifactId>
    <version>1.1.3.3</version>
</dependency>
原文链接:https://www.f2er.com/java/444635.html

猜你在找的Java相关文章