2011-04-13 9 views
9

मैं सीएक्सएफ के लिए नया ब्रांड हूं और डब्लूएसडीएल से क्लाइंट बनाने की कोशिश कर रहा हूं। मैंने अतीत में मेट्रो और एक्सिस का इस्तेमाल किया है। मैंने apache-cxf-2.3.3 डाउनलोड किया और क्लाइंट स्टब्स उत्पन्न करने के लिए wsdl2java का उपयोग किया। मैं Maven उपयोग करें और यह इस के साथ मेरी पोम सेट अप:सीएक्सएफ में जावा अनुपालन स्तर सेट करें wsdl2java

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project client-cxf: Compilation failure: Compilation failure: 
[ERROR] \Devel\Projects\Client-CXF\src\main\java\my\webservice\ServiceRuntimeException.java:[38,149] cannot find symbol 
[ERROR] symbol : method required() 

और

[ERROR] \Devel\Projects\Client-CXF\src\main\java\my\snmpv2\MyService.java:[76,8] cannot find symbol 
[ERROR] symbol : constructor Service(java.net.URL,javax.xml.namespace.QName,javax.xml.ws.WebServiceFeature[]) 
[ERROR] location: class javax.xml.ws.Service 

ऐसा लगता है कि समस्याओं:

<properties> 
    <cxf.version>2.3.3</cxf.version> 
</properties> 
<dependencies> 
    <dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-frontend-jaxws</artifactId> 
     <version>${cxf.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-transports-http</artifactId> 
     <version>${cxf.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-ws-security</artifactId> 
     <version>${cxf.version}</version> 
    </dependency> 
</dependencies> 
<build> 
    <plugins> 
     <plugin> 
      <inherited>true</inherited> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <source>1.5</source> 
       <target>1.5</target> 
       <optimize>true</optimize> 
       <debug>true</debug> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

जब मैं परियोजना का निर्माण, मैं इन त्रुटियों को मिलता है इस तथ्य से संबंधित हैं कि जेनरेट कोड जावा 6 फीचर्स (XmlElementRef के लिए "आवश्यकता" तत्व का उपयोग करता है, सेवा के लिए नए कन्स्ट्रक्टर) अभी तक सीएक्सएफ मेवेन निर्भरता जावा 5 के लिए हैं।

क्या यह निर्दिष्ट करने का कोई तरीका है कि जेनरेट कोड जावा 5 अनुपालन होना चाहिए?

उत्तर

24

वास्तव में, कोड है कि CXF के wsdl2java कमांड लाइन टूल:

यदि वह काम नहीं करता, तो आप पोम में स्रोत और लक्ष्य लाइनों को बदलने, इसलिए तरह से जावा 6 उपयोग करने के लिए Maven कॉन्फ़िगर कर सकता है जावा 5 के साथ संगत है, यह संभवतः जावा 6 के लिए संगत नहीं है। कारण यह है कि यह जेएक्स-डब्ल्यूएस 2.2 और जेएक्सबी 2.2 अनुपालन कोड उत्पन्न करता है। हालांकि, जावा 6 में शामिल उन एपीआई के संस्करण केवल 2.1 हैं।

1) सबसे सरल "-fe jaxws21" जोड़ने के लिए wsdl2java आदेश करने के लिए इसे jaxws 2.2

2 के बजाय 2.1 आज्ञाकारी कोड उत्पन्न करने के लिए है) 2.2 API एड:

कुछ ही विकल्प हैं अपने JDK

3) का समर्थन किया निर्देशिका के लिए जार Maven में संकलक प्लगइन कॉन्फ़िगर करें "का समर्थन करने के लिए" 2.2 जार

+0

संगतता के बारे में स्पष्टीकरण और -फ विकल्प का उपयोग करने के लिए धन्यवाद। Http://cxf.apache.org/docs/wsdl-to-java.html पर विवरण इसे अच्छी तरह से समझा नहींता है और यह कि कौन सा जैक्स-डब्ल्यू संस्करण उपयोग करने के लिए निर्दिष्ट कर सकता है। – sdoca

+0

बढ़िया, यह अब मेरे लिए काम करता है। – Dax

0

wsdl2java documentation जावा संस्करण निर्दिष्ट करने के लिए किसी भी विकल्प का उल्लेख नहीं करता है।

क्लाइंट स्टब्स उत्पन्न करने के लिए आप मेवेन cxf-codegen-plugin का उपयोग करने का प्रयास कर सकते हैं, जिसे मेवेन कंपाइलर के स्रोत और लक्ष्य संस्करणों का सम्मान करना चाहिए।

   <source>1.6</source> 
       <target>1.6</target> 
+0

मुझे नहीं लगता था Glassfish wsdl2java का एक संस्करण है। मेट्रो क्लाइंट उत्पन्न करते समय मैंने wsimport का उपयोग किया है। एक्सिस में wsdl2java है, लेकिन मेरे पास वर्तमान में इंस्टॉल नहीं है। Cxf-codegen-plugin का उपयोग करना एक ही जावा 6 कोड बनाता है। – sdoca

+0

मुझे खेद है, आप सही हैं। मेट्रो संस्करण के लिए यह 'wsimport' है। – Powerlord

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