問題タブ [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.
jaxb - Jaxb EclipseLink / MOXy:get /setメソッドの名前を指定することは可能ですか?
非常に簡単な質問があります:
次のように定義されたモデルクラスがあるとします。
testPropertyの標準セッターがありますが、ゲッターの名前はgetFormattedTestProperty()であることがわかります。
Jaxb / Moxyで、特定のプロパティに使用するゲッターを指定することはできますか?
外部メタデータバインディングファイルでMOXy実装を使用しています。私が取り組んでいるプロジェクトは、Castorを使用しています。Castorのマッピングファイルに、次のように使用するゲッター/セッターを指定できます。
moxyの外部メタデータでも同じようなことが可能ですか?
そのようなカスタマイズがサポートされていない場合、フィールドを読み取り専用としてマークし、別のフィールドを書き込み専用としてマークすることは可能ですか?したがって、「formattedTestAttribute」という名前の読み取り専用プロパティと「testAttribute」という名前の書き込み専用プロパティをメタデータバインディングファイルに宣言できますか?
モデルクラスの制御は非常に限られていることに注意してください。
よろしくお願いします。
inheritance - JAXB-Eclipselink: XmlRootElement と継承
Eclipselink/MOXy 2.3 を使用すると、XML へのマーシャリングで次のユースケースがあります。
oxm.xml で次のマッピングが定義されています。
これにより、次の結果が得られます。
エクスポートされたxmlにプロパティ名が必要なかったので、変更しました:
その結果:
私が欲しいのは:
問題は次のとおりです。どうすればこれを達成できますか? MOXy は MyImpl の XmlRootElement を無視しています...
編集:
Blaiseが提案したことを試すと、次の例外が発生します。
これには、関連性がないと思ったために以前に省略した追加情報が必要です。
クラス A は次を定義するインターフェイスです: public X getMyAbstract();
MyAbstract は X を実装します (これが、インターフェイス A のマッピングに型属性を追加した理由です)。
したがって、xml-element-ref
MOXy を使用してもゲッターは「見えません」xml-element
。
inheritance - JAXB-ElipseLink: 継承されたプロパティのマーシャリングの防止
繰り返しますが、私はEclipseLink 2.3マーシャリングユースケースを持っていますが、これは非常に些細なことですが、期待どおりに機能していないようです:
プロパティ getX() を定義する抽象基本クラスがあります。このプロパティを継承するこの基本クラスから派生したいくつかの子クラスがあります。
子クラスをマーシャリングすると、このプロパティもすべての子クラスに対してマーシャリングされます。ただし、特定の子クラスについては、このプロパティのマーシャリングを防止したいと考えています。
私は試した:
@Override
子クラスのこのプロパティとそれを設定する@XmlTransient
<xml-transient java-property="X">
child-class の oxm.xml で指定します。
どちらも役に立たず、プロパティは常にマーシャリングされます - これはどのように機能するはずですか?
jaxb - JAXB-ElipseLink: @XmlJavaTypeAdapter と型属性
@XmlJavaTypeAdapter を使用して、Map 型のフィールドを XML にマーシャリングしています。これにより、EclipseLink-MOXyxsi:type="<myValueType>"
が出力 xml-element に -attribute を作成します。検証時に、参照されたタイプはもちろん見つかりません。
この属性の生成を抑制する方法はありますか?
PS: XmlAdapter タグがあれば便利です :)
validation - JAXB-ElipseLink:マーシャラーが検証していません
Eclipselink2.3マーシャラーにマーシャリング時に検証を実行してもらいたい。Schema
によって正しく作成されていることを確認しました。SchemaFactory
これをに渡し、をMarshaller.setSchema
介してハンドラーを登録しましたMarshaller.setEventHandler()
。
マーシャルの結果は明らかに有効ではありません。handleEvent(ValidationEvent event)
そのスキーマ(Eclipseで確認済み)に対して、それにもかかわらず、のブレークポイントがヒットされないことがわかります。
私はXMLフラグメントを使用してマーシャリングしてmarshal(Object, XMLStreamWriter)
おり、マーシャラーが渡したスキーマに従ってこれらのフラグメントの検証を実行することを期待しています。
なぜこれが起こらないのか誰かが考えていますか?
編集:
発生するはずの検証エラー:要素に2つの属性がありません。
この要素は、List<>に含まれているJavaオブジェクトに対応しています。私は以下を使用してリストをマーシャリングしています:
要素自体のマッピング:
したがって、すべての属性はListWrapperElement / ListElement /@attributeにマーシャリングされます。これらのうち2つが欠落しており、検証によって検出されません。
inheritance - eclipselink / Moxy:タイプに基づく継承と属性名のオーバーロード
MOXyのJAXB実装と外部メタデータバインディングファイルを使用した継承とポリモーフィズムを含むマーシャリング/アンマーシャリングの問題に直面しています。
XMLファイルやモデルクラスを制御することはできません。
モデル内には、他のDTOクラスを継承する複数のクラスがあります。これが私が作業している環境の例です。この例は構文上の目的のためだけにここにあります。実際の環境にはネストされた継承、コレクションなどが含まれます。
これが継承されるクラスです
これが1つの継承されたクラスです
そして別の
これがコンテナクラスです
これは、Aを含むMyContainerの場合に生成する必要があるXMLです。
Bを含むMyContainer
そしてCを含むMyContainer
だからあなたはすでに地平線の問題を見ることができます...
これが私が書くマッピングファイルです:
最初の問題は、そのようにクラスをバインドすると、次の例外が発生することです。
最初の質問:これは正常であると理解しています。JaxbはMyContaioner.myObject属性のタイプを判別するための何らかの方法が必要です。問題は、着信XMLファイルにアクセスできないため、xsi:typeフィールドを追加できないことです。クラス内の特定の属性の存在に基づいてクラスを決定する方法はありますか?その値に関係なく。ソースxmlに@attrFromC属性が含まれている場合、オブジェクトはタイプCである必要があります。attrFromBが含まれている場合はBです。
2番目の問題は、「name」属性がBとCの内部に存在しないため、jaxbがemを無視することです。
2番目の質問:もう1つの問題は、JaxbがXMLファイル内で期待されるようにxml属性名をオーバーライドできるかどうかわからないことです(@ nameA、@ nameB、nameCはすべてA.nameを参照しています)。それ ?
よろしくお願いします。
java - XMLマーシャリング/アンマーシャリングにMOXYを使用するようにSpringでCXFを構成する
CXFを使用してSOAPおよびRESTWebサービスを提供するJavaサーバーアプリケーションがあります。現在、XMLマーシャリング/アンマーシャリングにはJAX-Bのリファレンス実装を使用していますが、JSONマーシャリング/アンマーシャリングにはJettisonをJacksonに置き換えるように構成しました。DIとアプリケーションコンテキストの構成にSpringを使用しています。
RESTWebサービス構成スニペットは次のようになります。
web.xml
applicationContext.xml
この構成は機能し、HTTPAcceptヘッダーに応じてXMLまたはJSONのいずれかを返します。この構成で私が気に入っているのは、Springをベースにしており、代替JSONエンコーダーの作成と使用が非常に簡単なことです。CXFの構成の詳細については、こちらをご覧ください。
私の問題は、提供する新しい(追加の)REST Webサービスがあり、この新しいWebサービスに別のJAX-BXMLバインディングを使用したいということです。MOXyがこれを実行できることは理解していますが、マーシャリング/アンマーシャリングにMOXyを使用するようにCXFエンドポイントを構成する方法(さらに、カスタムXMLマッピングファイルについてMoxyに通知する方法)を理解できません。また、この新しいWebサービスは、Acceptヘッダーに応じてXMLまたはJSONのいずれかを返します。また、MOXy 2.4+でもそれを処理できることを読みました!
理想的には、他の既存のサーブレットに影響を与えることなく、この新しいエンドポイントにMOXyを使用できます。
java - JAX-B:子要素にXML属性がありません
編集:私はもともと私の質問から重要な詳細を省略しました-マーシャリングされるJavaオブジェクトを返す私のサービスメソッドFoo
は、クラス実装タイプ()ではなくインターフェイスタイプ()を返しますFooImpl
。
いくつかの要素と属性にJAX-Bアノテーションを付けた単純なJavaクラスがあります。
編集:FooImplクラスには次の名前のインターフェイスがありますFoo
:
を返すサービスメソッドがある場合Foo
、期待どおりの結果が得られます。
しかし、を含む別のクラスもList<Foo>
あり、それがマーシャリングされると、のXML要素には属性foo
が含まれませんid
!!
リストを保持するクラスは次のようになります。
私はたまたまJAX-B実装としてMOXyを使用していますが、それは重要ではないと思います。
java - moxyjaxbのcharacterEscapeHandlerを設定する方法
characterEscapeHandler
moxy jaxbのカスタムを設定しようとしていますが、例外が発生します。
javax.xml.bind.PropertyException:名前:com.sun.xml.bind.characterEscapeHandler値:.。
のcom.sun.xml.bind.characterEscapeHandler
プロパティを追加することで実行します(標準のjaxbでも機能します)。marshallerProperties
org.springframework.oxm.jaxb.Jaxb2Marshaller
XmlCdataについて知っています。ただし、!Cdata [[ ..が追加されるのは望ましくありません。文字をエスケープしたくない(Cdataを追加しない)だけです。
jaxb - Moxy+継承+xml-root-elementとしてのパッケージ名
eclipseLinkmoxyを使用して抽象クラスを拡張しているクラスをマーシャリングしようとしています。
私はマッピングにxmlを使用します:
これで、マーシャリングを解除するときにすべてが正常になります。オブジェクトをマーシャリングしているときに問題が発生します。それ以外の
私が取得するルート要素のみ
ルート要素として。興味深いこと-抽象クラスからExampleにフィールドをプッシュし、extends AbstractExampleキーワードを削除するとすぐに、ルートが本来あるべき姿になります。
私は何か間違ったことをしていますか?私は本当に抽象クラスを拡張する必要があります。そうしないと、コードに多くの冗長性があります。