سؤال

أثناء محاولة إنشاء فصول من xsd حصلت على هذا الخطأ:

java.lang.IllegalArgumentException: Illegal class inheritance loop.  Outer class OrderPropertyList may not subclass from inner class: OrderPropertyList

بلدي xsd تحديد عنصر إلى مجموعة غير محدود عنصر مثل هذا:

  <element minOccurs="0" name="orderPropertyList">
    <complexType>
      <sequence>
        <element maxOccurs="unbounded" name="orderProperty" type="tns:orderProperty" />
      </sequence>
    </complexType>
  </element>

و التخصيص ملزمة على النحو التالي كما هو محدد في هذه الصفحة, لكنه لا يعمل.هنا ملزمة:

<jaxb:bindings schemaLocation="../xsd/Schema.xsd" node="/xs:schema">
    <jaxb:bindings node="//xs:element[@name='orderPropertyList']">
        <jaxb:class name="OrderPropertyList"/>
    </jaxb:bindings>
</jaxb:bindings>

نيتي هو توليد الفردية فئة orderPropertyList ، وليس الافتراضي التصرف الذي هو توليد الطبقة الداخلية داخل الجذر عنصر xsd.

لقد شاهدت شخص مع نفس النية هنا و هنا, لكنه لا يعمل بشكل صحيح بالنسبة لي.:(

JAXB الإصدار:

Specification-Version: 2.1
Implementation-Version: 2.1.8

أي مساعدة ؟

هل كانت مفيدة؟

المحلول

أعتقد ما تحتاج إلى أن يتم تعيين:

<jaxb:globalBindings localScoping="toplevel"/>

هذا سوف تولد بذاتها الطبقات بدلا من الطبقات المتداخلة.

القيام

<jaxb:bindings schemaLocation="../xsd/Schema.xsd" node="/xs:schema">
    <jaxb:bindings node="//xs:element[@name='orderPropertyList']">
            <jaxb:class name="OrderPropertyList"/>
    </jaxb:bindings>
</jaxb:bindings>

هو زائدة ملزمة ، منذ orderPropertyList سيتم تعيين بشكل افتراضي إلى OrderPropertyList.اسم الحزمة تشمل الطبقة الخارجية الاسم هو متداخلة في افتراضيا ، لذا أنت لن تغير ذلك.

أيضا, إذا كنت تريد تغيير اسم الفئة التي تم إنشاؤها أعتقد XPath سيكون في الواقع:

<jaxb:bindings node="//xs:element[@name='orderPropertyList']/xs:complexType">

مع complexType على النهاية.أعتقد باستثناء هذا ما كان يسبب رسالة الخطأ لديك.

نصائح أخرى

انها حقا متعة عندما يكون لديك المخطط كما يلي:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0">
    <xsd:element name="TopLevelElement">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="Something">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="Something" maxOccurs="unbounded">
                                <xsd:complexType>
                                    <xsd:sequence>
                                        <xsd:element name="somethingFieldA" type="xsd:string"/>
                                        <xsd:element name="somethingFieldB" type="xsd:string"/>
                                    </xsd:sequence>
                                </xsd:complexType>
                            </xsd:element>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

في هذه الحالة ، xjc يبدو أن تحاول أن تولد في الواقع أربعة فصول يسمى Something, واحد لكل عنصر اسمه Something, واحد لكل من complexTypes.لذلك تحتاج إلى توفير الربط الذي يضرب كل من هذه العناصر الأربعة و أنواع معقدة على وجه التحديد على مستوى حيث أنها تحدث في مخطط (كذلك حقا ثلاثة فقط ، لأن ثم 4 فقط يمكن أن تصبح وحيد Something الطبقة).

وأعتقد أن هذا يحدث لأن من المحتمل أن ولدت جافا فئة تمثل تسلسل "orderProperty" هو نفسه المسمى "OrderPropertyList".

ما أود القيام به هو أول تولد من دون أي مخصص الارتباطات ، انظر الفئة أسماء الهرمية أن يولد.ثم النظر في ما كنت تريد تجاوز ، وكيف.

أنا في حاجة إلى القيام التخصيصات مخطط مثل واحد jeff303 قدمت.بلدي السيناريو كان مختلفا قليلا في هذا المخطط كان المضمنة داخل مستند WSDL.

وأشار شيء واحد من قبل philvarner هو أن عقدة اختيار عنصر يجب أن تنتهي مع '/xs:complexType' و بدا هذا مهم جدا ، كما أن المترجم باستمرار توليد IllegalArgumentException المتعلقة حلقات الميراث دون ذلك.

هذه الوظائف ذات الصلة لذلك أنا أحسب وصلة من شأنه أن يكون مفيدا لشخص 'غوغل' أن ينتهي هنا.

تحقق من السؤال 7881883

دخول هذا /xs:complexType في نهاية عنصر ساعد في تحديد شرعية الميراث الطبقة حلقة الخطأ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top