問題タブ [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 - 複数のXML要素を単一のクラスにアンマーシャリングするJAXB
複数の XML 要素にまたがる単一の概念をモデル化している次の XML 構造があります。この形式は私の管理下にありません。
私が制御できるデータベースでこれをモデル化し、 、 、およびフィールドを含むより単純なChannel
テーブルを作成したいと考えています。したがって、クラスでシングルにアンマーシャリングしたいと思います。id
type
name
List<Channel>
Wrapper
@Xml...
これは注釈で自動的に行うことができますか? 現在、JAXB を使用して個別@XmlElement(name="Channel")
のクラス リストにアンマーシャリングし、トランジェントを@XmlElement(name="ChannelName")
後処理していますが、これらの要素をマップするためのより簡単な自動化された方法が必要だと考えています。それともXSLTの仕事ですか?ChannelName/name
Channel
XML が HTTP ファイル POST ファイルとして入ってくること、および私が Spring 3、Java、および Hibernate を使用していることを知っておくと役立つ場合があります。EclipseLink JAXB (MOXy)の何かが役立つことを願っています:)
xpath - 属性値ごとに要素値を取得するためのEclipseLinkMOXy@XmlPathサポート
EclipseLink MOXy JAXB実装を使用して、@ XmlPathアノテーションを使用して、要素の属性の値に基づいて要素値を取得しようとしています。私はそれを機能させることができないようです。これはサポートされていますか?
XMLの抜粋:
<Item>
...
<ItemRefFields>
<ItemRefField id="1">12345</ItemRefField>
<ItemRefField id="2">blah</ItemRefField>
</ItemRefFields>
</Item>
POJOの抜粋:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="Item")
public class Item
{
...
@XmlPath("ItemRefFields/ItemRefField[@id='1']/text()")
private String ItemRef1 = null;
@XmlPath("ItemRefFields/ItemRefField[@id='2']/text()")
private String ItemRef2 = null;
...
}
現在、両方の値が連続してItemRef2に割り当てられ、「blah」が最終的な値になりますが、ItemRef1に値が割り当てられることはありません。これは、XPath式の属性値の部分([@ id ='x'])が無視されているためだと思います。したがって、両方のXPath式は同じものとして扱われ、これにより、式が最初にItemRef1にマップされ、次にItemRef2にマップされ、ItemRef2がItemRef1マッピングを上書きするため、ItemRef2が優先されます。
これが私の側の構文上の問題によって引き起こされていることを願っています。何かアドバイスをいただければ幸いです。
ありがとう、ケビン
java - MOXy の xml-transient 宣言はどのように機能しますか?
別のプロジェクトに、変更できない Bean のセットがあります。これらの Bean には JPA と JAXB の両方のアノテーションがあり、RESTful 実装で使用されています。私の関係のほとんどは遅延ロードされており、どの要素が実際にトランスポート用にマーシャリングされるかについて、より詳細な制御を実現したいと考えていました。
以下の変更された MOXy Customer.java クラスがあります。
MOXy eclipselink-oxm マッピングを使用してマーシャリングされるものを制御できることを望んでいましたが、期待どおりに動作していません。JAXB アノテーションを使用して、エレメント (フィールドまたはプロパティー) を一時的であると宣言しますが、eclipselink-oxm.xml ではタイプの一時的宣言しか許可されません。ただし、そのように一時的な型を宣言すると、次の例外が発生します。
例外:
xml-transient 属性を削除するか、false に設定すると、期待どおり Customer が XML に変換されます。Customer Bean を変更せずに電話番号のマーシャリングを抑制する方法はありますか?
json - MOXy JSON のサポート
RESTEasy プロジェクトの JAXB 実装として EclipseLink の MOXy を使用しています。JSON のサポートという 1 つのことを除いて、すべてが正常に機能しています。RESTEasy の JettisonMappedContext を使用していますが、残念ながら、マーシャリング後の JSON には抽象スーパークラスに属するインスタンス変数フィールドしかありません。
サブクラス:
マーシャリング後の XML:
マーシャリング後の JSON:
これを達成する他の方法はありますか?
ありがとうございました。
java - JAXB 2.x:ターゲットクラスを知らずにXMLを非整列化する方法は?
これを行う方法があれば、最もエレガントなものを知りたいです。ここに質問があります: - 抽象クラス Z があると仮定しましょう - Z から継承された 2 つのクラス、A と B という名前があります。
次のように、任意のインスタンス (A または B) をマーシャリングします。
結果の XML で、それがどの種類のインスタンス (A または B) であったかがわかります。
さて、どのように非整列化しますか
UnmarshalException というメッセージが表示されます
javax.xml.bind.UnmarshalException"
では、Z のインスタンスを取得し、アンマーシャリング後にテストできるようにアンマーシャリングを行うにはどうすればよいでしょうか? たとえば、z instanceof A の場合... z instanceof B の場合、何か他のもの... など。
アイデアや解決策をありがとう。
MOXy を JAXB Impl として JRE1.6 を使用しています。
jaxb - JAXB/MOXy:特定のノードの子孫をクローズド/独自クラスに渡し、部分的に非整列化する方法は?
XML から非整列化できるようにしたい Java クラスから始めています。スキーマを決定しながら進めています。次のような XML を使用したいと思います。
次のような Java クラスに注釈を付けたいと考えています。
<foo xmlns="http://proprietary.foo"> 要素を渡したいのですが、それは次のように機能するコンパイル済みファクトリ クラスの子孫です。
FooFactory.getFooFromDomNode(myFooElement) // Returns a private ProprietaryFooImpl as an instance of the public ProprietaryFoo Interface
ProprietaryFoo の DomHandler を作成する必要があるようですが、よくわかりません (「com.xyz.ProprietaryFooImpl も、そのスーパー クラスも、このコンテキストでは認識されていません」を取得していました)。 XmlJavaTypeAdapter に興味がある ValueType を Element として受け取る方法がわかりません。
java - JAXBエンティティへのアンマーシャリングエラー
XML ストリームをエンティティにアンマーシャリングする際に問題があります。私の外部キーは、適切な主キーを持つオブジェクトに設定されることはありません。空のオブジェクトに設定されるだけです。
外部キーを持つクラスは ProductBase と呼ばれます。BrandData (フィールド pkId) と Categories (フィールド pkId) への参照があります。非整列化して永続化すると、BrandData と Categories を問題なく処理できます。ProductBase で問題が発生しました。
ProductBase は次のとおりです。
以下のアンマーシャリング:
次のような ProductBase オブジェクトになりたいと思います。
しかし、私は得る
ProductBase p1: p1.pkId=88294 p1.brandData = (フィールド null ごとの brandData オブジェクト) p1.categories = (フィールド null ごとのカテゴリ オブジェクト) p1.ts = (値が 1970-01-01T05:22:35.06 の Date オブジェクト)
そのため、ProductBase を永続化しようとすると、null 値の問題が発生します。
これは、BradnData および Categories エンティティでの不適切な参照が原因であると期待していました。@XmlInverseReference アノテーションを使用してみましたが、うまくいきませんでした。問題が何であるか誰にもわかりますか?
BrandData エンティティ:
カテゴリ エンティティ:
jaxb - MOXyを使用してXMLにマーシャリングする場合、Java継承を非表示/フラット化できますか?
JAXB を使用して、おそらく MOXy を使用して、マーシャリングで基本クラスをそのサブクラスに「フラット化」して、Java 継承が XML に表示されないようにすることは可能ですか? 生成されたクラスに 1 対 1 で対応する手動で作成されたクラスが多数あります。基本クラスには XML で値がありません。
明らかでない場合は、schemagen 機能を使用しています。Java から始めて、スキーマを作成します。
java - JAXBでドライな状態を維持
次の形式でXMLにシリアル化する必要のあるJavaクラスをいくつか開発しています。
最初は、Foo.java
次のようになりました。
Bar.java
何がどのように見えるかを推測するのにそれほど想像力は必要ありませんBaz.java
。これらは、(この例では)、、、およびの非常に単純なラッパーint
クラスString
ですboolean
。この時点まで、すべてがハンキーなドーリーです。の第9ラウンドを書いた後
「ねえ、私はこれをどのように解決できるか知っています。必要なのは1レベルの抽象化だけです!」紹介Wrapper<T>
:
さて、実装するためFoo
に私がする必要があるのは、拡張しWrapper
、必要なファクトリメソッドを実装することだけです。
の宣言を追加し@XmlSeeAlso({... Foo.class ...})
ます。Wrapper
- プロ:これははるかに良いです。
- 短所:JAXBはこれらのオブジェクトをシリアル化しません。
JAXBの腸の奥深くに投げられたために呼び出されJAXBContext.getInstance(Wrapper.class)
たりJAXBContext.getInstance(Foo.class)
失敗したりするもの:NullPointerException
JAXB実装をMetroからMOXyに切り替えようとしましたが(実装が変更されたことを確認しました)、同様のNPEがMOXyでスローされます。
ボイラープレートを最小限に抑え、 DRYを維持しながら、必要なXMLを生成する方法はありますか?
java - Specifying the MOXy runtime for multiple Java packages
Is there a way to specify MOXy as my JAXB implementation, for domain classes spread across multiple Java packages, other than putting jaxb.properties
into every single package?