2011-06-07 19 views
5

Örneğin xsd'deki sOmE_PROPerty, java sınıfında bazı Site mülkiyeti olmayan sOmE_PROPerty olmalıdır.xjc'de Java Adlandırma Kuralları nasıl devre dışı bırakılır?

globalBindings enableJavaNamingConventions = "false" kullanmayı denedim, ancak çalışmaz.

+0

@Blaise Yanıtınız için teşekkürler, ancak örneğinizde bile işe yaramıyor. Sadece alıcıda, burada "korumalı String sOmEPROPerty" ye ihtiyacım var. Ve ilk harfi büyük harfe dönüştürmemek ve '_' harfini büyük harfe çevirmek zorunda olmamalıdır. – Smertokogt

+0

Sınıfında jaxb kaynak kodunu değiştirerek çözüldü com.sun.xml.bind.api.impl.NameConverter – Smertokogt

cevap

3

. sun.xml.bind.api.impl.NameConverter bu gibi:

public static final NameConverter standard = new Standard(); 

static class Standard extends NameUtil implements NameConverter { 
    public String toClassName(String s) { 
     return s;//toMixedCaseName(toWordList(s), true); 
    } 
    public String toVariableName(String s) { 
     return s;//toMixedCaseName(toWordList(s), false); 
    } 
    public String toInterfaceName(String token) { 
     return token;//toClassName(token); 
    } 
    public String toPropertyName(String s) { 
     String prop = s;//toClassName(s); 
     // property name "Class" with collide with Object.getClass, 
     // so escape this. 
     if(prop.equals("Class")) 
      prop = "Clazz"; 
     return prop; 
    } 
+0

Bunu bir xjc uzantısı olarak mı uyguladınız, yoksa kaynak kodunu gerçekten değiştirdiniz mi? –

+0

@RobertoBonvallet, NameConverter arayüzünü uygulayabilir ve daha sonra halka açık statik final NameConverter standart alanını yansımayla değiştirebilirsiniz. – Smertokogt

10

Sen enableJavaNamingConventions="false" yerine underscoreBinding="asCharInWord" kullanmak gerekir:

customer.xsd

<?xml version="1.0" encoding="UTF-8"?> 
<xsd:schema 
    targetNamespace="http://www.example.org/customer" 
    xmlns="http://www.example.org/customer" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    elementFormDefault="qualified"> 

    <xsd:complexType name="customer"> 
       <xsd:sequence> 
        <xsd:element name="sOmE_PROPerty" type="xsd:string"/> 
       </xsd:sequence> 
    </xsd:complexType> 

</xsd:schema> 

binding.xml

A JAXB bağlama dosyası için şema özelleştirmek için kullanılır

Java dönüşümü:

binding.xml

Kullanmadan

package org.example.customer; 

import javax.xml.bind.annotation.XmlAccessType; 
import javax.xml.bind.annotation.XmlAccessorType; 
import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlType; 

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "customer", propOrder = { 
    "sOmEPROPerty" 
}) 
public class Customer { 

    @XmlElement(name = "sOmE_PROPerty", required = true) 
    protected String sOmEPROPerty; 

    public String getSOmE_PROPerty() { 
     return sOmEPROPerty; 
    } 

    public void setSOmE_PROPerty(String value) { 
     this.sOmEPROPerty = value; 
    } 

} 

:

XJC Çağrı

xjc -d out -b binding.xml customer.xsd 

Müşteri

oluşturulan mülkiyet adları artık çizgi karakterini içerir

bunun yerine aşağıdaki XJC arama yaparsanız:

xjc -d out -customer.xsd 

Oluşturulan özellikler çizgi içermez göreceksiniz: Sınıf com JAXB kaynak kodunu değiştirerek çözüldü

package org.example.customer; 

import javax.xml.bind.annotation.XmlAccessType; 
import javax.xml.bind.annotation.XmlAccessorType; 
import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlType; 

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "customer", propOrder = { 
    "sOmEPROPerty" 
}) 
public class Customer { 

    @XmlElement(name = "sOmE_PROPerty", required = true) 
    protected String sOmEPROPerty; 

    public String getSOmEPROPerty() { 
     return sOmEPROPerty; 
    } 

    public void setSOmEPROPerty(String value) { 
     this.sOmEPROPerty = value; 
    } 

} 
+0

Cevabınız için teşekkürler, ancak örneğinizde bile işe yaramıyor. Sadece alıcıda, burada "korumalı String sOmEPROPerty" ye ihtiyacım var. Ve ilk harfi, büyük harf ve büyük harfe çevirmek için _ harfinden büyük harfe geçmemelidir. – Smertokogt

+1

Cevabınız için teşekkürler, aynı soruna sahip oldum, sorunun cevabını kullanarak çözdüm .. –

+0

bu xml için çalışıyor ama biraz farklı bir sorunum var ... Bende jsbimde, özelliklerden birinin adını geçersiz kılar ve bu" değer "olarak görünür ve" _value "değil. Bu durumda geçersiz kılma alt çizgi .. Herhangi bir yardım çok takdir edilmektedir. – icedek