Сгенерированные JAXB методы не используют обобщения - PullRequest
3 голосов
/ 30 ноября 2011

У меня есть схема JAXB, где один класс содержит список другого класса. Схема приведена ниже.

Но всякий раз, когда я создаю java-классы из этой схемы, метод не использует обобщенные значения, поэтому я должен использовать приведение так же, как pre java 5 way.

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:common="glodas.research">
    <xs:import namespace="glodas.research" schemaLocation="../common.xsd" />

    <!--  Dashboard Level -->    
    <xs:complexType name="DashboardStatType">
        <xs:complexContent>
            <xs:extension base="common:IndustryRegionType">
                <xs:sequence> 
                    <xs:element name="ModuleStat" type="ModuleStatType"
                            minOccurs="0" maxOccurs="unbounded" />
                    <xs:element name="BitsCount" type="BitsCount"
                            minOccurs="0" maxOccurs="unbounded"/>
                    <xs:element name="AgeLimitViolation" type="AgeLimitViolation"
                            minOccurs="0" maxOccurs="unbounded"/>
                    <xs:element name="ModuleViolation" type="ModuleViolation"
                            minOccurs="0" maxOccurs="unbounded"/>                                                        
                </xs:sequence>

                <xs:attribute name="BrCode" type="xs:string" />
                <xs:attribute name="RegionDescription" type="xs:string" />
                <xs:attribute name="AverageAgeOfBits" type="xs:int" use="required"/>
                <xs:attribute name="NewestBitDate" type="xs:date" use="required"/>
                <xs:attribute name="OldestBitDate" type="xs:date" use="required"/>
                <xs:attribute name="ChapterCount" type="xs:int" use="required"/>
                <xs:attribute name="TriggerRulesCount" type="xs:int" use="required"/>
                <xs:attribute name="TriggerEventsCount" type="xs:int" use="required"/>
                <xs:attribute name="UnpublishedCount" type="xs:int" use="required"/>

            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <!--  Module Level -->    

    <xs:complexType name="ModuleStatType">
         <xs:sequence> 
                    <xs:element name="ChapterStat" type="ChapterStatType"
                            minOccurs="0" maxOccurs="unbounded" />
                    <xs:element name="BitsCount" type="BitsCount"
                            minOccurs="0" maxOccurs="unbounded" />
                    <xs:element name="AgeLimitViolation" type="AgeLimitViolation"
                            minOccurs="0" maxOccurs="unbounded" />  
                      <xs:element name="ChapterCountViolation" type="ChapterCountViolation"
                            minOccurs="0" maxOccurs="unbounded" /> 

        </xs:sequence>
        <xs:attribute name="ModuleDescription" type="xs:string" />
        <xs:attribute name="ModuleNumber" type="xs:int" use="required" />
        <xs:attribute name="AverageAgeOfBits" type="xs:int" use="required"/>
        <xs:attribute name="NewestBitDate" type="xs:date" use="required"/>
        <xs:attribute name="OldestBitDate" type="xs:date" use="required"/>
        <xs:attribute name="TriggerRulesCount" type="xs:int" use="required"/>
        <xs:attribute name="TriggerEventsCount" type="xs:int" use="required"/>
        <xs:attribute name="UnpublishedCount" type="xs:int" use="required"/>
    </xs:complexType>

        <!--  Chapter Level -->    
     <xs:complexType name="ChapterStatType">
            <xs:sequence>
                <xs:element name="BitStat" type="BitStatType" minOccurs="0"
                    maxOccurs="unbounded" />
                <xs:element name="BitsCount" type="BitsCount"
                    minOccurs="0" maxOccurs="unbounded" />
                <xs:element name="AgeLimitViolation" type="AgeLimitViolation"
                    minOccurs="0" maxOccurs="unbounded" />
            </xs:sequence>

                <xs:attribute name="ChapterId" type="xs:int" use="required"/>
                <xs:attribute name="ChapterTitle" type="xs:string" use="required"/>
                <xs:attribute name="AverageAgeOfBits" type="xs:int" use="required"/>
                <xs:attribute name="NewestBitDate" type="xs:date" use="required"/>
                <xs:attribute name="OldestBitDate" type="xs:date" use="required"/>
                <xs:attribute name="TriggerRulesCount" type="xs:int" use="required"/>
                <xs:attribute name="TriggerEventsCount" type="xs:int" use="required"/>
    </xs:complexType>

    <!--  Bit Level -->
    <xs:complexType name="BitStatType">
                <xs:sequence>
                <xs:element name="BitStat" type="BitStatType" minOccurs="0"
                    maxOccurs="unbounded"/>
                <xs:element name="BitAge" type="BitAge" minOccurs="0"
                    maxOccurs="unbounded"/>                 
                </xs:sequence>

                <xs:attribute name="WiId" type="xs:int" use="required"/>
                <xs:attribute name="Title" type="xs:string" use="required"/>
                <xs:attribute name="TriggerRulesCount" type="xs:int" use="required"/>
                <xs:attribute name="TriggerEventsCount" type="xs:int" use="required"/>
                <xs:attribute name="LastPublishedDate" type="xs:date" use="required"/>
    </xs:complexType>    

   <xs:complexType name="ValidationMessage">
                <xs:attribute name="Text" type="xs:string" use="required"/>
                <xs:attribute name="Severity" type="xs:int" use="optional"/>
   </xs:complexType>

    <xs:complexType name="BitAge">
        <xs:sequence>
            <xs:element name="ValidationMessage" type="ValidationMessage"
                minOccurs="0" maxOccurs="unbounded" />
        </xs:sequence>
        <xs:attribute name="Age" type="xs:int" use="required" />
    </xs:complexType>


    <xs:complexType name="BitsCount">

        <xs:sequence>
            <xs:element name="ValidationMessage" type="ValidationMessage"
                minOccurs="0" maxOccurs="unbounded" />
        </xs:sequence>
        <xs:attribute name="Count" type="xs:int" use="required" />
    </xs:complexType> 


    <xs:complexType name="AgeLimitViolation">
        <xs:sequence>
            <xs:element name="ValidationMessage" type="ValidationMessage"
                minOccurs="0" maxOccurs="unbounded" />
        </xs:sequence>
        <xs:attribute name="Count" type="xs:int" use="required" />
    </xs:complexType> 

    <xs:complexType name="ChapterCountViolation">
        <xs:sequence>
            <xs:element name="ValidationMessage" type="ValidationMessage"
                minOccurs="0" maxOccurs="unbounded" />
        </xs:sequence>
        <xs:attribute name="Count" type="xs:int" use="required" />
    </xs:complexType> 

    <xs:complexType name="ModuleViolation">
        <xs:sequence>
            <xs:element name="ValidationMessage" type="ValidationMessage"
                minOccurs="0" maxOccurs="unbounded" />
        </xs:sequence>
        <xs:attribute name="Count" type="xs:int" use="required" />
    </xs:complexType> 

    <xs:element name="GetDashboardMonitorResponse">
        <xs:annotation>
            <xs:documentation>Response for DashboardMonitor.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element type="DashboardStatType" name="DashboardStat" minOccurs="1"
                    maxOccurs="unbounded"></xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

