問題タブ [jackson-dataformat-xml]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
json - XMLシリアライゼーションJAXBとJackson-dataformat-xml?
JSON と XML の両方のデータ形式のシリアライゼーション/デシリアライゼーションをサポートしたい XSD があります。
xjc
ユーティリティを使用してモデル クラスを生成しました。
というわけで、今までJacksonのJSONライブラリを使ってJSONデータを扱ってきました。
Java クラスを変更できないため、(フィールド名の変更)などの他の機能を使用して構成ObjectMapper
し、コードを使用してシリアライゼーションの構成を提供しました。Mix-In annotations
PropertyNamingStrategy
SerializationFeature.WRAP_ROOT_VALUE
XMLシリアル化プロセスで同じことをしたいと思います。
さまざまなオプションについてオンラインで読みました:
- JAXB
- Jackson ライブラリ + Jackson-dataformat-xml.jar
- Xストリーム
私のケースに最も適しているのはどれですか (POJO を注釈付きで編集できず、コード構成のみが許可されます)??
xml - Jackson/Woodstox XML エンコード文字解釈
Jackson と Woodstox を使用して (ドキュメントの推奨に従って) 読み取り、編集、書き込みを行うための指示が記載された XML ファイルを受け取りました。ほとんどの場合、これはそれほど難しいことではありません。彼らは両方とも、それが何をするかについてかなり上手です。ただし、この時点で、問題に遭遇しました。
XML オブジェクト自体に XML オブジェクトが含まれています。例えば:
XML ファイルを Jackson アノテーション付きの Java オブジェクトに読み込んだ瞬間、 と のすべてのインスタンスが、Woodstox によってそれぞれ と<
に>
変換されます。オブジェクトを XML ファイルとして書き戻すと、<
>
<
<
>
>
ファイルを読み取ろうとしている私のメソッドの最も単純なバージョンは次のとおりです。
上記の例では、Jackson がアノテーションを付けた Java オブジェクトは次のようになります。
最後に、私の依存関係は次のようになります。
これは、Jackson が Woodstox の BufferingXmlWriter を使用したために発生しているようです。この特定のライターは、これらの文字をインターセプトしてエンコードしますが、その決定を回避する方法はないようです。
最後に問題を要約すると、XML ファイルが与えられました。その XML ファイルには、XML を壊さないようにエンコードされた ( および ) 記号 ( および ) を含む属性と要素が含まれてい<
ます。Woodstox がファイルを読み取るとき、XML に含まれる実際の文字列を Java オブジェクトに渡す代わりに、文字をデコードします。書き込み時に、のみとして再エンコードされます。これは、Jackson が Woodstox の BufferingXmlWriter を使用しているため、これらの文字のエンコードを回避するように構成できないように思われるため発生しているようです。>
<
>
<
<
その結果、私の質問は次のとおりです。
Woodstox XML リーダーを使用するように Jackson オブジェクトを構成して、XML ファイル内の文字をさらにエンコードせずに読み書きできるようにすることはできますか?それとも、自分のニーズに合わせて別のソリューションを検討する必要がありますか?
android - XmlMapper 例外を修正する方法 - java.lang.VerifyError: com.fasterxml.jackson?
これを実行しようとしたときに問題が発生しましたjackson-dataformat-xml-2.8.5.jar
:
次の例外をスローします
私が調査したところ、Jackson 1.3 で導入されたバイナリ非互換性に関係しています。Tatu Saloranta が彼の古いブログで述べているように、残念ながらオンラインではありません。
少なくとも「非ベータ」リリース (1.0 以降) については、常に互換性を非常に高く評価してきました。その結果、どの 1.x リリースも以前のリリースよりも単純なプラグ アンド プレイになるという考えがありました。これは、パッチ リリースでは機能します。しかし、すべてのマイナー リリースがこのように機能しているわけではないことがわかりました。たとえば、バージョン 1.2 と 1.3 には予期しない非互換性があります。
問題はこれです: ほとんどの場合、バイナリ互換性はソース互換性よりも難しい目標ですが、つまり、ソース互換性を壊すと、バイナリ互換性を壊すことがほぼ保証されますが、厳密にはそうではありません. 具体的には、ソース互換性はあるがバイナリ互換性がない特定の変更を行うことは十分に可能です。
具体的な例としては、何も返さないメソッド (「void メソッド」) を何かを返すメソッドに変更しても、コンパイルは中断されません。しかし、実際にはバイナリ互換性が損なわれます。うーん。
これはまさに、構成メソッド呼び出しの連鎖を可能にするために、ObjectMapper を「流暢な」パターンに従わせるとよいと判断したときに起こったことです。この「隠された」API の変更がなければ、これは素晴らしいことです...
私はAndroid開発にかなり慣れていないので、これを修正する方法がよくわかりません。
からの依存関係のリストでわかるように、私はすでに全面的に同じバージョンの Jackson を使用していることを確認しましたapp/build.gradle
。
公式のFasterXML Jackson github ページによると、私が使用している拡張機能はサポートされている必要があります...
XML: XML をサポートします。ストリーミングとデータバインドの両方の実装を提供します。JAXB の「コード優先」モードに似ています (「XML スキーマ優先」はサポートされていませんが、JAXB Bean を使用できます)。
この問題は、プロジェクトの github ページでも報告されましたが、実際の解決には至りませんでした。-- github.com/FasterXML/jackson-dataformat-xml/issues/116
更新jarjar
:次の依存関係で使用しました:
また、すべての依存関係を最新バージョンと myappcompat
およびsupport
api にアップグレードしました。
エラーが続く -
うまくいけば、誰かがこれに光を当てることができますが、何が原因なのかわかりません...
xml - Jackson を使用した XML から POJO への逆シリアル化の問題: 文字列値から逆シリアル化するための文字列引数コンストラクタ/ファクトリ メソッドがありません
Java POJO に変換 (デシリアライズ) する必要がある XML ドキュメントがあります。XML ドキュメントの構造を変更できません。マッピングには Java 8 と Jackson フレームワークを使用しています。 Gradle の依存関係:
ラッパー XML ドキュメント:
解析する XML ドキュメント:
ドキュメントを解析するメソッド:
例外:
一番上の行は次のように述べています。
参照している値は、次のタグの下にあります。
タグを移動 (移動)<apr>16.05</apr>
すると、パーサーが機能し、例外は発生しません。タグを別のタグに置き換えても、同じ例外が発生します。何らかの理由で、ラッパー タグ内の最後のタグにのみ影響します。<rate_details>
どのような問題が考えられますか?