1

各要素名とその複合型名が同じ xsd があります。これは、JAXB を使用して xsd から Java を生成しているときに問題を引き起こします。この xsd は、外部のサービス プロバイダーによって提供されています。XSD が間違っていますか、それとも xsd の生成に何か問題がありますか。以下は、xsd のサンプルです。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="unqualified">
<xs:element name="Discounts" type="Discounts"/>
    <xs:complexType name="Discounts">
    <xs:complexContent>
        <xs:extension base="listWithSizeAttribute">
            <xs:sequence>
                <xs:element maxOccurs="unbounded" minOccurs="0" name="Discounttest" type="Discounttest"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

JAXB を使用して Java オブジェクトを生成するたびに、要素割引が重複しているというエラーが表示されます。xsd全体がそのような要素でいっぱいです。したがって、私の側で何かが間違っていると思います。

ありがとう、アクシャイ

4

1 に答える 1

0

XML スキーマ

グローバル要素と複合型が同じ名前であっても問題ありません。XML スキーマをフラッシュして有効にし、スキーマ コンパイルを実行できるようにしました。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    attributeFormDefault="unqualified" elementFormDefault="unqualified">
    <xs:element name="Discounts" type="Discounts" />
    <xs:complexType name="listWithSizeAttribute" />
    <xs:complexType name="Discounttest" />
    <xs:complexType name="Discounts">
        <xs:complexContent>
            <xs:extension base="listWithSizeAttribute">
                <xs:sequence>
                    <xs:element maxOccurs="unbounded" minOccurs="0"
                        name="Discounttest" type="Discounttest" />
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
</xs:schema>

割引

JAXB (JSR-222) 実装は複合型の Java クラスを生成するため、Discounts複合型のクラスが生成されます。

package forum11981855;

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.XmlElement;
import javax.xml.bind.annotation.XmlType;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Discounts", propOrder = {
    "discounttest"
})
public class Discounts
    extends ListWithSizeAttribute
{

    @XmlElement(name = "Discounttest")
    protected List<Discounttest> discounttest;

    public List<Discounttest> getDiscounttest() {
        if (discounttest == null) {
            discounttest = new ArrayList<Discounttest>();
        }
        return this.discounttest;
    }

}

ObjectFactory

グローバル要素に対応するクラスに@XmlElementDecl注釈が生成されます。ObjectFactoryDiscounts

package forum11981855;

import javax.xml.bind.JAXBElement;
import javax.xml.bind.annotation.XmlElementDecl;
import javax.xml.bind.annotation.XmlRegistry;
import javax.xml.namespace.QName;

@XmlRegistry
public class ObjectFactory {

    private final static QName _Discounts_QNAME = new QName("", "Discounts");

    public ObjectFactory() {
    }

    public Discounttest createDiscounttest() {
        return new Discounttest();
    }

    public Discounts createDiscounts() {
        return new Discounts();
    }

    public ListWithSizeAttribute createListWithSizeAttribute() {
        return new ListWithSizeAttribute();
    }

    @XmlElementDecl(namespace = "", name = "Discounts")
    public JAXBElement<Discounts> createDiscounts(Discounts value) {
        return new JAXBElement<Discounts>(_Discounts_QNAME, Discounts.class, null, value);
    }

}

詳細については

于 2012-08-16T19:24:04.653 に答える