我正在增强一个客户,这是一个更大项目的一部分。由于缺乏速度,我被迫切换到 CNI,因此我不得不使用 GNU-gcj 编译器(gnu 4.6.3)生成本机代码。
编译和链接工作正常(感谢 -findirect-dispatch 标志),我在执行输出时没有任何问题。但是当涉及到客户端和服务器之间的通信时,客户端立即断开连接。原因:
[XStreamClient Reader] WARN - 客户端断开连接(异常:com.thoughtworks.xstream.io.StreamException:无法创建 XmlPullParser)
(这个 Exeption 只出现在客户端的 gcj 编译版本中。当我使用 java 解释器运行代码时 - 一切正常(但太慢了^^)) --> 具有挑战性的部分是我无法检索源代码发生此异常的代码,因为它位于客户端使用的预编译(Java 类文件)库中。(而且我无法联系该图书馆的作者)
我猜这个库会调用XppReader,然后它会尝试创建一个 XmlPullParser 类并失败。
我通过解包并编译创建的 *.class 文件然后链接目标文件来绑定 XStream(版本 1.4.3)库(和其他必需的 *.jar)。这似乎也适用于所有其他图书馆。(我的操作系统=Ubuntu)
我已经做了什么来克服这个问题:我用谷歌搜索了 XStream/XmlPullParser 和 gcj,并用不同的版本替换了“xmlpull”和“kxml2”文件。但没有任何效果。你们中有人知道可能是什么解决方案吗?
编辑:
我发现 XmlPullParser 创建失败的原因是 XmlPullParserFactory.newInstance 函数找不到 /services/org.xmlpull.v1.XmlPullParserFactory 文件的 META-INF 目录。这是因为我只编译和链接了 *.jar 的 *.class 文件。因此,一旦我找到将 META-INF 目录链接到可执行文件的方法,该函数可以找到并访问它,问题就应该得到解决。你们中有人已经知道这样做的方法吗?