वेबस्पेल यूआरएल एंडपॉइंट कैसे बदलें?


101

मैंने JBoss बर्तनों (JAX-WS संगत) का उपयोग करके एक वेब-सेवा क्लाइंट उत्पन्न किया, जो कि 'wsdl से वेब सेवा क्लाइंट' ग्रहण का उपयोग कर रहा है।

तो, केवल एक चीज जो मैंने प्रदान की, वह थी वेब-सेवा डब्ल्यूएसडीएल का एक यूआरएल।

अब, वेब सेवा प्रदाता मुझे वेब-सेवा के "क्लाइंट एंडपॉइंट एप्लिकेशन एक्सेस के यूआरएल" को बदलने के लिए कहता है।

यह क्या है और इसे कैसे बदलना है?


क्या आप नए URL के साथ समान ग्रहण विज़ार्ड का उपयोग करके बस इस चीज़ को फिर से बना सकते हैं?
थिलो

वेब सेवा प्रदाता को बताएं कि आपको wsdl के लिए नए url की आवश्यकता है, फिर ग्राहक को पुनः प्राप्त करने के लिए एक्लिप्स विज़ार्ड के साथ इसका उपयोग करें।
सिस्टमपुनटोउट

@Thilo @systemputoout GUYS, समस्या यह है कि उनके पास एक ही WSDL URL है !! मुझे यकीन नहीं है, लेकिन यह मुझे लगता है कि एक्सिस में आप वेब सेवा शुरू करते समय एक यूआरएल प्रदान कर सकते हैं। JAX-WS में आप "रनटाइम के दौरान क्लाइंट समापन बिंदु" नहीं बदल सकते। कोई विचार, दोस्तों?
यूजीनिप

1
@ पास्कल थिवेंट, @ सिस्टेमपुनआउट आउट: "URL या क्लाइंट एप्लिकेशन एक्सेस के लिए समापन बिंदु"
EugeneP

1
खैर, इस वाक्य के बारे में मेरी समझ यह है कि "ग्राहक एक सेवा समापन बिंदु तक पहुँचते हैं; समापन बिंदु स्थान बदल गया है"। और यह समझ में आता है।
पास्कल थिवेंट

जवाबों:


174

IMO, प्रदाता आपको सेवा समापन बिंदु (यानी जहां वेब सेवा तक पहुंचने के लिए) को बदलने के लिए कह रहा है, न कि ग्राहक समापन बिंदु (मुझे समझ नहीं आता कि यह क्या हो सकता है)। सेवा समापन बिंदु को बदलने के लिए, आपके पास मूल रूप से दो विकल्प हैं।

समापन बिंदु URL सेट करने के लिए बाइंडिंग प्रदाता का उपयोग करें

पहला विकल्प BindingProvider.ENDPOINT_ADDRESS_PROPERTYसंपत्ति के मूल्य में बदलाव करना है BindingProvider(प्रत्येक प्रॉक्सी का javax.xml.ws.BindingProviderइंटरफ़ेस):

...
EchoService service = new EchoService();
Echo port = service.getEchoPort();

/* Set NEW Endpoint Location */
String endpointURL = "http://NEW_ENDPOINT_URL";
BindingProvider bp = (BindingProvider)port;
bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointURL);

System.out.println("Server said: " + echo.echo(args[0]));
...

दोष यह है कि यह केवल तब काम करता है जब मूल WSDL अभी भी सुलभ है। सिफारिश नहीं की गई।

समापन बिंदु URL प्राप्त करने के लिए WSDL का उपयोग करें

दूसरा विकल्प WSDL से समापन बिंदु URL प्राप्त करना है।

...
URL newEndpoint = new URL("NEW_ENDPOINT_URL");
QName qname = new QName("http://ws.mycompany.tld","EchoService"); 

EchoService service = new EchoService(newEndpoint, qname);
Echo port = service.getEchoPort();

System.out.println("Server said: " + echo.echo(args[0]));
...

7
मुझे लगता है कि दूसरे कोड ब्लॉक में कोई त्रुटि है, यह URL newEndpoint = नया URL ("WSDL_URL") नहीं होना चाहिए; पहली पंक्ति में ??
Jaime Hablutzel

3
यहाँ एक ट्यूटोरियल के लिए लिंक है tugdualgrall.blogspot.com/2009/02/…
shareef

12
यह इंगित करने योग्य है कि आधुनिक wsimportउपकरण get[Service]Portकिसी भी विधि से कोड उत्पन्न नहीं करते हैं । इसके बजाय, इन प्रकार के गुणों को सेट करने के get[Service]लिए परिणामी वस्तु को कॉल और कास्ट करें BindingProvider
क्रिस्टोफर शुल्त्स

