2011-06-07 6 views
5

Por ejemplo, sOmE_PROLa libertad en xsd debe ser sOmE_PROPedancia en la clase java no en alguna Propiedad.Cómo deshabilitar convenciones de nomenclatura Java en xjc?

He intentado utilizar globalBindings enableJavaNamingConventions = "false" pero no funciona.

+0

@Blaise Gracias por responder, pero incluso en su ejemplo, no funciona. Solo en getter, necesito aquí "String sOmEPROPort" protegido. Y no debe cambiar la primera letra a minúscula y la letra después de '_' a mayúsculas. – Smertokogt

+0

Resuelto al cambiar el código fuente de jaxb en la clase com.sun.xml.bind.api.impl.NameConverter – Smertokogt

Respuesta

3

resolverse cambiando el código fuente de jaxb en com clase. sun.xml.bind.api.impl.NameConverter como este:

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

¿Implementaron esto como una extensión xjc o literalmente modificaron su código fuente? –

+0

@RobertoBonvallet, puede implementar la interfaz NameConverter y luego modificar el campo estándar final público estático NameConverter con la reflexión. – Smertokogt

10

Usted tendrá que utilizar underscoreBinding="asCharInWord" en lugar de enableJavaNamingConventions="false":

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

archivo de enlace

Un JAXB se utiliza para personalizar el esquema de Conversión de Java:

<jaxb:bindings 
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
    version="2.1"> 
    <jaxb:globalBindings underscoreBinding="asCharInWord"/> 
</jaxb:bindings> 

XJC llamada

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

clientes

Los nombres de las propiedades generadas incluyen ahora el carácter de subrayado:

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; 
    } 

} 

sin utilizar binding.xml

Si en lugar de tomar la siguiente llamada XJC:

xjc -d out -customer.xsd 

Usted verá que las propiedades generadas no incluyen el subrayado:

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

Gracias por responder, pero incluso en su ejemplo, no funciona. Solo en getter, necesito aquí "String sOmEPROPort" protegido. Y no debe cambiar la primera letra a minúscula y la palabra después de _ a mayúscula. – Smertokogt

+1

gracias por su respuesta, tuve el mismo problema, resolví el problema por medio de su respuesta ... –

+0

esto funciona para xml pero tengo un problema ligeramente diferente ... Tengo en mi jsb que anula el nombre de una de las propiedades y aparece como" valor "y no como" _value ". El guión bajo no se ha anulado en este caso. Cualquier ayuda es muy apreciada. – icedek

Cuestiones relacionadas