Jaxb 如何在xjc中禁用Java命名约定?

Jaxb 如何在xjc中禁用Java命名约定?,jaxb,xjc,Jaxb,Xjc,例如,xsd中的某些_属性必须是java类中的某些_属性,而不是someProperty 我尝试使用globalBindings enableJavaNamingConventions=“false”,但它不起作用。您需要使用下划线binding=“asCharInWord”而不是enableJavaNamingConventions=“false”: customer.xsd binding.xml xjc -d out -b binding.xml customer.xsd JAXB绑

例如,xsd中的某些_属性必须是java类中的某些_属性,而不是someProperty


我尝试使用globalBindings enableJavaNamingConventions=“false”,但它不起作用。

您需要使用
下划线binding=“asCharInWord”
而不是
enableJavaNamingConventions=“false”

customer.xsd


binding.xml

xjc -d out -b binding.xml customer.xsd
JAXB绑定文件用于自定义模式到Java的转换:


XJC呼叫

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

生成的属性名称现在包含下划线字符:

package org.example.customer;
导入javax.xml.bind.annotation.XmlAccessType;
导入javax.xml.bind.annotation.XmlAccessorType;
导入javax.xml.bind.annotation.xmlement;
导入javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name=“customer”,比例器={
“某些财产”
})
公共类客户{
@XmlElement(name=“sOmE_PROPerty”,required=true)
受保护的财产;
公共字符串getSOmE_属性(){
归还财产;
}
公共void setSOmE_属性(字符串值){
this.sOmEPROPerty=值;
}
}
而不使用binding.xml

xjc -d out -b binding.xml customer.xsd
如果您改为进行以下XJC调用:

xjc -d out -customer.xsd
您将看到生成的属性不包含下划线:

package org.example.customer;
导入javax.xml.bind.annotation.XmlAccessType;
导入javax.xml.bind.annotation.XmlAccessorType;
导入javax.xml.bind.annotation.xmlement;
导入javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name=“customer”,比例器={
“某些财产”
})
公共类客户{
@XmlElement(name=“sOmE_PROPerty”,required=true)
受保护的财产;
公共字符串getSOmEPROPerty(){
归还财产;
}
公共void setSOmEPROPerty(字符串值){
this.sOmEPROPerty=值;
}
}

通过更改com.sun.xml.bind.api.impl.namecoverter类中jaxb的源代码来解决此问题,如下所示:

公共静态最终名称转换器标准=新标准();
静态类标准扩展NameUtil实现namecoverter{
公共字符串toClassName(字符串s){
返回s;//toMixedCaseName(toWordList,true);
}
公共字符串toVariableName(字符串s){
返回s;//toMixedCaseName(toWordList,false);
}
公共字符串到接口名(字符串标记){
返回令牌;//toClassName(令牌);
}
公共字符串toPropertyName(字符串s){
字符串prop=s;//toClassName(s);
//属性名“Class”与Object.getClass冲突,
//所以逃避这个。
如果(属性等于(“类别”))
prop=“Clazz”;
返回道具;
}

感谢您的回答,但即使在您的示例中,它也不起作用。它仅在getter中,我需要这里的“protected String sOmEPROPerty”。而且不能将第一个字母改为小写,后面的单词改为大写。谢谢你的回答,我确实遇到了同样的问题,我通过你的回答解决了这个问题。这对xml有效,但我有一个稍微不同的问题…我的jsb覆盖了一个属性的名称,它显示为“值”,而不是“_value”。本例中不覆盖中的下划线。。非常感谢您的帮助。@icedek-您能创建一个新问题吗?@BlaiseDoughan谢谢…我刚才在@Blaise感谢您的回答,但即使在您的示例中,它也不起作用。它仅在getter中,我这里需要“受保护的字符串sOmEPROPerty”"。而且不能将第一个字母改为小写,将“uu”后的字母改为大写。通过更改类com.sun.xml.bind.api.impl.namecoverterdid中jaxb的源代码可以解决此问题。您将其实现为一个xjc扩展,或者您确实修改了其源代码吗?@RobertoBonvallet,您可以实现namecoverter接口,然后修改public带反射的静态最终名称转换器标准字段。