Javaアプリケーションでイベントを公開するためのシリアル化フォーマットとしてAvroを検討しています。実行時に未知のAvroメッセージを特定のJavaクラスに変換することは可能ですか?
私がしたいのは、いくつかのAvroバイトをAvro Mavenプラグインを使って生成した特定のJavaクラスのインスタンスに変換することです。逆も同様です。
私のコードを使用している開発者が特定のイベントを購読し、その特定のイベントを表す特定の生成クラスのインスタンスを受け取ることができるようにしたいと思います。 Object、ただしAvro固有のコードに触れる必要はありません)。
SpecificDatumReaderを使用してコードを記述し、生成されたクラスを渡してどのクラスを期待するかを指定することで、これを行うことができます。残念なことに、これは生成されたすべてのクラスのコードを記述する必要があります。代わりにGenericDatumReaderを使用していますが、これは私が望む生成されたクラスのインスタンスを与えません。私はこれら2つのソリューションの間に何かを求め、出力として特定のオブジェクトを取得しますが、汎用アプローチの柔軟性を持っています。
私は、シリアライズされたメッセージのスキーマをチェックし、このためのSpecificDatumReaderを作成し、生成されたクラスのインスタンスを作成するソリューションを考えています。
これはすべて可能ですか?私はこれについてどうやって行くのですか?どんな助けもありがとう!
より具体的なコンテキスト情報:私は、SpringアプリケーションでRabbitMQを使用してこれらのイベントを公開し、購読しています。 SpringはRabbitMQを簡単に使用できるようにRabbitTemplateを提供しています。このクラスではMessageConverterを設定できます。私がしたいのは、バイトを数多くの可能なJavaオブジェクト(Mavenプラグインで生成されたもの)とJavaオブジェクトをバイトに変換するために作成したAvroスキーマを使用する一般的なMessageConverterを作成することです。後者(オブジェクトからバイトへ)は実行可能なように聞こえるが、私は以前のもの(オブジェクトへのバイト)についてどのように動くか分からない。
更新日12月29日2016 :提案された解決策はどれも私たちのためには役に立たなかった。最終的に我々はAvroから離れ、まったく別の解決策に向かった。したがって、私はそれが私を助けなかったし、その正しさを保証することはできませんので、私は提案された答えを受け入れません。
お問い合わせください。自分で試してみてください。 –
@PhilippSanderこんにちはフィリップス、私は試しているが、私はこの機能を有効にするように見えるAPIを見つけることができないので固執しています。私は誰かが正しい方向に私を指すことができることを望んでいた、私は誰もこのコードを書くことを求めていない。 –