Wsimport टिप पर @ChristopherSchultz धन्यवाद! वह हार। हमारे लिए काम किया
Cuga

1
जहाँ तक मैं cxf जनित स्टब कोड से समझता हूँ, ऊपर दूसरा विकल्प wsdl url है, न कि सेवा url। क्या मैं कुछ भूल रहा हूँ?
कैसर्ट

16

यहां कुछ स्पष्टीकरण जोड़ने के लिए, जब आप अपनी सेवा बनाते हैं, तो सेवा वर्ग डिफ़ॉल्ट 'wsdLLocation' का उपयोग करता है, जो वर्ग wsdl से निर्मित होने पर इसमें डाला जाता था। इसलिए यदि आपके पास किसी सेवा वर्ग को SomeService कहा जाता है, और आप इस तरह से एक उदाहरण बनाते हैं:

SomeService someService = new SomeService();

यदि आप SomeService के अंदर देखते हैं, तो आप देखेंगे कि निर्माता इस तरह दिखता है:

public SomeService() {
        super(__getWsdlLocation(), SOMESERVICE_QNAME);
}

इसलिए यदि आप चाहते हैं कि यह किसी अन्य URL को इंगित करे, तो आप बस उस तर्क का उपयोग करते हैं जो URL तर्क लेता है (qname और सुविधाओं को सेट करने के लिए 6 निर्माता हैं)। उदाहरण के लिए, यदि आपने एक स्थानीय टीसीपी / आईपी मॉनिटर स्थापित किया है जो 9999 पोर्ट पर सुन रहा है, और आप उस URL पर पुनर्निर्देशित करना चाहते हैं:

URL newWsdlLocation = new URL("http://theServerName:9999/somePath");
SomeService someService = new SomeService(newWsdlLocation);

और जो इस निर्माता को सेवा के अंदर बुलाएगा:

public SomeService(URL wsdlLocation) {
    super(wsdlLocation, SOMESERVICE_QNAME);
}

2
जरुरी नहीं। मेरे पास अपाचे CXF के wsdl2java के साथ सृजित सेवाएं हैं, और यहां तक ​​कि जब हम कंस्ट्रक्टर को नया wsdl स्थान देते हैं, तब भी इसके पोर्ट कंपाइल / जनरेशन समय पर सेट किए गए स्थान पर बाँधने का प्रयास करते हैं (किसी भी जगह को छोड़कर) लेकिन पोर्ट को BindProvider में टाइप करने के लिए नहीं अपने अनुरोध के संदर्भ मानचित्र में नया पता सेट करें।)
luis.espinal

1
@ उपसर्ग - यह जानने के लिए कि आप क्या देख रहे हैं, यह जानना कठिन है, लेकिन यदि आप डिबग करते हैं, तो आपको javax प्रदाता वर्ग में कॉल देखना चाहिए, और फिर इसे अपने नए wsdl स्थान के साथ समापन बिंदु बनाने का प्रयास करें (यह मानते हुए कि आपAX-WS 2.0 का उपयोग कर रहे हैं +)। फिर आपकी सेवा के अंदर, getPort कॉल को super.getPort कॉल करना चाहिए, जो कि उपयोग करता है आपके नए पोर्ट को एक सर्विसडेलगेट ऑब्जेक्ट में सेट किया गया है। यह कैसे JAX-WS 2.0 में javax.xml.ws.Service के साथ काम करना चाहिए। मैं सुपर कॉल पर एक ब्रेकपॉइंट लगाता हूं और वहां से जांच करता हूं।
मैट सीएफ

0

मैं मौजूदा पते की संपत्ति को बदलने के लिए @ फेमी के रूप में इतनी दूर नहीं जाऊंगा । आप आसानी से परिभाषा अनुभाग में नई सेवाओं को जोड़ सकते हैं।

<wsdl:service name="serviceMethodName_2">
  <wsdl:port binding="tns:serviceMethodNameSoapBinding" name="serviceMethodName">
    <soap:address location="http://new_end_point_adress"/>
  </wsdl:port>
</wsdl:service>

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


-6

अंतिम पता प्रॉपर्टी को बदलने के लिए अपनी wsdl फ़ाइल को संपादित करें

<wsdl:definitions.......
  <wsdl:service name="serviceMethodName">
    <wsdl:port binding="tns:serviceMethodNameSoapBinding" name="serviceMethodName">
      <soap:address location="http://service_end_point_adress"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

11
कई मामलों में, WSDL आपको लगाया जाता है और आप इसे बदलने वाले नहीं हैं। इससे भी महत्वपूर्ण बात, एक वातावरण से दूसरे (परीक्षण बनाम लाइव) के लिए, समापन बिंदु url को बदलने की संभावना है .. और कोई भी इस मामले में wsdl और recompile को ट्विक करना नहीं चाहता है।
मायोबिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.