2010-11-22 16 views
7

के बिना सीएक्सएफ पोर्ट पर सोपवर्सन कैसे सेट करें मैं वर्तमान में स्प्रिंग कॉन्फ़िगरेशन फ़ाइलों के बिना सीएक्सएफ का उपयोग कर वेब सेवा क्लाइंट पर काम कर रहा हूं।सीएक्सएफ वसंत

यह बहुत अच्छी तरह से काम करता है लेकिन मैं यह नहीं समझ सकता कि जावा एपीआई का उपयोग करके बाध्यकारी साबुन को कैसे सेट किया जाए। इस रूप में किया जाता है एक स्प्रिंग फ़ाइल का उपयोग निम्न:

<jaxws:binding> 
    <soap:soapBinding version="1.2"/> 
</jaxws:binding> 

तुम लोग कैसे जावा कोड में यह करने के लिए जानते हैं (पोर्ट पर SOAPBinding पर, ...)?

आपकी मदद के लिए अग्रिम धन्यवाद!

संपादित ----------------------

मैं अभी भी इस समस्या के साथ अटक कर रहा हूँ ... मैं SOAPBinding एनोटेशन जोड़ने की कोशिश की इंटरफ़ेस पर नीचे दी गई प्रतिक्रिया में से एक में सुझाव दिया गया है लेकिन यह काम नहीं करता है ... मैं अभी भी अपने पोर्ट टाइप/बाध्यकारी/बस को साबुन 1.2 का उपयोग करने के लिए मैन्युअल रूप से कॉन्फ़िगर करने का एक तरीका खोज रहा हूं ...

कोई भी विचार?

संपादित ----------------------

समस्या हल! असल में मैंने अपने प्रश्न का उत्तर दिया: नीचे देखें ...

धन्यवाद!

उत्तर

13

ठीक है, मैं समाधान साझा करने के लिए अपने स्वयं के प्रश्न का उत्तर दोबारा जवाब देता हूं। सीएक्सएफ मेलिंग सूची के लोगों की मदद से मुझे एक समाधान मिला जो मेरे लिए काम करता है। समस्या को हल करने के लिए वास्तव में 2 तरीके हैं। यहां स्पष्टीकरण है:

समस्या जिस तरह से मैं अपनी सीएक्सएफ सेवा बना रहा था, उससे समस्या आई थी।

पहला समाधान सेवा निर्माण समय में डबल्यूएसडीएल स्थान को निर्दिष्ट करने के लिए है:,

// Create the service 
Service service = Service.create(urlToWsdl, serviceQName); 
// Access the port 
return service.getPort(serviceQName, portTypeClass); 

यह समस्या हल हो लेकिन मैं डबल्यूएसडीएल उस लिंक के लिए नहीं करना चाहता था इसलिए यहाँ दूसरा उपाय है कि इस लिंक से छुटकारा पाता है:

// Create the service 
Service service = Service.create(serviceQName); 
// Add a Port to the service and specify the SOAP 1.2 binding 
service.addPort(serviceQName, javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING, wsUrl); 
// Access the port 
return service.getPort(serviceQName, portTypeClass); 

मेरी परियोजना में हमने दूसरा समाधान चुनने का फैसला किया।

आशा है कि इससे मदद मिलती है!

+0

मैं सीएक्सएफ का उपयोग करके इसे कैसे कर सकता हूं? मैं इस तरह के ऑब्जेक्ट डेवलपर = नई डिस्कवरी लुकअपपोर्ट Impl() की तरह सेवा बना रहा हूं; एंडपॉइंट.publish ("udp: //239.255.255.250: 3702", कार्यान्वयनकर्ता); 'जहां' सार्वजनिक वर्ग डिस्कवरी लुकअपपोर्ट Iplpl DiscoveryLookupPort 'लागू करता है – 4ntoine

6

सबसे आसान शायद सिर्फ के इंटरफेस पर एक टिप्पणी के रहना है:

@BindingType(SOAPBinding.SOAP12HTTP_BINDING) 
+0

आपके उत्तर के लिए धन्यवाद, लेकिन मेरे पास इंटरफ़ेस तक पहुंच नहीं है ... – reef

+0

@reef: आप इंटरफ़ेस का विवरण क्या प्राप्त कर रहे हैं? –

+0

@ डोनल फैलो यह wsdl2java उपकरण निष्पादन का परिणाम है। यह मूल रूप से मेरी परियोजना निर्भरताओं में से एक है। – reef

0

डोनल अध्येताओं ने सुझाव दिया के रूप में मैं अपने ही सवाल का जवाब;)

असल मुद्दा साबुन संस्करण से जुड़ा हुआ था सर्वर संभाल सकता है। क्लाइंट साइड पर मुझे यह निर्दिष्ट करने की आवश्यकता नहीं है कि मैं साबुन 1.2 का उपयोग करना चाहता हूं, ऐसा लगता है कि पोर्ट टाइप टाइप करने के लिए पर्याप्त है SS 1.2 को कॉन्फ़िगर किया गया WSDL फ़ाइल। लेकिन सर्वर के पक्ष में मुझे स्पष्ट रूप से यह बताने की ज़रूरत है कि मैं कौन सा साबुन संस्करण चाहता हूं।

<jaxws:binding> 
    <soap:soapBinding version="1.2"/> 
</jaxws:binding> 

गया दोस्तों यही कारण है कि: सर्वर साइड मैं अब भी "स्प्रिंग-मोड" CXF विन्यास के लिए उपयोग पर इस प्रकार मैं सिर्फ XML कॉन्फ़िगरेशन फ़ाइल में निम्नलिखित जोड़ा गया! आपके समय और मदद के लिए धन्यवाद!

संपादित --------------------------------

असल में इस समाधान अब काम नहीं करता है कि हम उस सर्वर से संपर्क करें जिसे हम प्रबंधित नहीं करते हैं .... हम अभी भी हमारी समस्या से फंस गए हैं ....

+1

ठीक है, यह समाधान काम करता है क्योंकि मेरे पास क्लाइंट और सर्वर दोनों पक्षों तक पहुंच है। अब मुझे एक सर्वर से संपर्क करना है जिसे मैं प्रबंधित नहीं करता हूं यह काम नहीं करता है। क्या आप लोग जानते हैं कि स्प्रिंग कॉन्फ़िगरेशन के बिना SOAP संस्करण कैसे सेट करें? – reef

0

पुराना धागा। मैंने सोचा कि मैं एक समाधान पोस्ट करूंगा जो मेरे लिए काम करता है। cxf-beans.xml फ़ाइल में, मैंने endpointName="tns:MR_ServerSoap" से endpointName="tns:MR_ServerSoap12" बदल दिया। ध्यान दें कि एंडपॉइंट नाम का अपना नाम आपके wsdl में होगा। उस नाम का प्रयोग करें।

1

यदि आप सीएक्सएफ क्लाइंट का उपयोग कर रहे हैं, तो आप निम्न तरीके से उपयोग कर सकते हैं। इसके अलावा यह एक से अधिक wsdl बांध सकते हैं।

JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); 
factory.setServiceClass(WebServiceClass); 
     BindingConfiguration config = new BindingConfiguration() { 

    @Override 
    public String getBindingId() { 
      // TODO Auto-generated method stub 
      return "http://www.w3.org/2003/05/soap/bindings/HTTP/";//SOAPVersion.SOAP_12.httpBindingId 
    } 
    }; 
    factory.setBindingConfig(config); 
संबंधित मुद्दे