JAXB インターフェースを使用した EJB - XML のインターフェース

StackOverflow https://stackoverflow.com/questions/101989

  •  01-07-2019
  •  | 
  •  

質問

XML スキーマを既存の EJB プロジェクトに追加しようとしていました。JAXB は、XML スキーマを Java クラスにバインドするために使用されます。EJB がセッション中に、検索エンジンを使用して DTO をクロールすることになります。

エンティティクラスファイルをXMLスキーマにマップする直接的なアプローチは見つかりませんでした。

これまでに達成できた唯一の方法は、Web サービスを作成し、xml スキーマ (XSD) を生成する WSDL を生成してから、JAXB (xjc コマンド) を通じて XSD ファイルを解析して Java クラス ファイルを作成することです。ここで、mapping-binding.xml ファイルを使用して、XML と Java クラス ファイルの両方をマッピングできます。

しかし、ここで再び問題となるのは、これをエンティティ クラスにどのようにマップするかです。

これが私たちが達成したいことです:

  • XML スキーマを使用した XML データ オブジェクト (これはすでに JAXB 仕様に存在します)。
  • Entity Bean は、この JAXB オブジェクトを拡張するか、この JAXB オブジェクトへのインターフェースを持ちます。
  • すべての永続化機能はエンティティ Bean によって管理されます。
  • Entity Bean には、JAXB にある XML マーシャリング機能とアンマーシャリング機能が含まれます。
  • 値オブジェクトは、エンティティ Bean オブジェクトからバイナリ形式または XML 形式で取得できます。
  • JSP は、値オブジェクトから XML スキーマと XML データを簡単に抽出し、XSL 変換などの操作を実行できます。

私の主張は、Entity Beans には JAXB オブジェクトとインターフェイスするための標準的な方法がないということです。

Castor が解決策になるかもしれませんが、やはり Web サービスを実装するか、Castor JDO を使用する必要があります。

XStream は、エンティティ Bean クラス オブジェクトを呼び出して XML ファイルを生成できるコンバータ クラスを使用するため、非常に便利であることがわかりました。しかし、私は別のクラスを使用するのではなく、既存の Bean クラスに関数を組み込むことを好みませんでした。

この点について手伝ってもらえますか?


私が実際に何を達成しようとしているのかをお話します。セッション中の EJB 中に呼び出され、DTO を介してクローラーを使用して XML 形式でスナップショットを取得する検索エンジンを作成しています。検索はさまざまな条件で行われます。

Lucene は検索エンジン ツールの 1 つですが、独自のプロパティとファイルを使用します (スタンドアロンのように動作します)。

Web サービスが PHP と Java アプリケーション (EJB 層) の間で通信するために使用する DTO をすでに持っています。JAXB でこれらの DTO をクローラーとして再利用して、XML のテーブルから出力を取得したいと考えていましたが、JAXB は xml スキーマを通じて独自に生成されたクラスを使用するため、これはできませんでした。あなたが言ったように、JAXBにBeanクラスを指示する方法はまだ見つかりません。

役に立ちましたか?

解決

データ モデル (エンティティ Bean) を XML インターフェイスに緊密に結合することは、最善のアイデアではないかもしれません。これにより、一方を変更せずに他方を変更することができなくなります。

あなたが何をしようとしているのかを100%理解しているわけではありませんが、新しいクラスを作成するのではなくクラスを拡張するようにJAXBに指示する方法はあると思います。通常どおりエンティティ Bean を作成し、JAXB 生成の Bean に追加情報を追加してエンティティ Bean を拡張させることができます。

Entity Bean インスタンスをどこからか取得すると言えます。 他の 永続化レイヤー (XML からの逆シリアル化など) は 巨大な あなたにとっての問題です。

また、Java アプリケーション間 (JSP/サーブレットと EJB 層の間など) の通信に XML を使用するのは悪い考えであることに注意してください。XML のマーシャリングと冗長性の追加によって得られるものはほとんどありません。RMI 経由でオブジェクトをシリアル化する (これは EJB が自動的に実行します) と実装、テスト、保守がはるかに簡単になります。

他のヒント

EclipseLink JAXB (MOXy) JPA エンティティを XML にマッピングするために使用できます。

詳細については、以下を参照してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top