告诉jaxb不要删除下划线

问题描述:


有没有办法告诉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

创建自定义绑定并将“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> 

看看jaxb提供的underscoreBinding。例如,请参阅此处的文档 - >http://java.sun.com/webservices/docs/1.5/tutorial/doc/JAXBUsing4.html

我从来没有使用它,因为我喜欢camelCaseWords,但它听起来像它在做你正在寻找的东西。

+0

感谢您的回答。
也许enableJavaNamingConventions = false?
但是我没有找到任何描述 – KarolDepka 2010-01-31 14:12:03

我来到这里寻找如何做同样的事情,与该模式被嵌入在WSDL里面的额外资格。要做到这一点,上面lreeder的回答结合https://*.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参考实现,至少。