2011-06-07 16 views
7

का उपयोग कर सीएक्सएफ और Google गिइस मैं Google Guice के साथ सीएक्सएफ को एकीकृत करना चाहता हूं। मैं पहले से ही अपने प्रोजेक्ट में गुइस का उपयोग कर रहा हूं और मैं अतिरिक्त निर्भरताओं को जोड़ने से बचना चाहता हूं।जेएक्स-आरएस + जेएक्स-डब्ल्यूएस

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

वैसे भी, afaik, सीएक्सएफ इस आवश्यकता को पूरा कर सकता है, इसलिए ऐसा लगता है कि मैं सीएक्सएफ के साथ फंस गया हूं।

सीएक्सएफ के साथ गुइस को एकीकृत करने के तरीके पर कोई विचार या पॉइंटर्स या सलाह? मैंने CXFNonSpringJaxrsServlet वर्ग को विस्तारित करने और इसमें गुइस हैक करने का विचार किया, लेकिन ऐसा लगता है कि मैं ऐसा कुछ कर रहा हूं जो किसी और ने पहले से ही किया है।

उत्तर

4

सीएक्सएफ 2.4.x के साथ, सीएक्सएफ अब वसंत का आंतरिक रूप से कॉन्फ़िगर करने के लिए उपयोग नहीं करता है। इस प्रकार, आप वसंत के बिना बहुत कुछ कर सकते हैं।

विन्यास भागों निश्चित रूप से एक मुद्दा हैं। हालांकि, सभी वसंत विन्यास सामग्री सीएक्सएफ एपीआई के ऊपर पतली रैपर है। इस प्रकार, आप API के माध्यम से बहुत अधिक सब कुछ कॉन्फ़िगर कर सकते हैं। आपको थोड़ा और खोदने की जरूरत हो सकती है।

उदाहरण के तौर पर, सीएक्सएफ 2.4 के साथ, अब हमने ओएसजीआई में स्प्रिंग के बजाय ब्लूप्रिंट का उपयोग करना शुरू कर दिया है। ब्लूप्रिंट समर्थन में स्प्रिंग सामान की आवश्यकता नहीं होती है, लेकिन इसे मॉडलिंग किया जाता है।

+0

यह संभव है, आप सही हैं ... सीएक्सएफ कॉन्फ़िगर करने योग्य (इंटरसेप्टर से लेकर बस कारखानों तक आविष्कारकों तक) है कि आप वायरस में वायर-इन कर सकते हैं। सिस्टेट और टेस्टकेस इस के कई उदाहरण प्रदान करते हैं। – chahuistle

1

आपको कोई समस्या है। सीएक्सएफ वसंत पर पूरी तरह से निर्भर है, क्योंकि इसे आंतरिक रूप से वसंत द्वारा कॉन्फ़िगर किया गया है और वसंत की सुविधाओं का व्यापक रूप से उपयोग किया जा रहा है। इस प्रकार, मुझे नहीं लगता कि यह वसंत से बाहर सीएक्सएफ का पुरस्कार देने का प्रयास करना व्यावहारिक है ताकि आप इसके बजाए गुइस का उपयोग कर सकें; न्यूनतम पर, आपको कस्टम गिइस प्रदाताओं के साथ सभी कॉन्फ़िगरेशन दोहराना होगा और यह अभी भी काम नहीं करेगा (सीएक्सएफ के कुछ हिस्सों में स्प्रिंग की वेब परत का उपयोग किया जाता है)।

आप इसके बजाय अपने कोड के लिए स्प्रिंग की जावाकॉन्फिग शैली का उपयोग करने का प्रयास कर सकते हैं। यह अधिकतर चीइस के प्रकार के समान है (जहां तक ​​मैं देख सकता हूं)। या मुझे लगता है कि आप एक ही ऐप में दो अलग डी फ्रेमवर्क का उपयोग करने का प्रयास कर सकते हैं ... हालांकि मुझे "उल्लसित" विफलता के अवसर की तरह लगता है।

3

यहां मैं जो उपयोग कर रहा हूं (सीएक्सएफ-2.5.0)।

@Singleton 
public class WebServiceServlet extends CXFNonSpringServlet { 
    private static final long serialVersionUID = 1L; 
    private final SamaService samaService; 

    @Inject 
    public WebServiceServlet(SamaService samaService) { 
     this.samaService = samaService; 
    } 

    @Override 
    protected void loadBus(ServletConfig sc) { 
     super.loadBus(sc); 
     BusFactory.setDefaultBus(getBus()); 
     Endpoint.publish("/Data.asmx", samaService); 
    } 
} 
+0

मैंने एक समान सर्विस किया था, लेकिन सेवा इंजेक्ट करने के बजाय लोडबस() के अंदर इंजेक्टर का इस्तेमाल किया। कोड यहां पोस्ट किया गया है: http://code.google.com/p/guice-cxf/issues/detail?id=1 – BrunoJCM

+0

लाइन 'BusFactory.setDefaultBus (getBus())' क्यों? यह आपके उदाहरण में जरूरी नहीं लगता है, ठीक काम करता है w/o। –