問題タブ [xmlencoder]
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.
xml-serialization - XMLEncoder/Decoderを使用してデフォルトで呼び出されるnewInstance?
試行錯誤の結果、標準の java.bean XMLEncoder/Decoder は、null コンストラクターではなく静的ファクトリの「newInstance」メソッドを常に使用することがわかりました (ただし、「newInstance」という名前の場合のみ)。これがドキュメントまたは DefaultPersistence デリゲートにあることがわかりません。
私は間違った場所を探していますか?
例:
`
loadTestFile が実行されたときの newInstance からのスタック ダンプは次のとおりです。
java - XMLEncoder は、Java 6 と比較して Java 7 で人間が読めない XML を生成します。
問題を示す簡単な例を次に示します。
Alpha と Beta の 2 つの Bean クラスを考えてみましょう。
次に、Alpha と Beta のインスタンスが作成され、Alpha オブジェクトが XML に書き込まれます。
Java 6 では、次の XML になります。
しかし、Java 7 では結果は次のようになります。
Java 7 によって生成された XML は、Java 6 の XML よりもはるかに可読性が低くなります (特に、より複雑な例の場合)。上記の例では、Java 7 エンコーダーは「ベータ」の定義内で「アルファ」の「名前」プロパティを定義します。これは、「ベータ」が「アルファ」への参照も持っているためです。この動作により、深くネストされた醜い XML が生成される可能性があります。
Java 7 の XML エンコーダーで Java 6 スタイルの XML を生成する方法はありますか?
java - XMLEncoder スキップ ActionListener
私は XMLEncoder でエンコードした JButton を持っています。ActionListener を追加しようとするまでは、すべて問題ありませんでした。今、私はこのメッセージを受け取ります
なぜこれが起こっているのか、またはそれを防ぐ方法を知っている人はいますか?
java - Windows-1252 xml ファイルを UTF-8 に変換する
Javaで大きなXMLファイル(500+MB)を「Windows-1252」エンコーディングから「UTF-8」エンコーディングに変換する方法はありますか?
java - wsimportで生成されたクラスをXMLEncoderでシリアライズするには?
wsimport ツールで生成された XMLEncoder クラスでシリアライズしたい。次の構造を持つ多くの ArrayOfXXXXXX クラスがあります。
ArrayOfSitejournal クラスをシリアル化すると、次の出力が得られます。
setItem() メソッドがないため、item プロパティはシリアル化されません。私の質問は、ArrayOfSitejournal オブジェクト全体を項目メンバーと一緒にシリアル化するにはどうすればよいですか?
このクラスは生成されているため、コードを変更できません。
シリアル化をカスタマイズするために PersistenceDelegate を記述できることを知っています。しかし、それを逆シリアル化するには、次のような呼び出しが必要です。
そのような PersistenceDelegate を書くのを手伝ってくれませんか。
java - XMLEncoder の冗長性排除機能を無効にして、POJO が完全にシリアライズされるようにする方法は?
私は、XMLEncoder
POJO を XML に変換したり、元に戻したりするために使用してきました。POJO の格納とは別に、一部の XML 出力は、レポートなどの他の形式のデータを生成するために、他のアプリケーションによっても使用されます。
これまでのところ、これはうまく機能しています。POJO が進化しても問題はありません。
最近、すべての値が実際に出力されるわけではないことに気付きました。デフォルト値が変更されていないプロパティは書き込まれません。これは私にとって問題です。
Javadoc から:
"The XMLEncoder class uses a redundancy elimination algorithm internally so that the default values of a Bean's properties are not written to the stream"
私にとっては、Bean がすべてのデフォルト値を含めて完全に出力されることが重要です。
のこの機能を無効にする方法はありますXMLEncoder
か?
java - XMLEncoder を使用して Arraylist をスレッドセーフかつシリアライズ可能にする方法
まず、SOにはこれに関する関連記事がたくさんあることは知っていますが、私の場合は見つけたものが役に立ちました。
だから、私がやっていることは、複数の子オブジェクトを持つことができる非常に単純な親オブジェクトを得ることです。どちらのオブジェクトも、Java Bean 仕様 (引数なしのコンストラクター、すべての変数のセッターおよびゲッター) に準拠しています。
複数の親が存在する場合があり、これらは次のようなリポジトリ クラスに保存されます。
新しい親が作成されるたびに、リポジトリ クラスは次のparentItems
ようにリストから構築された親リストを保存します。
保存操作は、List
を使用して を xml ファイルに保存することによって行われますXMLEncoder
。次のようになります。
これはすべてうまくいきます。ここで、いくつかの子を親オブジェクトに追加し、新しい子オブジェクトを子 List に追加して再実行しsaveParents()
ます。これが私のトラブルの始まりです:
ArrayList
親内でa を使用して子を保存すると、次のようになります。
すべてが機能します。オブジェクトは、xml ファイルの親内に保存されます。次のようになります。
ただし、これArrayList
はスレッドセーフではないことがわかっており、親オブジェクトが複数の人によって変更される可能性があることはわかっています。それで、それを修正する方法は?使用しますsynchronizedList(...)
- 右ですか?何かのようなもの ...
...その後、getter と setter をList
代わりにすばやく変更するだけArrayList
で問題ありません。うまくいくはずですが、何を推測しますか: 失敗します :-(
子オブジェクトを追加するたびに(そしてsaveParent()
その後実行するたびに)StackOverflowException
、. XML を調べると、次のようなものが表示されます。
ええと、スタック オーバーフローがどこから来たのかはわかっていると思いますが、なぜでしょうか。List
シリアル化可能である必要がありますが、よく見てください...爆発しないシリアル化可能なスレッドセーフ(または適合する他のデータ型)を取得するにはどうすればよいですか?ArrayList
それを(このシナリオで機能する)スレッドセーフにするために考えられる回避策はありますか?親オブジェクト全体をスレッドセーフにすることでしょうか?(ただし、これには他の副作用がある可能性があるため、単にそれsynchronizedList(...)
を機能させることが最もエレガントな方法です)
java - XMLEncoder 使用中の java.lang.Instantiation 例外
Java プログラムで XMLEncoder を使用しようとしていますが、java.lang.InstantiationException が発生します。以下は、私が使用している私のコードです:
これとは別に、classA と classB の 2 つのクラスがあります。どちらのクラスも Serializable を実装しています。ClassA には ClassB の ArrayList があります。両方のクラスのすべてのフィールドには、getter メソッドと setter メソッドがあります。正確なエラー (スタック トレース) は次のとおりです。
何が問題なのか、これらのエラーが何を意味するのかを理解できません。コードを修正して機能させるにはどうすればよいですか?
ありがとう。