Java sınıflarını oluşturmak için JAXB kullanıyoruz ve çoğul yöntem adlarının doğru olmadığı birkaç durumla karşılaştık. Örneğin, getPhysicians
umduğumuz yerde getPhysicien
alıyoruz. JAXB'nin belirli yöntemleri nasıl çoğaltacağını nasıl özelleştirebiliriz?JAXB'nin çoğul yöntem adlarını nasıl oluşturduğunu nasıl özelleştirirsiniz?
şema:
<xs:complexType name="physician">
<xs:sequence>
...
</xs:sequence>
</xs:complexType>
<xs:complexType name="physicianList">
<xs:sequence>
<xs:element name="Physician"
type="physician"
minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
oluşturulmuş Java kodu:
...
public class PhysicianList {
...
@XmlElement(name = "Physician")
protected List<Physician> physicien;
...
public List<Physician> getPhysicien() {
if (physicien == null) {
physicien = new ArrayList<Physician>();
}
return this.physicien;
}
Güncelleme
Bu Blaise tarafından yanıtlandı. Bununla birlikte, bir XML şemasında JAXB özelleştirmeleri gibi endişeleri karıştırmamaya çalışıyorum. Yani aynı tercihle o sizin için, burada şema üzerinden JAXB özelleştirme tutarak, Blaise önerdi aynı şeyi başarır JAXB bağlayıcı dosyasıdır:
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
version="2.0">
<jaxb:bindings schemaLocation="myschema.xsd">
<jaxb:bindings node="//xs:complexType[@name='physicianList']//xs:element[@name='Physician']">
<jaxb:property name="physicians"/>
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>
Doktoru doğru bir şekilde hecelemese de, fizik * e * n. Garip. –
XJC aslında liste için eleman ismine dayanıyor, bu yüzden eleman isminin doktorunu aramış olabilirsiniz. ANCAK (ve büyük ama ...) bunu yaparsanız, JAXB kullanarak nesneyi yeniden sıraladığınızda her elemanın çoğunun 'hekim' ismine sahip olacağı konusunda hala bir tuhaflık var. Çok tuhaf. Yani, ben senin yaklaşımını kullandım ve her yerde çalışıyor. – Simon