模式中的 Jaxb 类 以大写形式生成 getter setter 方法
Jaxb classes from schema generates getter setter method in uppercase
我正在使用 JAX-WS 生成自上而下的 Web 服务。在 wsdl 中,我正在导入一个包含所有必要元素的 xsd。我需要在 soap 请求中以大写形式显示所有 xml 节点,因此我将 xsd 中的元素名称保留为大写。但是在从 wsdl 生成 类 时,我能够看到 getter 和 setter 方法也以大写形式命名,但不是变量。例如,如果我使用 'SOURCE' 作为 xsd 中的一个元素,我将得到相应的 getter 方法作为 'getSOURCE' 而不是常规约定 'getSource' .我试图通过从架构中生成 jaxb 类 并单独保留 xsd 来玩游戏,但我无法获得预期的命名约定。
以下是使用的架构的一部分
<xs:complexType name="Data">
<xs:sequence>
<xs:element name="SEQ" type="xs:int"/>
<xs:element name="INDEX" type="xs:string"/>
<xs:element name="VALUE" type="xs:string"/>
</xs:sequence>
jaxb 绑定后生成以下代码 -
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Data", propOrder = {
"seq",
"index",
"value"
})
public class Data {
@XmlElement(name = "SEQ")
protected int seq;
@XmlElement(name = "INDEX", required = true)
protected String index;
@XmlElement(name = "VALUE", required = true)
protected String value;
public int getSEQ() {
return seq;
}
public void setSEQ(int value) {
this.seq = value;
}
public String getINDEX() {
return index;
}
public void setINDEX(String value) {
this.index = value;
}
public String getVALUE() {
return value;
}
public void setVALUE(String value) {
this.value = value;
}
}
这里 setter 方法生成为 setSEQ,我需要像 'setSeq'.
这样的驼峰式大小写
这是预期的行为。底层 xjc
调用遵守 Java Bean 约定:如果 属性 名称的前两个字母大写,则不会对 get 和 set 方法应用大写或取消大写。
您可以在 JAXB 外部绑定文件中指定您自己的覆盖方法绑定,该文件是一个 XML 文件,按照惯例具有 .xjb
扩展名。其格式在 JAXB specification:
的第 7 章中描述
<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings version="2.0"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jaxb:bindings schemaLocation="data.xsd">
<jaxb:bindings node="//xs:complexType[@name='Data']">
<jaxb:bindings node=".//xs:element[@name='SEQ']">
<jaxb:property name="seq"/>
</jaxb:bindings>
<jaxb:bindings node=".//xs:element[@name='INDEX']">
<jaxb:property name="index"/>
</jaxb:bindings>
<jaxb:bindings node=".//xs:element[@name='VALUE']">
<jaxb:property name="value"/>
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>
请注意,"data.xsd"
应替换为架构文件的相对 URI。
您可以将上面的内容放在一个名为 custom.xjb
的文件中,然后将其传递给您的 wsimport 调用:
wsimport -d build/generated-classes -p com.example.myapp.data -b custom.xjb http://www.example.com/data-service.wsdl
我正在使用 JAX-WS 生成自上而下的 Web 服务。在 wsdl 中,我正在导入一个包含所有必要元素的 xsd。我需要在 soap 请求中以大写形式显示所有 xml 节点,因此我将 xsd 中的元素名称保留为大写。但是在从 wsdl 生成 类 时,我能够看到 getter 和 setter 方法也以大写形式命名,但不是变量。例如,如果我使用 'SOURCE' 作为 xsd 中的一个元素,我将得到相应的 getter 方法作为 'getSOURCE' 而不是常规约定 'getSource' .我试图通过从架构中生成 jaxb 类 并单独保留 xsd 来玩游戏,但我无法获得预期的命名约定。
以下是使用的架构的一部分
<xs:complexType name="Data">
<xs:sequence>
<xs:element name="SEQ" type="xs:int"/>
<xs:element name="INDEX" type="xs:string"/>
<xs:element name="VALUE" type="xs:string"/>
</xs:sequence>
jaxb 绑定后生成以下代码 -
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Data", propOrder = {
"seq",
"index",
"value"
})
public class Data {
@XmlElement(name = "SEQ")
protected int seq;
@XmlElement(name = "INDEX", required = true)
protected String index;
@XmlElement(name = "VALUE", required = true)
protected String value;
public int getSEQ() {
return seq;
}
public void setSEQ(int value) {
this.seq = value;
}
public String getINDEX() {
return index;
}
public void setINDEX(String value) {
this.index = value;
}
public String getVALUE() {
return value;
}
public void setVALUE(String value) {
this.value = value;
}
}
这里 setter 方法生成为 setSEQ,我需要像 'setSeq'.
这样的驼峰式大小写这是预期的行为。底层 xjc
调用遵守 Java Bean 约定:如果 属性 名称的前两个字母大写,则不会对 get 和 set 方法应用大写或取消大写。
您可以在 JAXB 外部绑定文件中指定您自己的覆盖方法绑定,该文件是一个 XML 文件,按照惯例具有 .xjb
扩展名。其格式在 JAXB specification:
<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings version="2.0"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jaxb:bindings schemaLocation="data.xsd">
<jaxb:bindings node="//xs:complexType[@name='Data']">
<jaxb:bindings node=".//xs:element[@name='SEQ']">
<jaxb:property name="seq"/>
</jaxb:bindings>
<jaxb:bindings node=".//xs:element[@name='INDEX']">
<jaxb:property name="index"/>
</jaxb:bindings>
<jaxb:bindings node=".//xs:element[@name='VALUE']">
<jaxb:property name="value"/>
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>
请注意,"data.xsd"
应替换为架构文件的相对 URI。
您可以将上面的内容放在一个名为 custom.xjb
的文件中,然后将其传递给您的 wsimport 调用:
wsimport -d build/generated-classes -p com.example.myapp.data -b custom.xjb http://www.example.com/data-service.wsdl