問題タブ [moxy]
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 - JAXB / EclipseLink : 型を動的にアンマップする
さまざまなレベルの詳細またはさまざまな詳細モードで「ユーザー プロファイル」を配信できるサービスがあります。
これらのユーザー プロファイルはデータベース内で 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はそれを行うことができますが、ここの誰かがより簡単な方法を知っていますか?この機能を実装しますか?
jaxb - moxy:RuntimeTypeInfoSetと同等のものは何ですか
jaxb-implでは、xmlメタデータから適切なJavaリフレクションデータにマップするために使用できるRuntimeTypeInfoSetオブジェクトを取得できます。モクシーに相当するものは何ですか。
更新:私のユースケースは、要素名にマップするプロパティを見つけることです。もちろん、Javaリフレクションを使用してそれを行うことはできますが、面倒です。
jaxb - MOXy JAXB: 要素をマーシャリングから除外する方法
私は自分のモデルを持っています:
そして、次のようにオブジェクトを埋めます。
これにより、次の XML が生成されます。
ご覧のとおり、「id」プロパティの @XmlPath アノテーションはありませんが、これは最終的な XML にも存在します。「id」プロパティをnullに設定することでこの動作を回避できることはわかっていますが、別の方法があるかどうかを知りたいです。ポイントは、私の実際のモデルはこれよりもはるかに大きく、多くのプロパティを null に設定する必要があるということです。
何か助けはありますか?
前もって感謝します。
java - java.util.Mapを実装するクラスでMOXyのメタデータを使用する場合のNPE
状況
EclipseLinkのMOXyを使用しており、Mapインターフェイスを実装するクラスで外部OXマッピングXMLを使用しようとしています。ただし、JAXBContextを作成しようとするたびに、次のNPEが取得されます。
詳細
この問題は、マップされているクラスがjava.util.Mapインターフェースを実装している場合にのみ発生します。マッピングしているクラスがそのインターフェースを実装していない場合、すべてが正常に機能します。これが私がマップしようとしているクラスの単純化された例です:
これが私が使用したいMOXyOXメタデータの簡略化されたサンプルです:
JAXBContextを作成する方法は次のとおりです
重要な場合に備えて、EclipseLinkバージョン2.3.2を使用しています。バージョン2.2.1でも試してみましたが、同じ結果になりました。
私の質問
java.util.Mapインターフェースを実装するクラスでJAXBを使用しようとしたのはこれが初めてで、基本的なものが欠けているかどうか知りたいです。OXマッピングがマップの名前/値のペアで機能することは期待していませんが、代わりに、クラスに追加されたカスタムのゲッターとセッターで機能します。
このような構成は機能するはずですか?
追加の詳細
- サンプルコードで使用されているDelegatedMapは、 java.util.HashMapを拡張せず、インスタンスをラップしてMapインターフェイスを実装するだけです。また、そのクラスには@XmlAccessorType(XmlAccessType.NONE)という注釈が付けられています。
- SampleClassAに使用するMapインターフェイスを実装する抽象クラスに関係なく、同じエラーが発生します。SampleClassAがマップを実装しないクラスを拡張する場合、すべてが正しく動作します。
- 私が使用しているコードベースでは、Mapインターフェイスを実装するために多くのクラスが必要です。
eclipselink - MOXyは、各ゲッターに明示的に注釈を付ける必要なく、ゲッターのみでPOJOをシリアライズできますか?
だから私はクラス名を持っている:
マッピング XML で各プロパティをリストすることなく、マッピング XML を使用してこのクラスのインスタンスをシリアル化したいと思います。
したがって、理想的には、次のようなマッピング ファイルが必要です。
30 以上のプロパティを持つシリアル化のみ (意図的にセッターなし) を目的とした、このようなレガシー DTO クラスがいくつかあります。理想的には、マッピング ファイルに各プロパティをリストすることは避けたいと思います。
jaxb - JAXB/MOXy は通常のクラス (非列挙型) と同じ方法で列挙型をシリアライズできますか?
次のように列挙型が定義されていると想像してください。
デフォルトでは、MOXy は次のように JSON にシリアライズします。
MOXy (マッピング ファイル内) を構成して、通常のクラスのように列挙型をシリアル化する方法はありますか。
jaxb - クラス全体またはマッピングファイルでグローバルに JAXB/MOXy で null 値のシリアル化ポリシーを定義できますか?
個々のプロパティごとに null 処理ポリシーを定義する方法しか見つかりませんでした。
xml-bindings レベルまたは少なくとも java-type レベルでマッピング ファイルにグローバルに定義する方法はありますか?
java - 拡張クラスの使用時に JAXB afterUnmarshall が呼び出されない
BaseBeanEx
JAXB アノテーション付き Bean ( ) を拡張する Bean ( )を作成しBaseBean
ました。はデータ構造のBaseBean
どこかのリストにあり、変更できません。ソフトウェアは、BaseBeanEx
必要なときはいつでも明示的なキャストを行います。の代わりにObjectFactory
to createも書きました。これはすべて正常に機能しますが、呼び出されないメソッドを追加しました。BaseBeanEx
BaseBean
afterUnmarshal
BaseBeanEx
これはバグですか、それとも仕様によるものですか? 後者の場合、エレガントな回避策はありますか?
デフォルトの JAXB エンジンを使用しています。
java - XmlDiscriminatorNode、XmlSchema 名前空間、および elementFormDefault=QUALIFIED
私はeclipselink-2.3.2を使用しています。私のパッケージには注釈が付けられています:
@XmlSchema(namespace = "http://example.com/namespace", elementFormDefault = XmlNsForm.QUALIFIED)
私は次のクラスを持っています:
次のように有効な XML を逆シリアル化しようとすると、次のようになります。
<box xmlns="http://example.com/namespace"><a thetype="b" /></box>
説明的な例外が発生します。
@XmlSchema
パッケージからを削除しxmlns
、ルート要素から属性を削除すると、機能します。QUALIFIED から UNQUALIFIED に変更すると、醜いプレフィックス付きの XML をフィードする限り機能します。
デフォルトの名前空間を宣言しているため、接頭辞なしでも機能すると思いましたが、例外はありませんが、フィールドは null のままです。
EclipseLink コードをステップ実行すると、QNameInheritancePolicy.classFromRow
が呼び出されたときUnmarshalRecord.get
に、名前空間 URI "http://example.com/namespace" の下の属性 "thetype" にアクセスしようとしていることがわかります。
XmlSchema elementFormDefault を UNQUALIFIED に変更すると、namespaceURI が null に戻り、属性が適切に取得されます。
xml - eclipselinkmoxyxpath-名前にダッシュが含まれる要素でxml-path式を使用できません
私は現在プロジェクトでmoxyを使用していますが、解決策が見つからない問題に直面しています。
クライアントから受け取ったxmlをJavaクラスにマップするためにxmlマッピングファイルのみを使用します。
私の問題は、要素名が次のように「Eメール」であるということです。
example@gmail.com
受信したxmlにはリストがあるので、最初に次のようにマップしようとします。
xml-element java-attribute = "eMail" type = "java.lang.String" xml-path = "E-Mail / text()" container-type = "java.util.List"
この式は同じタイプのオブジェクトで機能しますが、要素名にダッシュはありません。
しかし、この場合は機能しませんでした。(xml-path式は機能しません)。
いろいろな表現を試しましたが、解決策が見つかりませんでした...
手伝ってくれませんか?誰かがすでにこの種の問題に対処していますか?