JAXB正在生成的方法,如: isIsBuyNow()
和isHasBuyNow()
當我想isBuyNow()
或hasBuyNow()
。如何刪除「是」從JAXB生成布爾干將
生成許多許多類方法,因此單獨定製生成的方法名稱是不可行的。
某些定製JAXB的正則表達式規則是首先想到的,但我找不到任何這種通用方法來更改方法名稱。
JAXB正在生成的方法,如: isIsBuyNow()
和isHasBuyNow()
當我想isBuyNow()
或hasBuyNow()
。如何刪除「是」從JAXB生成布爾干將
生成許多許多類方法,因此單獨定製生成的方法名稱是不可行的。
某些定製JAXB的正則表達式規則是首先想到的,但我找不到任何這種通用方法來更改方法名稱。
從它的聲音你只需要改變方法名稱,而不是類名稱。您可能能夠之一:
我懷疑的第一個選項存在(儘管你可能會得到幸運),但第二個選項似乎非常簡單。有關如何編寫自己的帖子,請參閱this page。
在執行插件路由之前。我會強調核心你的變量名稱。它應該按照Java Bean的慣例。而JAXB應該只按照那個工作。
所以如果變量是布爾值,ist應該是buyNow。各自的getter方法將成爲你所需要的isBuyNow()。這將是再次重新生成映射的問題。沒有regeex沒有自定義查找/替換,因爲您(正確)想要:)
模式I我使用的是第三方,而且我不能改變它,不幸的是。 – Kevin 2012-02-03 05:52:48
哦,我應該猜到了:( – 2012-02-03 06:43:27
你可能會提供一個不同的propertyName,就像在這裏定製屬性binbdings中提到的那樣 - http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/ 2.0/tutorial/doc/JAXBUsing4.html#wp148590 – 2012-02-03 06:51:33
您可以使用外部綁定文件來自定義您的屬性名稱。爲了讓JAXB將方法識別爲屬性,它必須遵循以布爾類型開頭的約定get
或is
。
schema.xsd
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="root">
<xs:attribute name="is-buy-now" type="xs:boolean"/>
</xs:complexType>
</xs:schema>
綁定。XML
在綁定文件下面我們指定的屬性名稱的XML屬性名爲is-buy-now
:
<jxb:bindings
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
version="2.1">
<jxb:bindings schemaLocation="is.xsd">
<jxb:bindings node="//xs:complexType[@name='root']/xs:attribute[@name='is-buy-now']">
<jxb:property name="buyNow"/>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
XJC呼叫
的-b
選項用於指定綁定文件:
xjc -d out -b bindings.xml schema.xsd
根
結果下面的類將產生:isBuyNow
和setBuyNow
方法:
//
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6
// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
// Any modifications to this file will be lost upon recompilation of the source schema.
// Generated on: 2012.02.03 at 05:18:59 AM EST
//
package generated;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlType;
/**
* <p>Java class for root complex type.
*
* <p>The following schema fragment specifies the expected content contained within this class.
*
* <pre>
* <complexType name="root">
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <attribute name="is-buy-now" type="{http://www.w3.org/2001/XMLSchema}boolean" />
* </restriction>
* </complexContent>
* </complexType>
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "root")
public class Root {
@XmlAttribute(name = "is-buy-now")
protected Boolean buyNow;
/**
* Gets the value of the buyNow property.
*
* @return
* possible object is
* {@link Boolean }
*
*/
public Boolean isBuyNow() {
return buyNow;
}
/**
* Sets the value of the buyNow property.
*
* @param value
* allowed object is
* {@link Boolean }
*
*/
public void setBuyNow(Boolean value) {
this.buyNow = value;
}
}
UPDATE
如果從Java類開始,你可以指定@XmlAccessorType(XmlAccessType.FIELD)
按照您選擇的方式映射到字段並命名您的方法:
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {
@XmlAttribute(name="has-buy-now")
private boolean buyNow;
public boolean hasBuyNow() {
return buyNow;
}
}
+ 1也是一個完整的例子我的懶骨頭:) – 2012-02-03 10:58:52
如果有說法,100種方法,is-buy-now,is-expired,is-reserve-met等等,看起來這個解決方案會讓我寫幾百行bindings.xml文件是這種情況,還是我誤解了? – Kevin 2012-02-03 23:18:32
用這種方法你是對的。如果你有很多這些屬性,你可以利用@KalebBrasee給出的方法:http://stackoverflow.com/a/9123497/383861 – 2012-02-04 11:53:55
您可以使用標準(JSR-222)外部綁定文件自定義屬性名稱,並且不需要外部插件:http://stackoverflow.com/a/9127208/383861 – 2012-02-03 10:45:03