لا يمكن قراءة WSDLs التي تم إنشاؤها بواسطة Axis2 Services بواسطة Soapui أو WSDL2Java

StackOverflow https://stackoverflow.com/questions/2465081

سؤال

أقوم بتحويل بعض الخدمات من Apache Soap إلى Axis2 ، وبالتالي فإن فصول خدمة Java موجودة بالفعل. لقد قمت بإنشاء مشروع جديد في Eclipse ، واستورد المصدر ، وتأكد من تثبيت جوانب مشروع AXIS2 ، وخصائص باعث AXIS2 صحيحة. بعد ذلك ، في Eclipse ، اخترت فئة الخدمة واخترت "إنشاء خدمة الويب" ، واختيار وقت تشغيل AXIS2. الخدمة تعمل على جهاز الكمبيوتر الخاص بي ، وعندما أقوم بإلحاق "WSDL" بمسار الخدمة ، أحصل بالفعل على WSDL أحفظه محليًا. محاولة استيراد هذا إلى Soapui لبناء عميل تعطي الخطأ:

ERROR:org.apache.xmlbeans.XmlException: C:\projects\soapUI\Axis2\DALService.wsdl:0: error: src-resolve: type 'SOAPException@http://www.w3.org/2001/XMLSchema' not found.

النوع الذي يشير إلى (SoapException) هو ممسوك من خدمات Apache Soap ، وفي رمز الخدمة ، قمت بتغيير جميع المراجع "استيراد" في رمز الخدمة (وليس WSDL) من org.apache.soap.SOAPException (اسم حزمة الصابون القديم) إلى javax.xml.soap.SOAPException (موقع AXIS2). يقوم الرمز بتجميع ويعمل ، بمجرد أن أتمكن من الوصول إليه ، لكن لا يمكنني الوصول إليه دون إنشاء عميل. أي أفكار حول سبب تغيير مساحة اسم كائن ما من شأنه أن يمنع WSDLs التي تم إنشاؤها من وجود مراجع مساحة الاسم المناسبة؟

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

المحلول 2

اسمحوا لي أن أكون أول من يقول إنه ليس لدي أي فكرة عن سبب وجود أي من هذا ، لكن تخميني هو المحتوى الدقيق لمساحة الاسم قد لا يهم طالما أنهم جميعًا متماثلون. نحن لا نستخدم حتى أي ميزات خاصة لـ SoapException ، لأنه يمتد بشكل أعمى الاستثناء العادي. على أي حال ، تمكنت من الحصول على Soapui لبناء عملاء من XML من خلال القيام بثلاثة أشياء.

أولاً ، أضفت قسمًا لتمثيل Soapexception نفسه ، على النحو التالي:

    <xs:schema xmlns:test="http://service.PROJECT.DEPARTMENT.COMPANY.com" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://DEPARTMENT.COMPANY.com/xsd">
        <xs:import namespace="http://service.PROJECT.DEPARTMENT.COMPANY.com"/>
        <xs:complexType name="SOAPException">
            <xs:complexContent>
                <xs:extension base="ns:Exception">
                    <xs:sequence/>
                </xs:extension>
            </xs:complexContent>
        </xs:complexType>
    </xs:schema>

ثانياً ، أضفت مساحة الاسم التالية إلى WSDL: كتلة التعريفات:

xmlns:im="http://DEPARTMENT.COMPANY.com/xsd"

ثالثًا ، قمت بتغيير مساحة الاسم المشار إليها في نوع قاعدة Soapexception (Fron ns ل im هنا) أينما تمت الإشارة إليها سابقًا:

    <xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://service.ims.im.sa.homedepot.com/xsd">
        <xs:complexType name="SOAPLocatorException">
            <xs:complexContent>
                <xs:extension base="im:SOAPException">
                    <xs:sequence>
                        <xs:element minOccurs="0" name="message" nillable="true" type="xs:string"/>
                        <xs:element minOccurs="0" name="messageCode" nillable="true" type="xs:string"/>
                    </xs:sequence>
                </xs:extension>
            </xs:complexContent>
        </xs:complexType>
    </xs:schema>

لا يزال ملف XML لا يتحقق بشكل نظيف في XMLSpy ، ولكن فقط بسبب سبب أكثر باطنية لا يؤثر علي مباشرة (العمليات ، التي لها أخطاء محددة لربط SOAP11 و SOAP12 ، لا تحتوي على أخطاء محددة لـ روابط HTTP الخام).

على الرغم من أنه يعمل ، ما زلت مرتبكًا بعض الشيء بشأن ما يلي:

  • إذا كان AXIS2 على علم بنوع Soapexception (وفعل ذلك ، لأنه ذكره على أنه الفئة الأساسية للاستثناءات الأخرى) ، فلماذا لم يحدده في xs:schema منع؟
  • على نفس المنوال ، لماذا أشار إلى الفئة من مساحة اسم غير صحيحة عند استخدامها كفئة أساسية لنوع آخر؟
  • لماذا يجب علي تعيين مساحة اسم لهذا النوع DEPARTMENT.COMPANY.comوليس إما حزمة AXIS2 أو حزمة كائن الخدمة الذي يستخدمه؟

نصائح أخرى

ما عليك سوى استخدام عنوان URL "XXX؟ WSDL" الذي ظهر WSDL مباشرة في واجهة المستخدم SOAP ، يبدو أن بعض مخططات XSD المشار إليها في WSDL لا يتم العثور عليها بواسطة أداة SOAP UI ، وعادة ما تبحث هذه الأدوات في المخطط في نفس المجلد ، ، كما لديك org.apache.soap.soapexception إلى javax.xml.soap.soapexception ، قد يكون هذا قد غير مساحة الاسم.

فقط حاول استخدام عنوان URL الكامل وشاهد النتيجة.

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