2013-05-29 37 views
4

自定義xjb適用於根據需要覆蓋名稱,但我們會丟失名稱中的下劃線。使用保留下劃線的xjb覆蓋JAXB屬性名稱

<?xml version="1.0" encoding="UTF-8"?> 
<jxb:bindings 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
    version="2.1"> 
    <jxb:globalBindings underscoreBinding="asCharInWord"/> 
    <jxb:bindings schemaLocation="foo.xsd"> 
     <jxb:bindings node="//xs:complexType[@name='fooType']"> 
      <jxb:property name="value" /> 
     </jxb:bindings> 
    </jxb:bindings> 
</jxb:bindings> 

正如你可以看到上面的XJB生成的Java代碼是

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "textType", propOrder = { 
"value" 
}) 
public class FooType { 

@XmlMixed 
@XmlAnyElement(lax = true) 
protected List<Object> value; 
...... 
public List<Object> getValue() { 
    if (value == null) { 
     value = new ArrayList<Object>(); 
    } 
    return this.value; 
} 

現在,一旦我改變一行在XJB上面:

<jxb:property name="_value" /> 

所有改變在java代碼中是:

public List<Object> get_Value() { 
    if (value == null) { 
     value = new ArrayList<Object>(); 
    } 
    return this.value; 
} 

觀察:「值」

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "textType", propOrder = { 
"value" 
}) 

期望:「_value」

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "textType", propOrder = { 
"_value" 
}) 
+0

我做了一些挖掘,我有一個原理性的解決方法。 目標是讓「值」在我的** json **中顯示爲「_value」,並且我使用Gson從java對象(來自jaxb的類)執行此操作。 顯然,有一個 '@SerializedName(「_值」)' 允許GSON採取與所需的名稱生成的響應的照顧,如果我手動添加此行,我得到了我想要的東西。現在,這可以使用xjb完成,這樣我不需要在每次構建時手動添加此行?我試着玩annox插件,但似乎並不是解決方案。 – icedek

回答

0

的,因爲@XmlAccessorType(XmlAccessType.FIELD)指定和字段的名稱是value即使財產以下propOrder是罰款稱爲_Value(請參閱:http://blog.bdoughan.com/2012/02/jaxbs-xmltype-and-proporder.html)。

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "textType", propOrder = { 
"value" 
}) 

的目標是有「價值」在我的JSON顯示爲「_value」

你特別_Value屬性似乎是能裝東西。你想如何將內容呈現給JSON?

@XmlMixed 
@XmlAnyElement(lax = true) 
protected List<Object> value; 
+0

現在我們把它固定爲一個String。 value是一個String,在json中它需要顯示爲_value。 這可以通過添加註釋@SerializedName(「_ value」)(上面的註釋)來完成。 1)是否可以通過xjb向該屬性添加註釋? 2)有沒有辦法在屬性名稱中保留下劃線? – icedek