2

さまざまなレベルの詳細またはさまざまな詳細モードで「ユーザー プロファイル」を配信できるサービスがあります。

これらのユーザー プロファイルはデータベース内で JPA2 と同期されており、すべて正常に動作しています。MOXy (EclipseLink) を使用して、プロファイルを XML でシリアル化し、ここでもすべて正常に動作しています。

ただし、詳細モード (BRIEF、SUMMARY、FULL) は、XML でシリアル化されたユーザー プロファイル内の特定の要素の有無によって実装されます (たとえば、要素 QueryHistory は、BRIEF 詳細モードを使用する場合はシリアル化しないでください)。

簡単に言うと、一部の要素をシリアライズしてはならないことを JAXBContext に指定し、実行時にそれを指定したいと考えています。

私がよく理解していれば、MOXy Extensible Models - Refresh http://blog.bdoughan.com/2011/06/moxy-extensible-models-refresh-example.htmlはそれを行うことができますが、ここの誰かがより簡単な方法を知っていますか?この機能を実装しますか?

4

1 に答える 1

2

注: 私はEclipseLink JAXB (MOXy)のリーダーであり、JAXB 2 (JSR-222)エキスパート グループのメンバーです。

データのさまざまなビューの概念をサポートするために、それぞれのマッピングを表すために の異なるインスタンスを用意することをお勧めしますJAXBContext: BRIEF、SUMMARY、FULL。MOXy を使用すると、外部マッピング ドキュメントを利用して、ドメイン モデルに複数のマッピングを適用できます。

戦略

  1. 完全なモデルをマッピングし、XML メタデータを使用してマッピングを削減するための注釈
  2. 最小限のモデルをマッピングし、XML メタデータを使用してマッピングを拡張するための注釈

サンプルコード

JAXBContext同じクラス ( ) に基づいて構築された の3 つのインスタンスですUserProfileが、MOXy の外部マッピング ドキュメントによって制御されるマッピングが異なります。

JAXBContext briefContext = JAXBContext.newInstance(UserProfile.class);

Map<String, Object> summaryProperties = new HashMap<String, Object>(1);
summaryProperties.put("eclipselink-oxm-xml", "summaryMapping.xml");
JAXBContext summaryContext = JAXBContext.newInstance(new Class[] {UserProfile.class}, summaryProperties);

List<String> fullMappingXMLs = new ArrayList(2);
fullMappingXMLs.add("summaryMapping.xml");
fullMappingXMLs.add("fullMapping.xml");
Map<String, Object> fullProperties = new HashMap<String, Object>(1);
fullProperties.put("eclipselink-oxm-xml", fullMappingXMLs);
JAXBContext fullContext = JAXBContext.newInstance(new Class[] {UserProfile.class}, fullProperties);

JAXBContext以下は、複数のマッピング ドキュメントから をブートストラップする方法を示す例です。

拡張可能なモデル

MOXy のマッピング メタデータを拡張する機能は、実行中のアプリケーションを停止することなくメタデータを変更しようとしている開発者を対象としています。この例は、新しい質問をサポートするために強化する必要があるオンライン調査をサポートするドメイン モデルです。

于 2012-03-30T14:08:56.190 に答える