2008-09-05 10 views
11

मेरे पास एक सी ++ ऐप है जिसे जावा वेब ऐप से कनेक्ट करने की आवश्यकता है, क्या इसके लिए कोई अच्छा, ओपन सोर्स एसओएपी पैकेज है, या क्या यह सिर्फ खुद को रोल करना आसान होगा?सी ++ और एसओएपी

उत्तर

1

एक त्वरित Google टूलकिट के लिए this चालू कर दिया। जबकि मैंने कभी इसका इस्तेमाल नहीं किया है, यह काफी लोकप्रिय और ठोस प्रतीत होता है। वास्तव में एक पैकेज नहीं है, और वास्तव में खुद को रोल नहीं कर रहा है, लेकिन बीच में तरह का।

0

अपाचे की Axis प्रोजेक्ट पर एक नज़र डालें। यह सी ++ (और जावा) पर अच्छी तरह से समर्थित है और यदि आपके पास लक्ष्य सेवा के लिए एक अच्छा डब्लूएसडीएल के साथ शुरू करने का अच्छा भाग्य है तो आप घर-मुक्त होंगे।

11

मैं gSoap के बाद से अंधेरेहेमेट को वोट दूंगा क्योंकि मेरी सिफारिश भी होगी। हम ज्यादातर जावा शॉप हैं लेकिन कुछ सी ++ बिट्स और जीएसओएपी के साथ हमारा पसंदीदा एसओएपी एकीकरण तरीका रहा है। यह वास्तव में आपके सामान्य जावा स्टैक की तुलना में अधिक काम है लेकिन यह ठोस लगता है।

1

हम एक सी ++ परियोजना बनाने के लिए सिर्फ जेआरई और एक्सिस दोनों पर निर्भरता से बचने के लिए एक्सिस के बजाय जीएसओएपी के साथ गए थे। यह ठीक काम करता है, जो अच्छा है क्योंकि जीएसओएपी कोड भयानक है और इसमें किसी भी बग को ठीक करने के लिए यह बहुत मुश्किल है।

जीएसओएपी लिंकिंग के बारे में एक चेतावनी हालांकि: आप कभी भी एक लिंक ऑब्जेक्ट (निष्पादन योग्य, डीएलएल, साझा ऑब्जेक्ट) में एक से अधिक WSDL का उपयोग नहीं कर सकते हैं। ऐसा इसलिए है क्योंकि कुछ जेनरेट किए गए डब्ल्यूएसडीएल-विशिष्ट कार्यों में सामान्य नाम होते हैं (उदा। साबुन_getfault())।

यूनिक्स ईएलएफ लिंकिंग के साथ बदतर, ये नाम साझा वस्तुओं के बीच क्रॉस-लिंकिंग का कारण बनेंगे, इसलिए FSService गलती को barService के लिए soap_getfault() द्वारा संसाधित किया जा सकता है, अगर गलती विस्तार संरचनाएं अलग हैं तो स्मृति को दूषित कर दें।

इसके लिए कामकाज यह सुनिश्चित करना है कि एसओ के बाहर जीएसओएपी से संबंधित कुछ भी संपर्क नहीं किया गया है। यह जीसीसी इन परिभाषाओं _both दे रही है जब gSOAP पुस्तकालय खुद को जोड़ने और जोड़ने के लिए अपने कोड द्वारा हल किया जा कर सकते हैं:

#define SOAP_FMAC2 __attribute__ ((visibility ("hidden"))) 
#define SOAP_FMAC4 __attribute__ ((visibility ("hidden"))) 
#define SOAP_FMAC6 __attribute__ ((visibility ("hidden"))) 
#define SOAP_NMAC __attribute__ ((visibility ("hidden"))) 

मैं उन्हें एक हेडर फाइल में डाल और जीसीसी के लिए मजबूर कर शामिल करने के लिए से इसे हल कि -include fixsoaplink.h साथ कुछ और करने से पहले।

यदि आप प्रयास कर सकते हैं तो एक बेहतर तरीका डिफ़ॉल्ट ईएलएफ दृश्यता को छिपाने के लिए बदल सकता है, और केवल उन प्रतीकों को निर्यात कर सकता है जिन्हें आप चाहते हैं (जैसे वीसीएम में डेलिमपोर्ट/ड्लेक्सपोर्ट)।