</xs:schema>

... Метод генерируется так

    java.util.List getBitAge();

Я хочу, чтобы метод java генерировался следующим образом

java.util.List<BitAge> getBitAge();

1 Ответ

3 голосов
/ 30 ноября 2011

Можете ли вы предоставить более подробную информацию о вашей XML-схеме? Я попытался воспроизвести вашу проблему со следующим

nov30.xsd

Я внес небольшое изменение в предоставленную вами схему XML, поскольку у меня нет источника для common.xsd:

<!--xs:import namespace="glodas.research" schemaLocation="../common.xsd" / -->

<!--  Dashboard Level -->    
<xs:complexType name="DashboardStatType">
    <!--xs:complexContent>
        <xs:extension base="common:IndustryRegionType"-->
            <xs:sequence> 
                <xs:element name="ModuleStat" type="ModuleStatType"
                        minOccurs="0" maxOccurs="unbounded" />
                <xs:element name="BitsCount" type="BitsCount"
                        minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="AgeLimitViolation" type="AgeLimitViolation"
                        minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="ModuleViolation" type="ModuleViolation"
                        minOccurs="0" maxOccurs="unbounded"/>                                                        
            </xs:sequence>

            <xs:attribute name="BrCode" type="xs:string" />
            <xs:attribute name="RegionDescription" type="xs:string" />
            <xs:attribute name="AverageAgeOfBits" type="xs:int" use="required"/>
            <xs:attribute name="NewestBitDate" type="xs:date" use="required"/>
            <xs:attribute name="OldestBitDate" type="xs:date" use="required"/>
            <xs:attribute name="ChapterCount" type="xs:int" use="required"/>
            <xs:attribute name="TriggerRulesCount" type="xs:int" use="required"/>
            <xs:attribute name="TriggerEventsCount" type="xs:int" use="required"/>
            <xs:attribute name="UnpublishedCount" type="xs:int" use="required"/>

        <!-- /xs:extension>
    </xs:complexContent -->
</xs:complexType>

XJC Call

xjc -d out nov30.xsd

BitStatType

Полученное свойство списка по-прежнему использует обобщенные значения, как и ожидалось:

<code>//
// 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: 2011.11.30 at 11:38:04 AM EST 
//


package generated;

import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlSchemaType;
import javax.xml.bind.annotation.XmlType;
import javax.xml.datatype.XMLGregorianCalendar;


