5

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

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

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

しかし、ここでも問題は、これをエンティティ クラスにマップする方法です。

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

  • XML スキーマを持つ XML データ オブジェクト (これは JAXB 仕様に既に存在します)。
  • エンティティ Bean は、この JAXB オブジェクトへのインターフェースを拡張するか、または持っています。
  • すべての永続化機能はエンティティ Bean によって管理されます...
  • エンティティ 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 つですが、独自のプロパティとファイルを使用します (スタンドアロンのように動作します)。

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

4

2 に答える 2

2

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

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

永続層以外の場所からエンティティ Bean インスタンスを取得すること(XML からのデシリアライズなど) は、大きな問題になると言えます。

また、XML を使用して Java アプリケーション間 (JSP/サーブレットと EJB レイヤーの間など) で通信することはお勧めできません。XML のマーシャリングと追加された冗長性は、ほとんど役に立ちません。RMI を介してオブジェクトをシリアル化する (これは EJB が行うことです) と、実装、テスト、および保守がはるかに簡単になります。

于 2008-09-19T15:33:16.827 に答える
1

EclipseLink JAXB (MOXy)を使用して、JPA エンティティを XML にマップできます。

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

于 2010-07-07T16:52:11.887 に答える