مشكلة في إنشاء عميل خدمات Web Soap Java مع أداة JDK WSimport من WSDL تم إنشاؤه بواسطة تطبيق .NET 2.0

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

سؤال

أحاول إنشاء عميل لبعض خدمات ويب الصابون باستخدام أداة JDK 6 wsimportوبعد تم إنشاء WSDL بواسطة تطبيق .NET 2.0. لتطبيقات .NET 3.x، إنه يعمل بشكل جيد.

عندما أركض

wsimport -keep -p mypackage http://myservice?wsdl

يظهر العديد من رسائل الخطأ مثل هذا:

خطأ] فئة / واجهة مع نفس الاسم "mypackage.someclass" قيد الاستخدام بالفعل. استخدم تخصيص فئة لحل هذا التعارض. خط ؟؟ من http: // myservice؟ WSDL

عندما أقوم بإنشاء عميل خدمات الويب باستخدام AXIS 1.4 (باستخدام المكون الإضافي Eclipse WebTools).

هل يعرف أي شخص ما الذي يمكنني فعله من أجل استخدام wsimport أداة؟ أنا حقا لا أفهم ما هو شيء "تخصيص الطبقة" هو.

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

المحلول

لا أعرف إذا تم حل هذا من أي وقت مضى، لكنني أمضيت بعض الوقت googling للحصول على حل لهذه المشكلة نفسها.

لقد وجدت إصلاح هنا - https://jax-ws.dev.java.net/issues/show_bug.cgi؟id=228.

الحل هو تشغيل WSimport مع -B-XautoNameResolution (بدون مسافات)

نصائح أخرى

لأي شخص يقرأ هذا باستخدام Maven، فهذه كيفية إضافته إلى ملف .pom. لاحظ Args في قسم التكوين. هذا غير موجود بسهولة في الوثائق. شكرا جزيلا لإسحق ستيفنس لمساعدته في هذا.

<!-- definition for ERPStandardWork service -->
<execution>
  <id>ERPStandardWorkService</id>
  <goals>
    <goal>wsimport</goal>
  </goals>
  <configuration>
    <!-- this resolves naming conflicts within the wsdl - there are several copies of fault report objects which clash otherwise. -->
    <args>
       <arg>-B-XautoNameResolution</arg>
    </args>
    <wsdlDirectory>${basedir}/src/main/resources/META-INF/wsdl</wsdlDirectory>
    <wsdlFiles>
        <wsdlFile>ERPStandardWork.wsdl</wsdlFile>
    </wsdlFiles>
      <wsdlLocation>${basedir}/src/main/resources/META-INF/wsdl/ERPStandardWork.wsdl
    </wsdlLocation>
    <staleFile>${project.build.directory}/jaxws/ERPStandardWork/.staleFlag
    </staleFile>
  </configuration>
</execution>

الإجابة المقبولة أعلاه من شأنها أن تحل مشكلتك ولكنها لن تصنع السبب الأساسي.

يحدث المشكلة لأن العملية في ملف WSDL الخاص بك لها نفس اسم XSD: Complextype في ملف XSD الخاص بك - مثل المثال أدناه. يجب أن يكون لجميع الأنواع والعمليات أسماء فريدة من نوعها.

<xsd:complexType name="SearchDocuments">
      <xsd:sequence>
        <xsd:element name="document" type="ns0:SearchDocumentById" maxOccurs="unbounded"/>
      </xsd:sequence>
</xsd:complexType>

<operation name="SearchDocuments">
      <input wsam:Action="http://controller.xxx.xxx.com/DocumentWS/searchDocumentsRequest" message="tns:searchDocumentsRequest"/>
      <output wsam:Action="http://controller.xxx.xxx.com/DocumentWS/searchDocumentsResponse" message="tns:searchDocumentsResponse"/>
</operation>

لذلك تحقق من عملياتك وأنواعك. تأكد من أن أيا منهم يحمل نفس الاسم أي أي أسماء مكررة.

ربما تولد جميع الفصول الدراسية من ملف WSDL في نفس الحزمة. إذا كان هذا هو الحال، فحاول تحديد حزمة مستهدفة مختلفة لكل ملف WSDL مع خيار -p من WSIMPORT.

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