/**
 * <p>Java class for BitStatType complex type.
 * 
 * <p>The following schema fragment specifies the expected content contained within this class.
 * 
 * <pre>
 * &lt;complexType name="BitStatType">
 *   &lt;complexContent>
 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       &lt;sequence>
 *         &lt;element name="BitStat" type="{}BitStatType" maxOccurs="unbounded" minOccurs="0"/>
 *         &lt;element name="BitAge" type="{}BitAge" maxOccurs="unbounded" minOccurs="0"/>
 *       &lt;/sequence>
 *       &lt;attribute name="WiId" use="required" type="{http://www.w3.org/2001/XMLSchema}int" />
 *       &lt;attribute name="Title" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
 *       &lt;attribute name="TriggerRulesCount" use="required" type="{http://www.w3.org/2001/XMLSchema}int" />
 *       &lt;attribute name="TriggerEventsCount" use="required" type="{http://www.w3.org/2001/XMLSchema}int" />
 *       &lt;attribute name="LastPublishedDate" use="required" type="{http://www.w3.org/2001/XMLSchema}date" />
 *     &lt;/restriction>
 *   &lt;/complexContent>
 * &lt;/complexType>
 * 
* * * / @XmlAccessorType (XmlAccessType.FIELD) @XmlType (name = "BitStatType", propOrder = { "BitStat", "BitAge" }) открытый класс BitStatType { @XmlElement (name = "BitStat") защищенный список bitStat; @XmlElement (name = "BitAge") защищенный список bitAge; @XmlAttribute (name = "WiId", обязательный = true) защищенный int wiId; @XmlAttribute (name = "Заголовок", обязательный = true) защищенный строковый заголовок; @XmlAttribute (name = "TriggerRulesCount", обязательный = true) защищенный int triggerRulesCount; @XmlAttribute (name = "TriggerEventsCount", обязательный = true) protected int triggerEventsCount; @XmlAttribute (name = "LastPublishedDate", обязательный = true) @XmlSchemaType (name = "date") защищенный XMLGregorianCalendar lastPublishedDate; / ** * Получает значение свойства bitStat. * *

* Этот метод доступа возвращает ссылку на текущий список, * не снимок. Поэтому любые изменения, которые вы вносите в * возвращенный список будет присутствовать внутри объекта JAXB. * Вот почему нет метода set для свойства bitStat. * *

* Например, чтобы добавить новый элемент, сделайте следующее: *

     *    getBitStat().add(newItem);
     * 
* * *

* Объекты следующих типов разрешены в списке * {@link BitStatType} * * * / открытый список getBitStat () { if (bitStat == null) { bitStat = new ArrayList (); } вернуть this.bitStat; } / ** * Получает значение свойства bitAge. * *

* Этот метод доступа возвращает ссылку на текущий список, * не снимок. Поэтому любые изменения, которые вы вносите в * возвращенный список будет присутствовать внутри объекта JAXB. * Вот почему нет метода set для свойства bitAge. * *

* Например, чтобы добавить новый элемент, сделайте следующее: *

     *    getBitAge().add(newItem);
     * 
* * *

* Объекты следующих типов разрешены в списке * {@link BitAge} * * * / public List getBitAge () { if (bitAge == null) { bitAge = new ArrayList (); } вернуть this.bitAge; } / ** * Получает значение свойства wiId. * * / public int getWiId () { возвратный шрифт; } / ** * Устанавливает значение свойства wiId. * * / public void setWiId (int value) { this.wiId = значение; } / ** * Получает значение свойства title. * * @вернуть * возможный объект * {@link String} * * / public String getTitle () { вернуть заголовок; } / ** * Устанавливает значение свойства title. * * @param value * разрешенный объект * {@link String} * * / public void setTitle (String value) { this.title = value; } / ** * Получает значение свойства triggerRulesCount. * * / public int getTriggerRulesCount () { return triggerRulesCount; } / ** * Устанавливает значение свойства triggerRulesCount. * * / public void setTriggerRulesCount (int value) { this.triggerRulesCount = значение; } / ** * Получает значение свойства triggerEventsCount. * * / public int getTriggerEventsCount () { return triggerEventsCount; } / ** * Устанавливает значение свойства triggerEventsCount. * * /public void setTriggerEventsCount (int value) {this.triggerEventsCount = значение;} / ** * Получает значение свойства lastPublishedDate.* * @return * возможный объект: * {@link XMLGregorianCalendar} * * / public XMLGregorianCalendar getLastPublishedDate () {return lastPublishedDate;} / ** * Устанавливает значение свойства lastPublishedDate.* * @param value * допустимый объект: * {@link XMLGregorianCalendar} * * / public void setLastPublishedDate (XMLGregorianCalendar value) {this.lastPublishedDate = value;}}

...