1

JAXBContextの構成に光を当ててください。与えられた:

  • com.mycompany.user01234いくつかのJAXB注釈付きクラスを備えたカスタマーライブラリ
  • すべてのクラスは、同じパッケージにある単純なPOJOです。
  • クラスには次の注釈が付けられます@XmlType

com.mycompany.user01234.UserClass1.class顧客は、Webサービスエンドポイントを介してのインスタンスをサーバーにマーシャリングします。サーバー側では、次のことを行います。

JAXBContext jbc = JAXBContext.newInstance("com.mycompany.user01234")
Unmarshaller um = jbc.createUnmarshaller();
JAXBElement<Object> element = um.unmarshal(source, Object.class);
Object customerInput = element.getValue();

そして、次のようにカスタマーライブラリにパッチを適用した場合にのみpackage-info.java正常に機能します。

@XmlSchema(elementFormDefault = XmlNsForm.QUALIFIED)
package com.mycompany.user01234;

残念ながら、この@XmlNsForm注釈が何であるか、およびそれが非マーシャリングプロセスにどのように影響するかについての明確な説明は見つかりませんでした。これが最初の質問です。

2番目の質問は、(指定されたレイアウトで)そのQUALIFIED値をいくつかのプロパティまたはデフォルトに入れることができるか、JAXBContextまたは他の非宣言型の手段を使用してを取り除くことができるかどうかですpackage-info.java

よろしくお願いします!

4

1 に答える 1

2

elementFormDefaultこれは、要素の属性<xs:schema>(つまり、XML スキーマ ドキュメントの最上位要素)に正確に対応します。それが(その定数で)行うことは、スキーマによって定義された名前空間の要素<foo:bar>が修飾子で(つまり、の代わりに<bar>)レンダリングされる必要があることを示しています。名前空間が宣言される正確な方法も、2 つのスタイル間で異なります。XML 情報セットに関しては、2 つのスタイルは完全に同等です。名前空間が XML で正しく宣言されている場合、JAXB も同様に満足するはずです (シリアライズ時にのみ値を使用する必要があると思います)。

JAXBContext期待しているクラスを渡して、発見コードへの依存度を少し下げることをお勧めします (それが実際に作成されているクラスであると仮定します) FooBar

JAXBContext jbc = JAXBContext.newInstance(FooBar.class);
FooBar customerInput = (FooBar) jbc.createUnmarshaller().unmarshal(source);

(上記のコードは、私のコードのテスト スイートで行っていることから抽象化されたものであり、確実に既に機能しています。)

于 2011-09-06T12:48:16.227 に答える