簡體   English   中英

使用JAXB自定義對象/元素名稱

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM