2010-01-29 71 views
4


有沒有辦法告訴JAXB在從XML Schema創建getter/setter名稱時不刪除下劃線?
原因:這會導致信息丟失,並且在XML和Java之間切換更加困難;例如在書面通信中,一個參與者可能會對「不同的名字」感到困惑。
告訴jaxb不要刪除下劃線

例如:NR_ROR不應該變爲getNRROR而是getNR_ROR。
注意:我認爲這些不那麼重要的名稱是值得「違反」Java命名約定的。
TIA
karolrvn

+1

只是好奇,nrRor和getNrRor有什麼錯? – Yoni 2010-01-29 20:11:22

+0

首先,對於知道XML中名稱的人來說,這不是「同樣的事情」。 – KarolDepka 2010-01-31 14:11:20

+0

如果名稱要象徵相同的東西。他們應該是一樣的。否則就會出現往返命名(例如,爲了在模式/ XML中搜索相應的元素,您將不得不重新調整名稱)並且可能會造成混淆。 NrRor很短,所以它可以用手寫,但有更長和更棘手的名字。 – KarolDepka 2010-01-31 14:29:54

回答

15

創建自定義綁定並將「underscoreBinding」設置爲「asCharInWord」。一種方法是創建一個名爲binding.xjb的文件,並使用-b標誌告訴xjc它在哪裏。下面是你放什麼binding.xml一個例子:

<jaxb:bindings 
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    version="1.0"> 
    <jaxb:bindings schemaLocation="foobar.xsd"> 
     <jaxb:globalBindings underscoreBinding="asCharInWord"/> 
    </jaxb:bindings> 
</jaxb:bindings> 
1

我來到這裏尋找如何做同樣的事情,與該模式被嵌入在WSDL裏面的額外資格。要做到這一點,上面lreeder的回答結合https://stackoverflow.com/a/6545815/4512591,改變:

schemaLocation="foobar.xsd" 

wsdlLocation="foobar.wsdl" 

淨結果:

<jaxb:bindings 
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    version="1.0"> 
    <jaxb:bindings wsdlLocation="foobar.wsdl"> 
     <jaxb:globalBindings underscoreBinding="asCharInWord"/> 
    </jaxb:bindings> 
</jaxb:bindings> 

這與JAXWS參考實現,至少。