2010-01-19 18 views
7

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

पहला प्रश्न: क्या यह एक आम सेटअप है? मैंने सोचा कि डब्ल्यूएसडीएल होने का मुद्दा न केवल अनुबंध को परिभाषित करना था बल्कि उपभोक्ताओं को सेवा का खुलासा करना था।

मैं wsimport, wsconsume, आदि का उपयोग करके प्रदान किए गए डब्लूएसडीएल के क्लाइंट/सर्वर कोड को आसानी से उत्पन्न कर सकता हूं .. मुझे पता है कि जब मेरा जेनरेट क्लाइंट मेरी जेनरेट की गई सेवा को कॉल करता है तो यह मुझे सही संदेश देता है।

दूसरा प्रश्न: क्या इसे एक अलग साबुन पते पर रूट करने का कोई आसान तरीका है?

मैं बस की तरह कुछ करने के लिए सक्षम होना चाहते हैं:

SalesTaxService svc = new SalesTaxService(); 
SalesTax tax = svc.getSalesTaxPort() 
tax.getRate("NY"); 

लेकिन साबुन का पता डबल्यूएसडीएल में परिभाषित का उपयोग नहीं। मैं प्रत्येक विधि के लिए प्रेषण ग्राहकों का एक समूह लिखने से बचना चाहता हूं।

क्या मुझे कुछ याद आ रही है?

* skaffman के जवाब में: यही उत्पन्न हुआ था। यह एक नाम कंधे उचकाने की क्रिया के रूप में wsdlLocation को चूक

@WebServiceClient(name = "SomeService") 
    public class SomeService_Service extends Service { 

    public SomeService_Service(URL wsdlLocation, QName serviceName) { 
     super(wsdlLocation, serviceName);    
    } 

    public SomeService_Service(URL wsdlLocation) { 
     super(wsdlLocation, new QName("urn:some_service", "SomeService")); 
    } 
    } 
+0

भी देखें: http: // stackoverflow

HelloService service = new HelloService ( this.getClass().getResource("originalHello.wsdl"), new QName("http://example.org/hello", "HelloService ")); HelloPort proxy = service.getHelloPort(); Map<String, Object> ctxt = ((BindingProvider)proxy).getRequestContext(); ctxt.put(JAXWSProperties.HTTP_CLIENT_STREAMING_CHUNK_SIZE, 8192); ctxt.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://new/endpointaddress"); proxy.sayHello("Hello World!"); 

क्रेडिट को जाता है। स्टब्स उत्पन्न करने के लिए कॉम/ए/863561/147763 –

उत्तर

3

तो मुझे पता चला कि मुझे कोई समस्या क्यों थी। मैं मान रहा था कि wsdlLocation डब्लूएसडीएल होना था कि वास्तविक सेवा प्रकाशित हो रही थी। यह निश्चित रूप से मामला नहीं है। समाधान स्थानीय एसओएपीएल को सही SOAP के साथ पैकेज करना है: क्लाइंट में वास्तविक सेवा के लिए पता।

संपादित मुझे पता चला है कि आप वास्तविक डबल्यूएसडीएल को बदलने के लिए बिना प्रोग्राम के रूप में अंत बिंदु का पता बदल सकते हैं: Jianming Li

5

मैंने सोचा था कि एक डबल्यूएसडीएल होने की बात न केवल अनुबंध परिभाषित करने के लिए, लेकिन यह भी उपभोक्ताओं के लिए सेवा का पर्दाफाश किया गया था।

नहीं, डब्लूएसडीएल पूरी तरह से एक वर्णनात्मक उपकरण है, इसकी वास्तविक रनटाइम भूमिका नहीं है। वेब सेवा डब्लूएसडीएल से पूरी तरह से स्वतंत्र रूप से संचालित होती है। डब्लूएसडीएल के संपर्क में आने के लिए यह असामान्य नहीं है।

क्या पर एक अलग साबुन पता को रूट करने का कोई आसान तरीका है?

यह पूरी तरह से निर्भर करता है कि आप किस वेब सेवा कार्यान्वयन का उपयोग कर रहे हैं, और आप यह नहीं कहते हैं, हालांकि मैं जेएक्स-डब्ल्यूएस का अनुमान लगा रहा हूं। यदि ऐसा है, तो जेएक्स-डब्ल्यूएस के उपकरण उत्पन्न करने वाले कलाकृतियों से आप क्लाइंट स्टब कंस्ट्रक्टर को यूआरएल में पास करने की अनुमति देते हैं, मुझे लगता है।

+0

+1। –

+0

उत्तर के लिए धन्यवाद।हां मैं जेएक्स-डब्ल्यूएस का उपयोग कर रहा हूं। समस्या यह है कि जिस यूआरएल में मैं गुजरता हूं वह डब्लूएसडीएल का है जो पहुंच योग्य नहीं है। मैं अपनी खुद की सेवा उत्पन्न कर सकता हूं और क्लाइंट को अपने स्वयं के सेवा कार्यान्वयन पर इंगित कर सकता हूं लेकिन यह वास्तविक SOAP पर नहीं जाएगा: पता जिसे मैं इंटरफ़ेस करना चाहता हूं। – jgrowl

+0

क्या आप निश्चित हैं? मैंने सोचा कि स्टब कंस्ट्रक्टर का यूआरएल वेब-सेवा एंडपॉइंट का यूआरएल था, डब्लूएसडीएल का यूआरएल नहीं। यही कारण है कि मुझे जेएक्स-डब्ल्यूएस पसंद नहीं है ..... अच्छा, कारणों में से एक .... – skaffman

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