2010-01-19 12 views
7

मैं एक वेब सेवा के हिस्से के रूप में एक टीसीपी कनेक्शन (HTTP नहीं) पर एक्सएमएल पढ़ रहा हूं और लिख रहा हूं, और मैं सोच रहा था कि क्या मैं प्राप्त करने के लिए "वसंत" तरीका (या यहां तक ​​कि अन्य विचार) 'हूँ नीचे की कोशिश कर रहा:,टीसीपी कनेक्शन का उपयोग करने का वसंत तरीका क्या होगा?

InputStream is = null; 
    OutputStream os = null; 
    Socket s = null; 
    try { 
     s = new Socket(address, portNo); 
     os = s.getOutputStream(); 
     os.write(msg.getBytes()); 
     os.flush(); 
     is = s.getInputStream(); 
     String xml = IOUtils.toString(is); 
     return xml; 
    } finally { 
     IOUtils.closeQuietly(os); 
     IOUtils.closeQuietly(is); 
     if (s != null) s.close(); 
    } 

ध्यान दें, मैं सर्वर पर कोई नियंत्रण नहीं मिल गया है, तो मुझे नहीं लगता कि मैं वसंत दूरस्थ का उपयोग करने में सक्षम हो जाएगा, लेकिन सोच रहा था इस के लिए समान सुधार किया जा सकता है कि क्या वसंत के जेडीबीसी टेम्पलेट्स।

संपादित करें:

ध्यान दें, सिर्फ IOUtils स्पष्ट करने के लिए अपाचे कॉमन्स-कब है ...

+0

अच्छा सवाल है, लेकिन नहीं, वसंत इसके लिए कोई ढांचा नहीं प्रदान करता है। – skaffman

+0

मैंने javadocs के माध्यम से खुदाई के बाद बहुत कुछ सोचा ... धन्यवाद। – beny23

उत्तर

1

WebServiceTemplate पर एक नज़र डालें। क्लास-साइड वेब सेवा पहुंच के लिए यह मुख्य अमूर्त स्प्रिंग प्रदान करता है। भले ही आपका सर्वर एक सामान्य वेब सेवा नहीं है, जब तक यह एक ही अनुरोध-प्रतिक्रिया पैटर्न का उपयोग करता है, तब भी आप इसे अपने समाधान के आधार के रूप में उपयोग करने में सक्षम हो सकते हैं। कक्षा संचार के लगभग हर हिस्से के लिए हुक प्रदान करती है (मार्शलिंग, अनुरोध भेजना, प्रतिक्रिया प्राप्त करना, unmarshalling, आदि)। JavaDoc वेब सेवा कॉल करने के लिए किए गए सभी चरणों की सूची देता है और आप वहां बहुत कुछ भी ओवरराइड कर सकते हैं। इसलिए, उदाहरण के लिए, आप अंतर्निहित marshalling समर्थन का उपयोग कर सकते हैं, लेकिन अपने कस्टम टीसीपी कनेक्शन बनाने के लिए createConnection ओवरराइड करें।

+0

यह एक दिलचस्प तरीका आगे दिखता है। 100% सुनिश्चित नहीं है कि यह ऊपर दिए गए कोड की तुलना में अधिक जटिल समाधान होने वाला नहीं होगा, लेकिन यह एक विकल्प की तरह दिखता है। धन्यवाद। – beny23

+0

क्या आपको इस उत्तर के साथ सफलता मिली है? –

+0

मैं उस मार्ग पर नहीं जा रहा, लेकिन बस अपना खुद का अमूर्त समाधान लिख रहा हूं। अनिवार्य रूप से अनुरोध एक्सएमएल बनाने के लिए एक वेग टेम्पलेट का उपयोग करना और प्रतिक्रिया को पार्स करने के लिए जेडीओएम का उपयोग करना, टीसीपी सॉकेट (सादा या एसएसएल से अधिक) से बात करने के लिए विभिन्न "कनेक्टर" के साथ, लोड-बैलेंसिंग/स्वचालित रूप से विफल हो रहा है, सभी वसंत के माध्यम से एक साथ जुड़े हुए हैं। एक इलाज किया। – beny23

0

