2013-01-10 43 views
6

मैं jaxws-maven-plugin संस्करण 2.1 का उपयोग कर रहा हूं। मैं जार संसाधनों से डबल्यूएसडीएल स्थान के लिए उत्पन्न बहुत ही अजीब कोड पता चला है:jaxws-maven-plugin क्लास स्थान के सापेक्ष WSDL स्थान को हल करने, क्यों?

   <configuration> 
        <keep>true</keep> 
        <sourceDestDir>${basedir}/src/main/java</sourceDestDir> 
        <extension>true</extension> 
        <wsdlDirectory>${basedir}/src/main/resources/wsdl</wsdlDirectory> 
        <packageName>my.package.gen</packageName> 
        <wsdlLocation>wsdl/*</wsdlLocation> 
        <wsdlFiles> 
         <wsdlFile>mywsdl.wsdl</wsdlFile>        
        </wsdlFiles> 
       </configuration> 

और उत्पन्न कोड है:

static { 
    URL url = null; 
    try { 
     URL baseUrl; 
     baseUrl = my.package.gen.My_Service.class.getResource("."); 
     url = new URL(baseUrl, "wsdl/mywsdl.wsdl"); 
    } catch (MalformedURLException e) { 
     logger.warning("Failed to create URL for the wsdl Location: 'wsdl/mywsdl.wsdl', retrying as a local file"); 
     logger.warning(e.getMessage()); 
    } 
    MYSERVICE_WSDL_LOCATION = url; } 

तो WSDL फ़ाइल निर्देशिका (पैकेज) में देखा जाता है जेनरेट क्लास निवासियों, और मुख्य जार निर्देशिका में नहीं, जैसा कि तार्किक होगा। और डब्लूएसडीएल नहीं मिला।

क्या यह jaxws-maven-plugin में एक बग है, या यह मेरी कॉन्फ़िगरेशन में त्रुटि है?

+0

तब तक आप इस समस्या के लिए एक समाधान मिल सकता है? मुझे एक ही समस्या का सामना करना पड़ रहा है क्योंकि आप और सैमुअल्स समाधान वास्तव में एक बदसूरत हैक है। – Vadimo

+0

वैकल्पिक समाधान के साथ एक ही प्रश्न है। http://stackoverflow.com/questions/4163586/jax-ws-client-whats-the-correct-path-to-access-the-local-wsdl – Vadimo

उत्तर

2

आप jaxws-Maven-प्लगइन संस्करण 2.3 के बजाय 2.1 का उपयोग करना चाहिए और परिणाम के रूप में आप की उम्मीद करेंगे हो जाएगा ।

इस तरह संस्करण 2.3 के उत्पादन (अपने wsdl फ़ोल्डर src के तहत है अगर/मुख्य/संसाधन):

URL url = <Any>.class.getClassLoader().getResource("wsdl/anywsdl.wsdl"); 
+0

आप कहते हैं कि यह jaxws-maven-plugin के संस्करण 2.3 में तय है? मैंने अपनी कंपनी के नेक्सस की जांच की है और दुर्भाग्य से उच्चतम संस्करण 2.2 है (मैं वहां से कलाकृतियों को छोड़कर कुछ भी उपयोग नहीं कर सकता)। तो मुझे उन्हें संस्करण अद्यतन करने के लिए सुझाव देना चाहिए? क्या आपके पास इस मुद्दे के साथ जानकारी के साथ कोई लिंक है, जिसमें संस्करण तय किया गया था? मुझे यह साबित करने के लिए कुछ चाहिए कि ऐसे अपडेट जरूरी हैं। –

+0

हां यह सच है। परिणाम देखने के लिए मैंने 2.3 बिल्ड से 2.1 तक अपने निर्माण में केवल संस्करण बदल दिया है, परिणाम @ Łukasz 웃 एल ツ के समान होगा। और वह यह था :-) मैंने wsimport कार्य के साथ भी अपने ग्रेडल बिल्ड की जांच की है जो जैक्स-डब्ल्यूएस 2.1.4 का उपयोग करता है और यह भी गलत था इसलिए मैंने जैक्स-डब्ल्यू 2.2.8 में अपडेट किया है और समस्या हल हो गई है। इसलिए जेएक्स-डब्ल्यूएस टूल्स 2.2.8 भी आवश्यकतानुसार काम करता है। –

+0

मैं अपनी कंपनी को वह जानकारी दूंगा। यदि वे प्लगइन को अपडेट करते हैं या हाथ फिक्सिंग से उस समस्या से लड़ते हैं, तो यह उन पर निर्भर करता है :) –

1

url = new URL(baseUrl, "wsdl/mywsdl.wsdl"); 

यह इच्छित व्यवहार है की पीढ़ी के लिए, इस के अनुसार,

http://jax-ws-commons.java.net/jaxws-maven-plugin/wsimport-mojo.html#wsdlLocation

यह है कि आप क्या करना चाहते हैं पर निर्भर करता है।

यदि आप मुसीबत देता

My_Service.class.getResource है ("।");

आप की तरह कुछ के साथ बिंदु (सापेक्ष पथ) से छुटकारा पा सकते:

<plugin> 
     <groupId>com.google.code.maven-replacer-plugin</groupId> 
     <artifactId>replacer</artifactId> 
     <version>1.5.0</version> 
     <executions> 
      <execution> 
      <phase>process-sources</phase> 
      <goals> 
       <goal>replace</goal> 
      </goals> 
      </execution> 
     </executions> 
     <configuration> 
      <file>target/generated-sources/wsimport/lu/hitec/webservices/pssu/${wsdl.app}/${interface.name}_Service.java</file> 
      <replacements> 
      <replacement> 
       <token>_Service\.class\.getResource\("\."\)</token> 
       <value>_Service\.class\.getResource\(""\)</value> 
      </replacement> 
      </replacements> 
     </configuration> 
     </plugin> 
+2

हाँ, एक वर्कअराउंड, जिसके लिए बाहरी लाइब्रेरी का उपयोग करने की आवश्यकता है (प्लगइन)। मुझे उम्मीद है कि जैक्सव्स-मेवेन-प्लगइन के संस्करण 2.3 में तय किया गया है, क्योंकि मिक्लोस क्रिवन लिखते हैं, मेरे मामले में कंपनी को जैक्सव्स प्लगइन के नए संस्करण का उपयोग करने के लिए मनाने के लिए मुश्किल होगी, उन्हें एक नई प्लगइन का उपयोग करने के लिए विश्वास करना व्यावहारिक रूप से असंभव था .. –