2012-11-12 14 views
8

के साथ सीएक्सएफ wsdl2java का उपयोग करने के लिए मेवेन को कॉन्फ़िगर करें मेरे पास एक ऐसा एप्लिकेशन है जिसे SharePoint की वेब सेवाओं में से एक के साथ एकीकृत करने की आवश्यकता है। इस वेब सेवा को स्वतंत्र रूप से एक्सेस नहीं किया जा सकता है और प्रमाणीकरण की आवश्यकता है।बेसिक प्रमाणीकरण

इस प्रकार, जेनरेट-स्रोत चरण निष्पादित होने पर मेरे अनुप्रयोग में मानक wsdl2java Maven प्लगइन HTTP 401 त्रुटि देता है।

क्या मेवेन/पीओएम स्थापित करने का कोई तरीका है ताकि मैं एक उपयोगकर्ता/पासवर्ड प्रदान कर सकूं जो स्टब्स उत्पन्न करेगा?

मुझे कुछ जवाब मिल गए हैं कि यह संभव नहीं है लेकिन सभी उत्तर 1 वर्ष से अधिक पुराने हैं। मुझे नहीं मिला है कि मैवेन ने इस पर एक अपडेट जारी किया है या नहीं। एक विकल्प डब्लूएसडीएल की स्थानीय प्रतिलिपि को सहेजना है (जैसा कि here सुझाया गया है) लेकिन मैं स्थानीय प्रतियां रखने से बचना चाहता हूं।

उत्तर

8

क्योंकि आपने सीएक्सएफ का उल्लेख किया है तो मुझे लगता है कि आपका मतलब सीएक्सएफ-कोडेजन-प्लगइन था। यह एक हैक का थोड़ा सा है लेकिन यह काम करता है।

HTTP प्रमाणीकरण प्रमाण-पत्र java.net का उपयोग करके प्रदान किया जा सकता है। प्रमाणीकरणकर्ता। केवल अपनी खुद की प्रमाणीकरण कक्षा को परिभाषित करने की आवश्यकता है जो getPasswordAuthentication (..) विधि को ओवरराइड करता है। फिर इसे डिफ़ॉल्ट प्रमाणीकरणकर्ता के रूप में सेट किया जाना है। जहां तक ​​मुझे पता है कि यह घोषणात्मक रूप से नहीं किया जा सकता है (उदाहरण के लिए पर्यावरण गुणों का उपयोग) केवल प्रामाणिक रूप से Authenticator.setDefault (..) का उपयोग कर।

Authenticator.setDefault (..) को कॉल करने के लिए मैं सीएक्सएफ एक्सटेंशन तंत्र का उपयोग करूंगा। इसी तरह वर्ग के साथ अलग Maven परियोजना बनाएँ: \

public class AuthenticatorReplacer { 

    public AuthenticatorReplacer(Bus bus) { 
     java.net.Authenticator.setDefault(new java.net.Authenticator() { 
      @Override 
      protected PasswordAuthentication getPasswordAuthentication() { 
       return new PasswordAuthentication("test", "test123" 
         .toCharArray()); 
      } 
     }); 
    } 

} 

और फ़ाइल src मुख्य \ संसाधन \ META-INF \ CXF \ सामग्री के साथ बस-extensions.txt:

org.example.AuthenticatorReplacer::false 

तब के रूप में नव निर्मित परियोजना जोड़ने CXF-codegen-प्लगइन करने के लिए एक निर्भरता:

<plugin> 
    <groupId>org.apache.cxf</groupId> 
    <artifactId>cxf-codegen-plugin</artifactId> 
    <version>${project.version}</version> 
    <dependencies> 
     <dependency> 
      <groupId>org.example</groupId> 
      <artifactId>cxf-authenticator-replacer</artifactId> 
      <version>0.0.1-SNAPSHOT</version> 
     </dependency> 
    </dependencies> 
    ... 
</plugin> 

इस तरह AuthenticatorReplacer CXF विस्तार प्रणाली द्वारा प्रारंभ और हमारे साथ डिफ़ॉल्ट प्रमाणक की जगह है।

+0

आपने आज मेरे साथ अपना जीवन बचाया। यह अच्छा होगा अगर कोई भी "हैक" के बिना इसे कैसे प्राप्त कर सके, लेकिन हे यह काम करता है। – membersound

0

मैंने सत्यापित किया कि दाविद का समाधान काम करता है। वैकल्पिक रूप से, आप wsdl को खींचने और कैश करने के लिए सोपूआई का उपयोग कर सकते हैं और फिर कोड उत्पन्न करने के लिए cxf का उपयोग करने के लिए सोपूई कोड जनरेशन समर्थन का उपयोग कर सकते हैं।

http://java.dzone.com/tips/generating-client-java-code

-1

Dawid के समाधान मेरे लिए बहुत काम करता है। हालांकि यह थोड़ा मुश्किल है। ग्रहण में, pom.xml शिकायत करता रहता है कि "wsdl2java विफल: एक्सटेंशन क्लास प्रमाणीकरणकर्ता लोडर लोड नहीं कर सका"।

mvn उत्पन्न-स्रोतों

जावा वर्गों तो सफलतापूर्वक उत्पन्न हो जाएगा: आपको यह त्रुटि संदेश पर ध्यान न दें और कमांड लाइन का उपयोग करना होगा।

+0

साइट पर आपका स्वागत है। टिप्पणियां इस तरह पोस्ट की जानी चाहिए, जवाब के रूप में नहीं। यदि आपको एक अलग समस्या को ठीक करने की आवश्यकता है तो एक अलग प्रश्न पूछने के लिए स्वतंत्र महसूस करें। देखें: [ सहायता केंद्र> उत्तर कुछ उत्तरों क्यों और कैसे हटाए गए हैं?] (Http://stackoverflow.com/help/deleted-answers)। – mins

+0

साइट पर आपका स्वागत है। टिप्पणियां इस तरह पोस्ट की जानी चाहिए, जवाब के रूप में नहीं। यदि आपको एक अलग समस्या को ठीक करने की आवश्यकता है तो एक अलग प्रश्न पूछने के लिए स्वतंत्र महसूस करें। देखें: [क्यों और कैसे कुछ उत्तरों हटा दिए गए हैं?] (Http://stackoverflow.com/help/deleted-answers)। – mins

2

@Dawid Pytel के समाधान के लिए एक स्वच्छ विकल्प wsdl वर्ग ऑटो पीढ़ी के जीवन चक्र के दौरान इस वर्ग को चलाने के लिए होगा:

<plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>exec-maven-plugin</artifactId> 
     <version>1.4.0</version> 
     <executions> 
     <execution> 
      <phase>generate-sources</phase> 
      <goals> 
      <goal>java</goal> 
      </goals> 
     </execution> 
     </executions> 
     <configuration> 
     <mainClass>path.to.AuthenticatorReplacer</mainClass> 
     </configuration> 
    </plugin> 

महत्वपूर्ण: अपने AuthenticatorReplacer एक main(String[] args) वर्ग हो सकता है और कोड के अंदर चल गया है।

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