+1

हुह। मैंने वास्तव में सोचा कि मैंने जीएसओएपी में नामस्थान के पीछे सभी जेनरेट कोड डालने के बारे में कुछ अच्छी चीजें देखी हैं। असल में, मैं लगभग सकारात्मक हूँ। इसका मतलब यह होगा कि सामान्य नाम फ़ंक्शंस, जैसे soap_getfault() एक लिंक ऑब्जेक्ट में भी टकरा नहीं होगा। –

+1

आप वास्तव में एक लिंक ऑब्जेक्ट में एक से अधिक wsdl डाल सकते हैं, मैं वर्तमान में इसे कर रहा हूं! – fido

0

जब मैंने जीएसओएपी से जेनरेट कोड देखा, तो मुझे दिल का दौरा पड़ा।

तथ्य यह है कि उपयोगकर्ता को प्रत्येक ऑब्जेक्ट के लिए सभी मेमोरी प्रबंधन करने की आवश्यकता होती है, बस मेरे दिमाग को दबाने लगा। तो, मैं बैठ गया और लंबे समय तक कुछ बेवकूफ़ बना दिया, लेकिन अल्प अवधि में काफी संतोषजनक ...

मैंने एक ऐसा प्रोग्राम लिखा जो जीएसओएपी कोड को अपने स्वयं के सीपीपी वर्गों से लपेटता है जो इंटरफेस को और अधिक दिखता है मैं इसे देखना चाहता हूँ।

मैंने मेमोरी पर पकड़ने के लिए प्रत्येक सेवा विधि के भीतर स्कोप्ड गार्ड का उपयोग किया, और चूंकि मैं विभिन्न प्रकार के सभी प्रकार से निपट रहा हूं, इसलिए मैंने इसे करने के लिए std::list<boost::any> का उपयोग किया। मेरे पास ऐसे फ़ंक्शन हैं जो मुझे आवश्यक प्रत्येक ऑब्जेक्ट प्रकार बनाते हैं, और उन्होंने वास्तविक स्मृति को मेरे list<any> में डाल दिया है। इसमें कुछ समस्याएं थीं - ज्यादातर कॉन्फ़िगरेशन में बदलाव होता है। मैं अब दर्जनों वेब सेवाओं से बात कर रहा हूं, दर्जनों वेब सेवाओं से बात कर रहा हूं।

मुझे यकीन नहीं है कि मैं किसी और के लिए अपना रास्ता सुझाऊंगा ...मुझे शायद बुलेट काटने और जीएसओएपी के उत्पादन पर निर्भर करने के बजाय जीएसओएपी में योगदान करने की कोशिश करना शुरू कर देना चाहिए ...

+0

मैंने इसी तरह की चीज की तब महसूस किया कि यह कितना बेवकूफ और अस्पष्ट था। कोड को दोबारा प्रतिक्रिया देने के बाद, मेरे पास एक टेम्पलेटेड क्लास थी जो किसी भी जेनरेट की गई जीएसओएपी सी ++ कक्षा के लिए काम कर सकती थी। यदि आप चाहें तो मैं आपको कोड भेज सकता हूं। – fido

+0

मैं इसकी सराहना करता हूं! - [email protected] या शायद आप इसे Google कोड, या कुछ इसी तरह पोस्ट कर सकते हैं। :-) –

0

जीएसओएपी के साथ एक और मुद्दा है जिसे हमने अभी तक कठिन तरीके से खोजा है: यह चयन का उपयोग करता है() सभी मतदान के लिए, तो एक बार जब आप 1024 फ़ाइल डिस्क्रिप्टर खोलें (विंडोज़ पर 64?) तो यह स्टैक को मिटा देगा। इसके परिणामस्वरूप या तो नकली त्रुटियां होती हैं जहां आवेदन के दुर्घटनाओं को पूरा करने के लिए संदेश भेजने में असमर्थ होता है।

वैकल्पिक हल, जब तक आप gSOAP ही पैच करने के लिए तैयार हैं, अपने खुद के नेटवर्क कोड लिख सकते हैं और साथ साबुन> fconnect में यह हुक करने के लिए है, -> fsend, -> frecv आदि

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