xml'de ad alanlarını kullanıyorum, bu yüzden kafam karıştı ve biraz netleme istiyorum. Çok farklı ad alanlarına sahip xml belgeleri aldığım bir java hizmetim var ve çalışmamı sağladığımda, kontrol etmek istediğim bir şey yapmam gerekiyormuş gibi hissediyorum. ile açıklamalı sınıftaJaxb: Aynı pakette birden çok ad alanı bulunan unmarshalling xml
@XmlRootElement(name="Train", namespace="http://mycompany/train")
ve her alan: Bir Train.java ile sınıf düzeyinde ek not verdiğiniz
@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
)
: gibi benim package-info.java olarak benim şema ek açıklaması :
@XmlElement(name="Color") for example
Tren Yolcu (lar) bir listesini içermesi için bir özellik var
private Set<Passenger> passengers;
ve bu koleksiyon ile açıklamalı edilir:
sınıf kendisi ile açıklamalı Passenger.java içinde Sonra@XmlElementWrapper(name="Passengers")
@XmlElements(@XmlElement(name="Passenger", namespace="http://mycompany/passenger"))
:
Passenger.java içinde tek tek alanlar için Nihayet@XmlElement(name="Passenger", namespace="http://mycompany/passenger")
, bunlar aşağıdaki şekilde açıklamalı :
@XmlElement(name="TicketNumber", namespace="http://mycompany/passenger")
Yani gibi görünen bir xml olduğunda:
Şimdi aldığım bu xml'yi küçümsedim ve Train's Colour özelliği ayarlandı ve Passenger'ın TicketNumber özelliği ayarlandı. Ama neden çalışmak için BiletNumber üzerinde XmlElement ek açıklama üzerinde ad alanı url eklemek gerekiyor bilmiyorum ama ben Color özelliği için trende gerek yoktu. Namepace özniteliğini TicketNumber üzerindeki XmlElement ek açıklamasından kaldırırsam, xml isteğindeki ad alanı önekini de kaldırmazsam, xml değerinden alınan değer nesneye eşlenir. Yolcu için XmlRootElement üzerinde tanımlanan ad alanı özniteliğine sahip olduğumdan beri, tıpkı benim için her zaman olduğu gibi sınıftaki her alan için bunu yapmam gerekmediğini hissediyorum. yanlış bir şey kurmuş olmalı. Birisi bana doğru yönde işaret edebilir mi? Teşekkürler!
teşekkürler. Bu benim problemimi çözdü ve hayal ettiğim gibi çalışıyor. XmlRootElement öğesini her "alt sınıfta" hatalı olarak kullanıyor ve XmlType yerine bu açıklamada ad alanını bildiriyordum. – Frequentcrasher
@Blaise Doughan Lütfen, her iki ad alanı için de önek kullanmadan kullanabilir miyim, lütfen öner. –