xml で名前空間を使用するのは初めてなので、ちょっと混乱しており、明確にしたいと思います。私は、さまざまな名前空間を持つ xml ドキュメントを受信している Java サービスを持っています。動作している間に、何か間違ったことをしたに違いないので、確認したいと思います。私の package-info.java には、次のようなスキーマ注釈があります。
@javax.xml.bind.annotation.XmlSchema(
xmlns={
@javax.xml.bind.annotation.XmHS(prefix="train", namespaceURI="http://mycompany/train"),
@javax.xml.bind.annotation.XmHS(prefix="passenger", namespaceURI="http://mycompany/passenger")
},
elementFormDefault = javax.xml.bind.annotation.XmlNsForm=QUALIFIED
)
クラスレベルで次の注釈が付けられたTrain.javaがあります。
@XmlRootElement(name="Train", namespace="http://mycompany/train")
クラスの各フィールドには、次の注釈が付けられています。
@XmlElement(name="Color") for example
列車には乗客のリストが含まれているため、プロパティがあります
private Set<Passenger> passengers;
このコレクションには次の注釈が付けられています。
@XmlElementWrapper(name="Passengers")
@XmlElements(@XmlElement(name="Passenger", namespace="http://mycompany/passenger"))
次に Passenger.java 内で、クラス自体に次の注釈が付けられます。
@XmlElement(name="Passenger", namespace="http://mycompany/passenger")
最後に、Passenger.java 内の個々のフィールドには、次のように注釈が付けられます。
@XmlElement(name="TicketNumber", namespace="http://mycompany/passenger")
したがって、次のようなxmlがある場合:
<train:Train>
<train:Color>Red</train:Color>
<train:Passengers>
<train:Passenger>
<passenger:TicketNumber>T101</passenger:TicketNumber>
</train:Passenger>
</train:Passengers>
</train:Train>
ここで、受け取ったこの xml をアンマーシャリングし、Train の Color プロパティが設定され、Passenger の TicketNumber プロパティが設定されます。しかし、それが機能するために TicketNumber の XmlElement 注釈に名前空間の URL を追加する必要がある理由はわかりませんが、Train の Color プロパティについてはそうする必要はありませんでした。TicketNumber の XmlElement 注釈から名前空間属性を削除すると、xml 要求から名前空間プレフィックスも削除しない限り、xml の値はオブジェクトにマップされません。Passenger の XmlRootElement で定義された名前空間属性を取得したので、Train の場合と同様に、クラスのすべてのフィールドに対してそれを行う必要はないはずです。何か間違った設定をしているに違いありません。誰かが私を正しい方向に向けることができますか? ありがとう!