繁体   English   中英

模式的Jaxb类以大写形式生成getter setter方法

[英]Jaxb classes from schema generates getter setter method in uppercase

我正在使用JAX-WS生成自上而下的Web服务。 在wsdl中,我要导入一个包含所有必要元素的xsd。 我需要在SOAP请求中将所有xml节点都以大写形式显示,因此我将xsd中的元素名称保留为大写。 但是,从wsdl生成类时,我能够看到getter和setter方法也以大写字母命名,但没有以变量命名。 例如,如果我在xsd中使用“ SOURCE”作为元素,那么我将得到对应的getter方法为“ getSOURCE”,而不是常规约定的“ getSource”。 我试图通过仅保留xsd的方式从架构生成jaxb类来进行游戏,但是我无法获得预期的命名约定。

以下是所用架构的一部分

<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生成,而我需要像setTeq这样的驼峰情况。

这是预期的行为。 底层的xjc调用遵循Java Bean约定:如果属性名称的前两个字母为大写,则不会对get和set方法应用大写或大写。

您可以在JAXB外部绑定文件中指定自己的重写方法绑定,该文件是XML文件,按照惯例,扩展名为.xjb JAXB规范的第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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM