問題タブ [protostuff]
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.
java - Protostuff - Windows で .java ファイルに対して誤った出力パスが生成される
protostuff-maven-plugin が Mac で正常に動作しているときに適切な出力パスを生成しないため、「ファイル名、ディレクトリ名、またはボリューム ラベルの構文が正しくありません」というエラーが表示されます。詳細は次のとおりです。
エラーの原因: java.io.FileNotFoundException: C:\ABC\target\generated-sources\com\abc\optimization\common\vdf\C:\ABC\src\main\protostuff\VDFCollectionTypeSchema.java (ファイル名、ディレクトリ名、またはボリューム ラベルの構文が正しくありません)
ファイル名だけをパスに追加する必要がありますが、別の絶対パスを追加します。構成セクションは次のとおりです [完全な構成については、添付の画像を参照してください]:
出力パスは次のようになります: C:\ABC\target\generated-sources\com\abc\optimization\common\vdf\VDFCollectionTypeSchema.java
代わりに、C:\ABC\target\generated-sources\com\abc\optimization\common\vdf\C:\ABC\src\main\protostuff\VDFCollectionTypeSchema.java を生成します。
protostuff バージョン 1.3.0、1.2.0 を使用していますが、この問題もあります。
java - 実行時にフィールドのクラスを置き換える (プロトスタッフ用)
クラスの異なるバージョン間での下位互換性のためのフレームワークに取り組んでいます (シリアル化されたバイナリ表現から)。
私が行き詰まっていることの1つは、クラスで使用されるフィールドを、実行時にフィールドのクラスの別のバージョンに置き換える方法です。
問題のクラスが親オブジェクトである場合、クラスローダーを使用してそれを行う方法を知っています( Java - 同じクラスの異なるバージョンをロードする方法は? )。
しかし、これは、既にオブジェクトがあり、そのフィールドを変更する必要がある場合 (または方法がわからない場合) には機能しません。リフレクション API には、インスタンス化された後にクラスを設定するメソッドもないようです。
分かりやすいように例を出します。ラッパークラスがあるとしましょう:
ここで、変数 content としてロードしているクラスが 20 バージョン前に変更されたとします。当時から使用されていた元の .java (または .class-) ファイルがまだあります。私がやろうとしているのは、コンテンツの古いクラス バージョンでラッパーのインスタンスを作成し、それをディスクからロードし、それを変換して、コンテンツに使用されるクラスの現在のバージョンでラッパーの最新バージョンに書き込むことです。
また、非常に汎用的である必要があるため、ラッパーで実際のクラスではなくオブジェクトを使用しているのはそのためです。本当の問題は、プロトスタッフのランタイム (デ) シリアル化にこれが必要だということです。つまり、Wrapper.class を protostuff に渡し、シリアル化スキーマを生成します。これは現在、wrapper.class ファイルが新しいバージョン (プロジェクトのパッケージにある) を自動的に参照するため、失敗します。
これがクラスローダーを通過するかどうかはわかりません。しなければならないとは思いますが、これがいつ起こるかはわかりません。
これにアプローチする最良の方法は何ですか?
protostuff - ProtoStuff を使用した JDK 1.6 および JDK 1.7 での Throwable のシリアライズおよびデシリアライズ
JDK 1.6 で実行するシステムと JDK 1.7 で実行するシステムの 2 つがあります。2 つのノード間で通信するために、ProtoStuff シリアライゼーションを使用してバイナリを変換し、別のノードに転送してバイナリをデシリアライズします。
JDK 1.7 は新しいフィールド「suppressedExceptions」を追加したため、あるノードで JDK 1.7 の Throwable をシリアライズし、別のノードに転送すると、デシリアライズできず、その逆も同様です。
2 つのノードは異なるテクノロジを使用するため、JDK 1.6 から JDK 1.7 および JDK 1.7 から JDK 1.6 に移行することはできません。
この問題を解決する解決策はありますか? 返信ありがとうございます。
よろしく、 パヴァン
java - protostuff を使用した配列のデシリアライズ
私はプロトスタッフを使用してjsonをデシリアライズしようとしていますが、オブジェクトをシリアライズすると、配列のサイズが前に置かれます
同じ文字列をデシリアライズしようとすると、それは魅力のように機能しますが、私のデータには "a":3,"b": というタグはありません。
上記のような文字列をデシリアライズしようとすると、例外がスローされます
使用される Java コード:
製品クラス:
protostuff - protostuff でマップをバイト配列にシリアライズする方法
protostuff を使用するときに java.util.Map をバイト配列にシリアル化する任意の方法です。protostuff-collectionsschema.jar ファイルに MapSchema があるのを見ましたが、その使用方法がわかりません。サンプルコードを教えてください。よろしくお願いします。
serialization - Protostuff による動的スキーマとデシリアライゼーション
Protostuff を使用して、protobuf ソースが利用できないいくつかの異なるタイプのオブジェクトをシリアル化/逆シリアル化しようとしています (これはサーバー サーバー RPC シナリオです)。シリアル化するオブジェクトの型がわかっているので、シリアル化は問題なく実行され、スキーマを作成できます。
ここでProtobufIOUtil.toByteArray
、バイト配列を使用して取得し、それをリモート サーバーに渡します。ただし、「不明な」タイプのオブジェクトのスキーマを作成する方法がないため、リモート サーバーでこのバイト配列を逆シリアル化できないようです。これを乗り越えて、Javaのネイティブシリアル化を使用するのと同じ方法でProtostuffを使用する方法はありますか?
java - Protostuff 1.3.8 の RuntimeSchema
Protostuff の使い方を学ぼうとしています。protostuff 1.0.7 を使用する例があります。この例では、クラス RuntimeSchema が使用されています。
現在のバージョンの protostuff (1.3.8) でコードを再現しようとすると、クラス RuntimeSchema が存在しないように見えるため、失敗します。現在のチュートリアルをネットで検索しましたが、見つけることができたのは https://github.com/protostuff/protostuff/wiki/Examples だけでした。正直、わかりません。
現在のバージョンでプロトスタッフがどのように使用されることになっているのか、誰かが理解するのを手伝ってくれますか?
java - アノテーションなしのジャージー検証
Jersey ベースのアプリケーションがあり、入力に検証を追加したいと考えています。
問題は、Bean が protostuff によって生成され、検証注釈を追加できないことです。注釈/xml なしで Bean を検証する方法を見つけました: http://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#section-programmatic-api
しかし、私はJerseyに非常に慣れておらず、Beanの注釈を使用せずにこのカスタムバリデータをJerseyに追加する方法をドキュメントで見つけることができません。それを行う方法はありますか?
ジャージーバージョン - 2.8