سؤال

وأنا تعريض خدمة الويب باستخدام CXF. أنا أستخدم شروحXmlID وXmlIDREF JAXB للحفاظ على التكامل المرجعي من الرسم البياني الخاص بي كائن خلال التنظيم / unmarshalling.

ووWSDL يحتوي بحق العناصر مع XS: معرف و xs: idref سمات لتمثيل هذا

.

وعلى جانب الملقم، كل شيء يعمل بشكل جيد حقا. حالات أنواع المشروح معXmlIDREF هي نفس الحالات (كما هو الحال في ==) لتلك المشروح مع الشرحXmlID.

ولكن، عندما كنت توليد عميل مع WSDLToJava، المراجع (تلك المشروح معXmlIDREF) هي من نوع java.lang.Object.

هل هناك أي طريقة أستطيع أن تخصيص الارتباطات JAXB مثل أن أنواع المراجع إما java.lang.String (لتتناسب مع ID من النوع المشار إليه) أو نفس نوع المشار إليها نفسها؟

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

المحلول 3

حسنا، هذا ليس الذهاب إلى العمل. ليس من الممكن لJAXB لإنشاء رمز مع أنواع الصحيح لIDREFs لأن المخطط لا يمكن تحديد أنواع المراجع وقد يكون هناك مشيرا IDREF لأنواع معقدة مختلفة. كيف JAXB تعرف ما هي أنواع من المراجع؟ سيكون امتدادا لمخطط XML تفعل ذلك! :)

نصائح أخرى

استخدم الارتباطات المضمنة JAXB للإشارة إلى نوع لاستخدامها. سوف الكود ثم ولدت JAXB يكون النوع الصحيح.

<complexType name="Column">
    <sequence>
        <element name="name" type="string" maxOccurs="1" minOccurs="1"></element>
        <element name="referencedColumn" type="IDREF" maxOccurs="1" minOccurs="0">
            <annotation>
                <appinfo>
                    <jaxb:property>
                        <jaxb:baseType name="Column"/>
                    </jaxb:property>
                </appinfo>
            </annotation> 
        </element>
    </sequence>
    <attribute name="id" type="ID" use="required"></attribute>
</complexType>

لاحظ أيضا أن لديك ليعلن مساحة الاسم jaxb والإصدار JAXB في العنصر schema.

<schema targetNamespace="http://example.com/schema" 
    elementFormDefault="qualified" 
    xmlns="http://www.w3.org/2001/XMLSchema" 
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    jaxb:version="1.0">

وفيما يلي يبدو أن إنشاء ما لا يقل عن خصائص السلسلة لعناصر / سمات نوع XS: IDREF. وربما تكون البداية جيدة، ولكن من الناحية المثالية JAXB تولد خصائص نفس نوع العنصر تتم الإشارة. انني سأقدم تقريرا إذا / عندما أجد في معرفة كيف يفعل ذلك. قد تشير هذه النتيجة أنني بحاجة لكتابة المحولات بلدي الذي سيكون من العار.

<jxb:bindings version="2.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <jxb:globalBindings>
            <jxb:javaType name="java.lang.String" xmlType="xs:IDREF" parseMethod="javax.xml.bind.DatatypeConverter.parseString" printMethod="javax.xml.bind.DatatypeConverter.printString" />
        </jxb:globalBindings>
</jxb:bindings>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top