स्प्रिंग टेक्नोलॉजीज के अधिकांश काम करने के लिए मानक दृष्टिकोण के आसपास आधारित हैं। आज के साथ निपटने के लिए अधिकांश अनुप्रयोगों की तुलना में टीसीपी/आईपी निम्न स्तर है। मुझे पिछली बार याद नहीं आया कि मैंने कोड की एक पंक्ति लिखी है जो सीधे सॉकेट लाइब्रेरी का उपयोग करती है। इसके बजाए, आमतौर पर उच्च स्तर के प्रोटोकॉल के शीर्ष पर निर्माण करना होता है।

प्रारंभिक बिंदु के रूप में HTTP या आरएमआई का उपयोग सॉकेट स्तर पर बहुत परेशानी को बचाएगा। सॉकेट विवरण को उपयोगकर्ता से दूर करने के लिए बहुत अच्छी वेब सेवाएं लाइब्रेरी हैं। मैं JAX-WS का उपयोग करने की सलाह दूंगा। स्प्रिंग में स्प्रिंग-डब्ल्यूएस परियोजना में जेएक्स-डब्ल्यूएस का कार्यान्वयन है। Apache CXF स्प्रिंग के माध्यम से वेब सेवाओं की कॉन्फ़िगरेशन की अनुमति भी देता है।

आरएमआई भी एक विकल्प है। स्प्रिंग का रिमोटिंग आपके कोड से आरएमआई प्रोटोकॉल को दूर करता है जिससे आप कार्यक्षमता पर ध्यान केंद्रित कर सकते हैं। यह आपको सॉकेट तक पहुंच नहीं देता है, लेकिन शायद यह नहीं है कि आप वैसे भी करना चाहते हैं।

+0

जैसा कि मैंने कहा था, मुझे सर्वर भाग पर कोई नियंत्रण नहीं है, क्योंकि मैं एक विरासत प्रणाली से कनेक्ट कर रहा हूं जो HTTP या वेब सेवाओं या आरएमआई का उपयोग नहीं करता है, केवल टीसीपी पर एक्सएमएल (विरासत बहुत मजेदार है ...) यह कहकर कि ये सामान्य मामले के लिए अच्छे सुझाव हैं, लेकिन यहां काफी लागू नहीं हैं। – beny23

2

"स्प्रिंग दृष्टिकोण" यहां पर लागू होता है कि आप टीसीपी सॉकेट संचार कैसे करते हैं, लेकिन इस वर्ग के साथ इस वर्ग के साथ कोलोबोरेट कैसे कक्षाएं हैं।

तो मुझे लगता है "स्प्रिंग दृष्टिकोण" एक MessageSender पीछे सॉकेट संचार के किसी भी प्रकार को छिपाने के लिए किया जाएगा (भयानक नाम, मुझे पता है) इंटरफेस ताकि सहयोगी कक्षाओं केवल एक MessageSender से निपटने के लिए और इस तथ्य को अनदेखा रह कि उस संदेश को भेजने के लिए किसी भी तरह का निम्न स्तरीय सॉकेट संचार चल रहा है।

+0

वह जिस दृष्टिकोण का जिक्र कर रहा है वह 'जेडीबीसी टेम्पलेट', 'जेन्डी टेम्पलेट', 'हिबर्नेट टेम्पलेट' और इसी तरह से उपयोग किया जाने वाला पैटर्न है। इनका आईओसी, और संसाधन प्रबंधन (उदाहरण के लिए स्ट्रीम/सत्र/कनेक्शन हैंडलिंग) के साथ सबकुछ करने के लिए कुछ भी नहीं है। – skaffman

5

मैं एक ऐसी ही समस्या है और इस के लिए स्प्रिंग एकता का उपयोग कर के बारे में सोच, मेरे लिए एक सही फिट की तरह लगता है:

ध्यान दें कि वसंत एकीकरण 2.0 स्प्रिंग 3.0 के शीर्ष पर बनाता है, जबकि पिछले 1.0 संस्करण स्प्रिंग 2 का भी समर्थन करता है।एक्स (लेकिन टीसीपी/यूडीपी एडाप्टर शामिल नहीं है)।

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

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