2015-07-10 55 views
0

我使用JAX-WS生成自頂向下的Web服務。在wsdl中,我正在導入一個包含所有必要元素的xsd。我需要在soap請求中以大寫形式顯示所有xml節點,因此我將xsd中的元素名稱保留爲大寫。但是,當從wsdl生成類時,我能夠看到getter和setter方法也以大寫命名,但不是變量。例如,如果我使用'SOURCE'作爲xsd中的一個元素,那麼我會將相應的getter方法作爲'getSOURCE'而不是常規約定'getSource'。我試圖通過從模式生成jaxb類來保持xsd獨立,但我無法獲得預期的命名約定。模式的Jaxb類生成大寫的getter setter方法

下面是使用

<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」那樣處於駱駝狀態。

回答

2

這是預期的行爲。底層xjc調用遵守Java Bean約定:如果屬性名稱的前兩個字母爲大寫,則不會將大寫或解除資本化應用於get和set方法。

您可以在JAXB外部綁定文件中指定自己的覆蓋方法綁定,該文件是根據約定具有.xjb擴展名的XML文件。它的格式在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