[英]Customize object/element name with JAXB
我對JAXB剛起步,所以在破解這個(我認為)非常簡單的用例時遇到了麻煩。
我有一套模式。 我無法控制這些,無法更改它們。 在這些模式中,我有如下聲明
<xs:complexType name="CustomerType">
...
我試圖從這些生成類。 所以這樣的聲明變成
@XmlType(name = "CustomerType", propOrder = {
"field1",
"field2"
})
public class CustomerType {
...
然后,我需要使用此類使用RestTemplate創建XML消息。 問題是,XML消息中的對象不應為“ CustomerType”,而應僅為“ Customer”。 就像我說的那樣,我無法編輯架構。 我也不能直接編輯生成的源。 我需要某種外部定制,以告訴源生成過程或編組過程如何轉換對象的名稱。 任何建議將不勝感激。
您可以使用綁定來自定義類或屬性名稱。 通常,您將有一個像bindings.xjb
這樣的文件,如下所示:
<jaxb:bindings version="1.0" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
jaxb:extensionBindingPrefixes="xjc">
<jaxb:bindings schemaLocation="schema.xsd" node="/xsd:schema">
<jaxb:bindings node="xsd:customType[@name='CustomerType']">
<jaxb:class name="Customer"/>
</jaxb:bindings>
<jaxb:bindings node="xsd:customType[@name='CustomerType']//xsd:element[@name='field1']">
<jaxb:property name="f1"/>
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>
有相當多,你可以用綁定定制幾件事情(見本 ),但肯定不是萬能的。
DTO對象的創建方式是:
您可以在一處定義所有類型,例如:CustomerType,UserType,OrderType等。
然后,您在定義了多種類型的位置創建另一個架構並導入適當的XSD。 然后,您實際上使用/聚集了這些類型定義來為對象創建XML模式。 像下面這樣
<xs:complexType name="CustomerOrders">
<xs:element name="Customer" type="CustomerType">
<xs:attribute name="Orders" type="OrderType">
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.