2014-09-19 5 views
5

मैं जब मैं संकलन पर अमल करने की कोशिश Maven और अंदर 2 स्कीमा और अलग स्कीमाअनुकूलित जावा पैकेज JAXB wsimport

से एक ही नाम के साथ कुछ तत्वों के साथ WSDL फ़ाइल से JAXB के साथ एक ग्राहक उत्पन्न करने के लिए कोशिश कर रहा हूँ मैं 'm अगले त्रुटि मिल रही है:

Two declarations cause a collision in the ObjectFactory class. 

डबल्यूएसडीएल स्कीमा:

<wsdl:types> 
    <schema targetNamespace="http://ws.services" xmlns="http://www.w3.org/2001/XMLSchema">...</schema> 
    <schema targetNamespace="http://ws.models" xmlns="http://www.w3.org/2001/XMLSchema">...</schema> 
</wsdl:types> 

मैं तत्वों का नाम बदलने की कोशिश की है कि त्रुटि उत्पन्न करें, लेकिन तो मेरे वसंत ग्राहक को सही SOAP संदेश प्राप्त होता है, लेकिन यह प्रतिक्रिया ऑब्जेक्ट को ठीक से पॉप्युलेट नहीं करता है (इसके सभी गुण शून्य हैं)। मुझे लगता है कि समस्या प्रतिक्रिया कक्षाओं का नाम बदलने से आ सकती है, इसलिए मैं सभी वर्गों के मूल नाम को रखने के लिए अलग-अलग पैकेज उत्पन्न करने की कोशिश कर रहा हूं।

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

bindings.xml फ़ाइल:

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

<jaxb:bindings schemaLocation="mywsdl.wsdl#types?schema1" 
    node="/xs:schema[@targetNamespace='http://ws.services']"> 
     <jaxb:schemaBindings> 
      <jaxb:package name="package1" /> 
     </jaxb:schemaBindings> 
</jaxb:bindings> 

<jaxb:bindings schemaLocation="mywsdl.wsdl#types?schema2" 
    node="/xs:schema[@targetNamespace='http://ws.models']"> 
     <jaxb:schemaBindings> 
      <jaxb:package name="package2" /> 
     </jaxb:schemaBindings> 
</jaxb:bindings> 

</jaxb:bindings> 

Maven फ़ाइल में मेरे विन्यास हिस्सा है, बगल में है सिर्फ मामले में यह उपयोगी है:

<groupId>org.jvnet.jax-ws-commons</groupId> 
<artifactId>jaxws-maven-plugin</artifactId> 
<version>2.3</version> 
<executions> 
    <execution> 
     <goals> 
      <goal>wsimport</goal> 
     </goals> 
    </execution> 
</executions> 
<configuration> 
    <wsdlLocation>wsdl/mywsdl.wsdl</wsdlLocation> 
    <wsdlDirectory>src/main/resources/wsdl</wsdlDirectory> 
    <wsdlFiles> 
     <wsdlFile>mywsdl.wsdl</wsdlFile> 
    </wsdlFiles> 
    <bindingDirectory>src/main/resources/wsdl</bindingDirectory> 
    <bindingFiles> 
     <bindingFile>bindings.xml</bindingFile> 
    </bindingFiles> 
    <packageName>original.package</packageName> 
    <sourceDestDir>${basedir}/src/main/java</sourceDestDir> 
</configuration> 

मैं इस बाइंडिंग फाइलों के साथ संकलन जब , वही त्रुटि प्रकट होती है। तो मुझे लगता है कि शायद यह सही नहीं है।

क्या आपको कोई गलती मिलती है?

धन्यवाद।

+0

बस एक टिप: यदि आप "bindingFiles" विन्यास खंड को हटा सकते हैं पूरी तरह से अगर आप src/jaxws में अपने सभी बाध्यकारी फ़ाइलें रख! फिर उन्हें जैक्सव्स-मेवेन-प्लगइन द्वारा स्वचालित रूप से उठाया जाएगा। – headcr4sh

उत्तर

7

मेरे अनुभव से 2 बाध्यकारी फाइलें बनाना (प्रत्येक डब्लूएसडीएल फ़ाइल के लिए एक) बनाना सर्वोत्तम है। उसके अनुसार अपनी pom.xml अपडेट करें और यह सुनिश्चित करें कि बाध्यकारी फ़ाइलों का मूल तत्व है jaxws बनाने: बाइंडिंग (और नहीं JAXB: बाइंडिंग)

कुछ संकेत:

  1. स्थापित करने के लिए सुनिश्चित करें "wsdlLocation" विशेषता सही ढंग से! यह एक सापेक्ष पथ का उपयोग कर डब्लूएसडीएल फ़ाइल को इंगित करना चाहिए!
  2. जैक्सव्स: पैकेज उस पैकेज को निर्धारित करता है जिसका उपयोग जेनरेट की गई सेवा कक्षाओं के लिए किया जाएगा। (@WebService के साथ एनोटेटेड सामग्री)
  3. रैपर स्टाइल और asyncMapping को अपनी इच्छानुसार सक्षम या अक्षम करें। ;-)

उदाहरण "package1" के लिए बाध्यकारी फ़ाइल:

<?xml version="1.0" encoding="UTF-8"?> 

    <jaxws:bindings xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" 
        xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
        xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
        xmlns:xs="http://www.w3.org/2001/XMLSchema" 
        wsdlLocation="mywsdl.wsdl" 
        version="2.0"> 

     <jaxws:package name="package1"/> 
     <jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle> 
     <jaxws:enableAsyncMapping>true</jaxws:enableAsyncMapping> 

     <jaxws:bindings node="//wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='http://ws.services']"> 
      <jaxb:schemaBindings> 
       <jaxb:package name="package1"/> 
      </jaxb:schemaBindings> 
     </jaxws:bindings> 

    </jaxws:bindings> 
+1

बहुत बहुत धन्यवाद !, यह चाल है। महत्वपूर्ण !, जब मैंने पहली बार संकलन किया, तो प्लगइन ने मेरी नई पैकेज कॉन्फ़िगरेशन को अनदेखा कर दिया क्योंकि यह मेरे पोम फ़ाइल से पिछले एक का उपयोग कर रहा था, एक बार जब मैंने ' original.package 'को हटा दिया है, तो उसने अलग-अलग पैकेज बनाए हैं। तथापि...वसंत मेरी प्रतिक्रिया वस्तु को ठीक तरह से पॉप्युलेट नहीं कर रहा है और मैं अपने लॉगर में देख सकता हूं कि प्रतिक्रिया SOAP संदेश सही है, इसलिए इस समाधान ने मेरी मुख्य समस्या को हल नहीं किया। – maqjav

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