2011-10-24 11 views
9

के साथ जेएक्सबी अनुकूलन यह मुझे पागल कर रहा है। मैं एक स्कीमा एक डबल्यूएसडीएल भीतर एम्बेडेड कि अनुकूलन की जरूरत के रूप में मैं एक डबल्यूएसडीएल पहले ग्राहक का निर्माण कर रहा हूँ क्योंकि WSIMPORT निम्न त्रुटिएक खराब रूप से निर्मित WSDL

[ERROR] Complex type and its child element share the same name "DomainsMap". 
Use a class customization to resolve this conflict. 
line 878 of file:/C:/jaxws-ri/bin/ArtesiaWebServices.wsdl 

1) मैं इस डबल्यूएसडीएल पर कोई नियंत्रण नहीं फेंक रहा है और मैं इसे संशोधन पर जाने के लिए उम्मीद किसी भी औपचारिक परामर्श या मुझे रिहाई। 2) अब इस नामकरण टकराव को मैन्युअल रूप से ठीक करने के लिए स्वीकार्य नहीं है क्योंकि मुझे एक स्वचालित निर्माण श्रृंखला में स्टब्स का निर्माण शामिल करने की आवश्यकता है।

मुझे बाहरी अनुकूलन फ़ाइल का उपयोग करना होगा। मैं बस यह समझने के लिए प्रतीत नहीं कर सकता कि काम करने के लिए अनुकूलन कैसे प्राप्त करें।

यहाँ हमलावर डबल्यूएसडीएल टुकड़ा है:

<wsdl:definitions> 
    <wsdl:types> 
     <xs:schema> 
     . 
     . 
     . 
     <xs:complexType final="extension restriction" name="domainsMap"> 
     <xs:sequence> 
      <xs:element name="domainsMap"> 
      <xs:complexType> 
       <xs:sequence> 
       <xs:element maxOccurs="unbounded" minOccurs="0" name="entry"> 
        <xs:complexType> 
        <xs:sequence> 
         <xs:element minOccurs="0" name="key" type="xs:string"/> 
         <xs:element minOccurs="0" name="value" type="tns:domainValueMap"/> 
        </xs:sequence> 
        </xs:complexType> 
       </xs:element> 
       </xs:sequence> 
      </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
     </xs:complexType> 

यह आपको अपनी JAXB कौशल फ्लेक्स के लिए के लिए एक महान अवसर होगा। किसी भी तरह की सहायता का स्वागत किया जाएगा।

मैं jaxb दस्तावेज पर घंटों तक देख रहा हूं और अभी भी कोई भाग्य नहीं है। यदि आवश्यक हो तो मैं पूरे डब्लूएसडीएल की पेशकश कर सकता हूं। क्या कोई मदद कर सकता है?

उत्तर

16

ठीक है आज सुबह मैं काम करने आया और इसे समझने में सक्षम था। कभी-कभी बस समस्या से दूर चलना और ताजा सिर से वापस आना सबसे अच्छा तरीका है।

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<jaxws:bindings 
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
    xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" 
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.1" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    wsdlLocation="ArtesiaWebServices.wsdl"> 

    <enableWrapperStyle>true</enableWrapperStyle> 
    <enableAsyncMapping>false</enableAsyncMapping> 
    <jaxws:bindings node="wsdl:definitions/wsdl:types/xs:schema/xs:complexType[@name='domainsMap']/xs:sequence/xs:element[@name='domainsMap']/xs:complexType"> 
     <!-- This binding will fix the domainsMap inner element called domainsMap. sheesh, who names stuff like that?! --> 
     <jaxb:class name="DomainsMapElement"/> 
    </jaxws:bindings> 
    <jaxws:bindings node="wsdl:definitions/wsdl:types/xs:schema/xs:complexType[@name='domainValueMap']/xs:sequence/xs:element[@name='domainValueMap']/xs:complexType"> 
     <!-- This binding will fix the domainValueMap inner element called domainValueMap. sheesh, who names stuff like that?! --> 
     <jaxb:class name="DomainValueMapElement"/> 
    </jaxws:bindings> 
</jaxws:bindings> 

मैं निम्न आदेश में wsimport उपकरण के साथ ऊपर बाहरी बंधन फ़ाइल का उपयोग: यहाँ समाधान है कि मेरे लिए काम किया है। इस बंधन फाइल के बारे में

महत्वपूर्ण बातें:

  • नाम स्थान jaxws बाइंडिंग के लिए प्रयोग किया जाता है। यह एकमात्र तरीका है जिससे मैं सही ढंग से काम करने के लिए नोड चयन प्राप्त कर सकता हूं
  • नोड चयन को/xs: complexType के साथ समाप्त होना है। यदि आप तत्व का नाम चुनने से रोकते हैं तो संकलक त्रुटियों को उत्पन्न करेगा।

    wsimport उत्पन्न डी रखें बी ArtesiaExternalBinding.xml ArtesiaWebServices.wsdl

इस्तेमाल किया विकल्प:
-d उत्पन्न उत्पादन निर्देशिका (नाम का एक फ़ोल्डर इस मामले में 'उत्पन्न') निर्दिष्ट करता है
-b ArtesiaExternalBinding.xml बाध्यकारी फ़ाइल का उपयोग करने के लिए जेएक्सबी कंपाइलर को बताता है।
रखें स्टब्स रखने (मैं सिर्फ निरीक्षण के लिए स्टब्स का उपयोग करें)

अंत में, मैं इस बारे में जानकारी का सबसे उपयोगी tidbit हो पाया: java.net documents on jaxws customizations

यह वह जगह है कि मुझे क्या घोंसले के लिए नेतृत्व jaxws टैग के भीतर jaxb अनुकूलन। लिंक पेट्रू गार्डिया

+1

अंत में! धन्यवाद! यह मेरी समस्याओं को हल करता है .. – fachexot

+4

SOAP .... इतने सारे बर्बाद आदमी घंटे – dolbysurnd

+0

दूर ... यह मैवेन प्लगइन के अंदर 'wsimport' का उपयोग करते समय जादू' jaxws' टैग के बिना काम नहीं करता है। धन्यवाद। – Strelok

3

यह स्पष्ट नहीं है कि आपने क्या प्रयास किया है या नहीं, लेकिन मैं निम्नलिखित कार्य करता हूं: - wsimport कमांड लाइन में -b विकल्प का उपयोग करें (दस्तावेज़ here उपलब्ध है)। - बाध्यकारी फ़ाइलों पर जानकारी here मिल सकती है; - नाम टकराव से बचने के लिए अनुकूलित करने के तरीकों के साथ गहराई से दृश्य here है। मैं यहां एक अंश प्रदान कर रहा हूं - इसे आपकी समस्या को ठीक करना चाहिए।

<jxb:schemaBindings> 
     <jxb:package name="primer.myPo"> 
     <jxb:javadoc> 
    <![CDATA[<body> Package level documentation for generated package primer.myPo.</body>]]> 
     </jxb:javadoc> 
     </jxb:package> 
     <jxb:nameXmlTransform> 
      <jxb:elementName suffix="Element"/> 
     </jxb:nameXmlTransform> 
</jxb:schemaBindings> 
+1

क्षमा करें, मैंने सोचा कि आप यहां जुड़े लिंक के माध्यम से अनुसरण करेंगे; "बाध्यकारी फाइलों पर जानकारी" लिंक, इस कथन पर लगाया गया है: "ये जेएक्सबी बाइंडिंग स्कीमा के अंदर या जैक्सव्स के बच्चे के रूप में रह सकती हैं: बाइंडिंग तत्व।" –

संबंधित मुद्दे