2011-02-09 12 views
4

私のpojoをJAXBでjsonに変換したいのですが、私のpojoには1対多の関係があり、pojoをjsonに変換するとJAXBはエラーを生成します。これにより、無限に深いXMLが発生します。JAXBオブジェクトグラフでサイクルが検出されました

この問題は@XmlIDと@XmlIDREFの助けを借りて解決できますが、私のId属性はString型ではなくLong型です。私の知る限り、@ XmlIDはStringプロパティでのみ使用できます。

他のウェブサイトでは、eclipselink MOXyを使用することをおすすめしますが、MOXyではjsonを生成できません。

+0

JSON結合をネイティブでサポートしていますhttp://blog.bdoughan.com/2011/ 08/json-binding-with-eclipselink-moxy.html –

答えて

3

EclipseLink MOXy(私は技術リーダーです)は、双方向関係の問題を解決するために@XmlInverseReferenceアノテーションを持っています。 EclipseLink 2.4以降、MOXyはJSONを生成/使用できます。 EclipseLinkの2.4 MOXYのよう

詳細情報

+0

おかげさまで、Blaise氏のソリューションに感謝し、Rodrigo Hahnさん、Sebastien Lorber氏が提案してくれたことに感謝しています – nathan21

+0

@Mr Blaise Webのどこかに表示されます、MOXyはglassfish環境で動かないのですか?これは本当ですか? – nathan21

+0

EclipseLink MOXyはGlassFish環境(私の標準的なデモプラットフォーム)で動作しますが、設定手順についてはhttp://bdoughan.blogspot.com/2010/08/creating-restful-web-service-part-35.htmlを参照してください。 –

1

定義に循環参照の問題があります。

@XmlTransientを問題のある定義の上に置きます。

また、XmlIDと文字列の種類については、http://markmail.org/message/up6vrzjixxrvy5thを参照してください。

+0

私は '@XmlTransient'を入れましたが、それでも動作しません。 –

+2

は正常に動作しました。ゲッターメソッド –

0

JAXB仕様では、@ XmlIDでマークされたプロパティはStringプロパティである必要があります。 MOXyインプはlongを使用できます。フルJAXB準拠した実装を使用して維持する

一つのハックは、(直列化する前に)文字列フィールドに

をあなたのIDを複製するだろうJAXBについてそんなに知っているが、XStreamのは、異なるモードを使用して、あなたができるようになり、いくつかしないでくださいこれらの要素が既に表示されている場合、xmlの要素のxpathアドレス(絶対または相対)への参照を与えます。 (あなたはXStreamでJsonを行うことができます)

関連する問題