xjc java类生成,其中字段与@XmlElement同名
我正在使用这个脚本从.xsd文件创建java类 它生成如下所示的类xjc java类生成,其中字段与@XmlElement同名,java,xjc,Java,Xjc,我正在使用这个脚本从.xsd文件创建java类 它生成如下所示的类 @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "AppData1", propOrder = { "appInstllCd", "appVrsn", "os", "osVrsn", "device" }) public class AppData1 { @XmlElement(name = "AppInstllCd")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "AppData1", propOrder = {
"appInstllCd",
"appVrsn",
"os",
"osVrsn",
"device"
})
public class AppData1 {
@XmlElement(name = "AppInstllCd")
protected String appInstllCd;
@XmlElement(name = "AppVrsn")
protected String appVrsn;
@XmlElement(name = "OS")
protected String os;
@XmlElement(name = "OSVrsn")
protected String osVrsn;
@XmlElement(name = "Device")
protected String device;
/**
* Gets the value of the appInstllCd property.
*
* @return
* possible object is
* {@link String }
*
*/
public String getAppInstllCd() {
return appInstllCd;
}
/**
* Sets the value of the appInstllCd property.
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setAppInstllCd(String value) {
this.appInstllCd = value;
}
/**
* Gets the value of the appVrsn property.
*
* @return
* possible object is
* {@link String }
*
*/
public String getAppVrsn() {
return appVrsn;
}
/**
* Sets the value of the appVrsn property.
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setAppVrsn(String value) {
this.appVrsn = value;
}
/**
* Gets the value of the os property.
*
* @return
* possible object is
* {@link String }
*
*/
public String getOS() {
return os;
}
/**
* Sets the value of the os property.
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setOS(String value) {
this.os = value;
}
/**
* Gets the value of the osVrsn property.
*
* @return
* possible object is
* {@link String }
*
*/
public String getOSVrsn() {
return osVrsn;
}
/**
* Sets the value of the osVrsn property.
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setOSVrsn(String value) {
this.osVrsn = value;
}
/**
* Gets the value of the device property.
*
* @return
* possible object is
* {@link String }
*
*/
public String getDevice() {
return device;
}
/**
* Sets the value of the device property.
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setDevice(String value) {
this.device = value;
}
}
我想知道我是否可以以某种方式更改脚本,使我的类字段具有与@XmlElement相同的名称,例如,结果将是:
@XmlElement(name = "AppInstllCd")
protected String AppInstllCd;
@XmlElement(name = "AppVrsn")
protected String AppVrsn;
@XmlElement(name = "OS")
protected String OS;
@XmlElement(name = "OSVrsn")
protected String OSVrsn;
@XmlElement(name = "Device")
protected String Device;
您需要绕过JAXB使用的命名约定。我个人没有尝试过的一些选择,将遵循被接受的答案或投票率最高的答案 另一个选择是创建一个XJC插件。尽管这可能是过分的。我目前正在开发一个XJC插件,所以我有偏见 该插件的代码可以做一些事情,大致如下所示:
import com.sun.tools.xjc.Plugin;
public class XJCPlugin extends Plugin {
@Override
public String getOptionName() { //... }
@Override
public int parseArgument(Options opt, String[] args, int i) throws BadCommandLineException, IOException {
return 1;
}
@Override
public boolean run(Outline model, Options opt, ErrorHandler errorHandler) throws SAXException {
//...
}
@Override
public void postProcessModel(Model model, ErrorHandler errorHandler) {
//This method changes the attribute names
for (CClassInfo classInfo : model.beans().values()) //for each class
for (CPropertyInfo propertyInfo : classInfo.getProperties()) //for each attribute
propertyInfo.setName(false, Utility_StringHandling.firstCharacterToUpperCase(propertyInfo.getName(false)));
}
static String firstCharacterToUpperCase(String input) {
char c[] = input.toCharArray();
c[0] = Character.toUpperCase(c[0]);
return new String(c);
}
}
import com.sun.tools.xjc.Plugin;
public class XJCPlugin extends Plugin {
@Override
public String getOptionName() { //... }
@Override
public int parseArgument(Options opt, String[] args, int i) throws BadCommandLineException, IOException {
return 1;
}
@Override
public boolean run(Outline model, Options opt, ErrorHandler errorHandler) throws SAXException {
//...
}
@Override
public void postProcessModel(Model model, ErrorHandler errorHandler) {
//This method changes the attribute names
for (CClassInfo classInfo : model.beans().values()) //for each class
for (CPropertyInfo propertyInfo : classInfo.getProperties()) //for each attribute
propertyInfo.setName(false, Utility_StringHandling.firstCharacterToUpperCase(propertyInfo.getName(false)));
}
static String firstCharacterToUpperCase(String input) {
char c[] = input.toCharArray();
c[0] = Character.toUpperCase(c[0]);
return new String(c);
}
}