9

Androidでjackson-dataformat-xmlを使用するのに苦労しています

Oracle jreで正常に動作する非常に基本的なコードがいくつかあります

JacksonXmlModule module = new JacksonXmlModule();
module.setDefaultUseWrapper(false);
XmlMapper xmlMapper = new XmlMapper(module);

最初に、gradleに適合した公式ドキュメントを試しました(正しく行われたかどうかはわかりません):

compile 'com.fasterxml.jackson.core:jackson-core:2.5.4'
compile 'com.fasterxml.jackson.core:jackson-annotations:2.5.4'
compile 'com.fasterxml.jackson.core:jackson-databind:2.5.4'
compile 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.5.4'

compile 'org.codehaus.woodstox:woodstox-core-asl:4.4.1'
compile 'javax.xml.stream:stax-api:1.0-2'

結果:コアライブラリをアプリケーションにバンドルすることについて、gradle がビルド時間に失敗する

...
:app:preDexDebug
trouble processing "javax/xml/stream/EventFilter.class":
Ill-advised or mistaken usage of a core class (java.* or javax.*)
when not building a core library.
...

ショーンの答えに従おうとする2回目の試み (基本的に、彼はcorelibsをプレフィックス名で再パッケージ化し、jackson-dataformat-xmlを再構築してプレフィックス名を使用します)

compile 'com.fasterxml.jackson.core:jackson-core:2.1.2'
compile 'com.fasterxml.jackson.core:jackson-annotations:2.1.2'
compile 'com.fasterxml.jackson.core:jackson-databind:2.1.2'
// Repackaged XML-specific libraries
compile 'edu.usf.cutr.android.xml:jackson-dataformat-xml-android:2.1.2'
compile 'edu.usf.cutr.android.xml:stax2-api-android:3.1.1'
compile 'edu.usf.cutr.android.xml:stax-api-android:1.0-2'
compile 'edu.usf.cutr.android.xml:aalto-xml-android:0.9.8'

そして、重複でビルド時間が失敗しました

Duplicate files copied in APK META-INF/services/com.fasterxml.jackson.core.ObjectCodec

そう追加:

packagingOptions {
    ...
    exclude 'META-INF/services/com.fasterxml.jackson.core.JsonFactory'
    exclude 'META-INF/services/com.fasterxml.jackson.core.ObjectCodec'
}

除外を追加すると、ビルドおよびデプロイされますが、スタックダンプの下でランタイムに失敗します (私の理解では、クラスパスに追加されていても、SAX プロバイダーを見つけることができません)。

edu.usf.cutr.javax.xml.stream.FactoryConfigurationError: Provider com.bea.xml.stream.MXParserFactory not found
            at edu.usf.cutr.javax.xml.stream.FactoryFinder.newInstance(FactoryFinder.java:72)
            at edu.usf.cutr.javax.xml.stream.FactoryFinder.find(FactoryFinder.java:176)
            at edu.usf.cutr.javax.xml.stream.FactoryFinder.find(FactoryFinder.java:92)
            at edu.usf.cutr.javax.xml.stream.XMLInputFactory.newInstance(XMLInputFactory.java:136)
            at com.fasterxml.jackson.dataformat.xml.XmlFactory.<init>(XmlFactory.java:97)
            at com.fasterxml.jackson.dataformat.xml.XmlFactory.<init>(XmlFactory.java:85)
            at com.fasterxml.jackson.dataformat.xml.XmlFactory.<init>(XmlFactory.java:82)
            at com.fasterxml.jackson.dataformat.xml.XmlMapper.<init>(XmlMapper.java:46)

#1 または #2 のいずれかで前進する適切な方法は何ですか?

4

3 に答える 3

0

XmlPull サポートを jackson xml に追加しようとしました。ここでフォークされたプロジェクトを見つけます。

https://github.com/finvu/jackson-dataformat-xml

現在、バージョン 2.9.6 でのみサポートされています。(ブランチ jackson-dataformat-xml-2.9.6-XmlPull を複製)

申し訳ありませんが、時間の制約により、詳細なドキュメントを提供できません。特定のブランチをプルして jar をビルドするための git と maven の知識があれば、比較的簡単に作成できます。

于 2019-02-11T06:17:41.507 に答える