JAXB嵌套元素注释



我想知道如何使用JAXB在XML中注释嵌套元素。

我的XML应该喜欢这个

<?xml version='1.0' encoding='utf-8'?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xml:base="http://127.0.0.1:9089/TCMBCommon-iris/TCMBCommon.svc/GB0010001/">
<title type="text">enqTcibAcctDetailss</title>
<id>http://127.0.0.1:9089/TCMBCommon-iris/TCMBCommon.svc/GB0010001/enqTcibAcctDetailss()</id>
<updated>2016-09-14T10:13:48Z</updated>
<link rel="self" title="enqTcibAcctDetailss" href="enqTcibAcctDetailss()" />
<entry>
    <id>http://127.0.0.1:9089/TCMBCommon-iris/TCMBCommon.svc/GB0010001/enqTcibAcctDetailss('')</id>
    <title type="text" />
    <updated>2016-09-14T10:13:48Z</updated>
    <author>
        <name />
    </author>
    <link rel="self" title="enqTcibAcctDetails" href="enqTcibAcctDetailss('78239')" />
    <category term="TCMBCommon-modelsModel.enqTcibAcctDetails" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
    <content type="application/xml">
        <m:properties>
            <d:CategoryId>1001</d:CategoryId>
            <d:Type>Current Account</d:Type>
            <d:Acc>78239</d:Acc>
            <d:Ccy>GBP</d:Ccy>
            <d:OnlineActualBal>330.47</d:OnlineActualBal>
            <d:RealBalance>330.47</d:RealBalance>
            <d:Sortcode>601613</d:Sortcode>
            <d:Customer>100336</d:Customer>
            <d:ArrangementId>AA16082JD77P</d:ArrangementId>
            <d:Ac1>78239 Rolf Gerling</d:Ac1>
            <d:ProductGroup>CURRENT.ACCOUNTS</d:ProductGroup>
            <d:ProductLine>ACCOUNTS</d:ProductLine>
            <d:ProductName>CURRENT.ACCOUNT</d:ProductName>
            <d:AvailAmt>330.47</d:AvailAmt>
            <d:AvailBalWithLimit>660.94</d:AvailBalWithLimit>
            <d:IbanId>GB22DEMO60161300078239</d:IbanId>
            <d:Branch>Model Bank 201608</d:Branch>
            <d:AcctTransRights>YES</d:AcctTransRights>
            <d:enqTcibAcctDetails_PortfolioNoMvGroup m:type="Bag(TCMBCommon-modelsModel.enqTcibAcctDetails_PortfolioNoMvGroup)">
                <d:element>
                    <d:PortfolioNo></d:PortfolioNo>
                </d:element>
            </d:enqTcibAcctDetails_PortfolioNoMvGroup>
            <d:enqTcibAcctDetails_ShortTitleMvGroup m:type="Bag(TCMBCommon-modelsModel.enqTcibAcctDetails_ShortTitleMvGroup)">
                <d:element>
                    <d:Name>Rolf Gerling</d:Name>
                </d:element>
            </d:enqTcibAcctDetails_ShortTitleMvGroup>
            <d:enqTcibAcctDetails_AccountTitle1MvGroup m:type="Bag(TCMBCommon-modelsModel.enqTcibAcctDetails_AccountTitle1MvGroup)">
                <d:element>
                    <d:AcctName>Current Account</d:AcctName>
                </d:element>
            </d:enqTcibAcctDetails_AccountTitle1MvGroup>
        </m:properties>
    </content>
</entry>

我想直接获取嵌套元素"属性"。但是我无法实现。

我的pojo课程仅获得嵌套元素"属性"是

@XmlRootElement(name="properties", namespace = 
"http://schemas.microsoft.com/ado/2007/08/dataservices/metadata")
@XmlAccessorType(XmlAccessType.FIELD)    
class AccountResource {
@XmlElement(name = "Acc", namespace = 
"http://schemas.microsoft.com/ado/2007/08/dataservices")
public String accountNumber;
@XmlElement(name = "AcctName")
public String accountName;
@XmlElement(name = "Type")
public String accountType;
@Nullable
@XmlElement(name = "OnlineActualBal")
public Float availableBalance;
@Nullable
@XmlElement(name = "Ccy")
public String currency;
@Nullable
@XmlElement(name = "Customer")
public String customerNumber;
@Nullable
@XmlElement(name = "AcctTransRights")
public Boolean transferRights;

好心地帮助我如何继续1.使用命名空间的元素可以注释元素的正确方法,因为我有两个或多个名称空间。2.我们必须使用@xmlelementwrapper进行这种

  1. 什么是使用名称空间注释元素的正确方法,因为我有两个或多个命名空间。

使用JAXB,您通常具有 java软件包 - xml名称空间映射,其中 xml名称空间是模式的主要/目标名称空间。在Java软件包中,您可以使用@XmlSchema注释定义package-info.java文件。例如:

@javax.xml.bind.annotation.XmlSchema(
    namespace = "http://www.opengis.net/wmts/1.0",
    elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package net.opengis.wmts.v_1_0;

这具有您不再需要在此软件包中其他注释中指定namespace属性的优势。例如,如果定义:

@XmlElement(name = "UnitSymbol")
protected String unitSymbol;

这实际上定义了命名空间http://www.opengis.net/wmts/1.0中的UnitSymbol。由于大多数元素都将在目标名称空间中,这将为您节省很多键入。

但是,如果您碰巧有来自其他名称空间的元素(例如,通过xs:element/@ref(,您仍然可以使用注释的namespace属性来指定命名空间。例如:

@XmlElement(name = "UOM", namespace = "http://www.opengis.net/ows/1.1")
protected DomainMetadataType uom;
  1. 我们必须使用@xmlelementwrapper作为此类

在这种情况下,没有。您只会有类似的东西:

@XmlElement(name="properties")
private AccountResource properties;

就是这样。

如果您想要这样的结构:

,则需要@XmlElementWrapper
<m:properties>
    <m:property>
        <d:CategoryId>1001</d:CategoryId>
        <d:Type>Current Account</d:Type>
        <d:Acc>78239</d:Acc>
        <d:Ccy>GBP</d:Ccy>
        <!-- ... -->
    </m:property>
    <m:property>
        <!-- ... -->
    </m:property>
    <!-- ... -->
</m:properties>

通常,我的建议是定义描述您XML结构的XML模式。然后,您可以从此架构中生成类。

最新更新