Как мне контролировать то, что XJ C генерирует из схемы? - PullRequest
0 голосов
/ 01 апреля 2020

У меня небольшая проблема с кодом, сгенерированным из XJ C из моей схемы. У меня есть следующая схема:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="1.0">

<!-- Root Transport type must be an anonymous type for XJC to properly generate
     the Java code to represent the transport message -->
<xsd:element name="transport">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="TransactionHeader" type="TransactionHeader" minOccurs="1"/>
            <xsd:element name="TransactionBody" type="TransactionBody" minOccurs="1"/>
        </xsd:sequence>
    </xsd:complexType>
</xsd:element>

<xsd:complexType name="TransactionHeader">
    <xsd:annotation>
        <xsd:documentation>Standard Transaction Header for all transactions</xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
        <xsd:element name="dsCorrelationID" type="xsd:string"/>
        <xsd:element name="applicationCorrelationID" type="xsd:string" minOccurs="0"/>
        <xsd:element name="TNID" type="xsd:string" minOccurs="0"/>
        <xsd:element name="sender" type="xsd:string"/>
    </xsd:sequence>
</xsd:complexType>

<xsd:complexType name="TransactionBody">
    <xsd:sequence>
        <xsd:element name="payload" type="payload" maxOccurs="unbounded">
        </xsd:element>
    </xsd:sequence>
</xsd:complexType>

<xsd:complexType name="payload">
    <xsd:choice minOccurs="0" maxOccurs="unbounded">
        <xsd:element name="NetworkHeader" type="NetworkHeader"/>
        <xsd:element name="NetworkActivity" type="NetworkActivity"/>
    </xsd:choice>
</xsd:complexType>

<xsd:complexType name="NetworkHeader">
    <xsd:sequence>
        <xsd:element name="projectNumber" type="xsd:string" minOccurs="0"/>
        <xsd:element name="projectDescription" type="xsd:string" minOccurs="0"/>
        <xsd:element name="projectCreatedBy" type="xsd:string" minOccurs="0"/>
        <xsd:element name="projectCreatedOn" type="xsd:date" minOccurs="0"/>
    </xsd:sequence>
</xsd:complexType>

<xsd:complexType name="NetworkActivity">
    <xsd:sequence>
        <xsd:element name="networkHeaderNumber" type="xsd:string" minOccurs="0"/>
        <xsd:element name="networkHeaderCompanyCode" type="xsd:string" minOccurs="0"/>
        <xsd:element name="networkHeaderCompanyCodeDescription" type="xsd:string" minOccurs="0"/>
        <xsd:element name="networkHeaderBusinessArea" type="xsd:string" minOccurs="0"/>
        <xsd:element name="networkHeaderBusinessAreaDescription" type="xsd:string" minOccurs="0"/>
        <xsd:element name="networkHeaderPlant" type="xsd:string" minOccurs="0"/>
        <xsd:element name="networkHeaderPlantDescription" type="xsd:string" minOccurs="0"/>
        <xsd:element name="networkActivityNumber" type="xsd:string" minOccurs="0"/>
    </xsd:sequence>
</xsd:complexType>

Мой тип «полезной нагрузки» содержит неограниченный список сложных типов в любом порядке. Когда я запускаю XJ C для этого XSD-файла, я получаю следующий Java код:

<code>@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "payload", propOrder = {
    "networkHeaderOrNetworkActivity"
public class Payload {

@XmlElements({
    @XmlElement(name = "NetworkHeader", type = NetworkHeader.class),
    @XmlElement(name = "NetworkActivity", type = NetworkActivity.class)
})
protected List<Object> networkHeaderOrNetworkActivity;

/**
 * Gets the value of the networkHeaderOrNetworkActivity property.
 * 
 * <p>
 * This accessor method returns a reference to the live list,
 * not a snapshot. Therefore any modification you make to the
 * returned list will be present inside the JAXB object.
 * This is why there is not a <CODE>set</CODE> method for the networkHeaderOrNetworkActivity property.
 * 
 * <p>
 * For example, to add a new item, do as follows:
 * <pre>
 *    getNetworkHeaderOrNetworkActivity().add(newItem);
 * 
* * *

* В списке разрешены объекты следующих типов * {@linklink NetworkHeader} * {@link NetworkActivity} * * * / publi c Список getNetworkHeaderOrNetworkActivity () {if (networkHeaderOrNetworkActivity == null) {networkHeaderOrNetworkActivity = new ArrayList (); } return this.networkHeaderOrNetworkActivity; }

Как видите, XJ C генерирует поле с именем "networkHeaderOrNetworkActivity". Я бы очень хотел изменить это имя. Окончательная схема будет содержать много разных полезных нагрузок со многими различными типами в дополнение к показанным здесь NetworkHeader и NetworkActivity.

Можно ли как-нибудь получить XJ C для генерации другого имени для этого поля из XSD ?

Я пытался поиграться с xsd: annotation, но это, похоже, не дало результата. Ничто иное, что я пробовал, тоже не сработало.

...