কীভাবে ওয়েবসার্চির ইউআরএল শেষ পয়েন্ট পরিবর্তন করবেন?


101

Eclipse 'wsdl থেকে ওয়েব সার্ভিস ক্লায়েন্ট' ব্যবহার করে আমি JBoss ইউস (JAX-WS সামঞ্জস্যপূর্ণ) ব্যবহার করে একটি ওয়েব-পরিষেবা ক্লায়েন্ট তৈরি করেছি।

সুতরাং, কেবলমাত্র আমি সরবরাহ করেছি একটি ওয়েব-পরিষেবা ডাব্লুএসডিএল এর url।

এখন, ওয়েব পরিষেবা সরবরাহকারী আমাকে ওয়েব-পরিষেবার "ক্লায়েন্ট এন্ডপয়েন্ট অ্যাপ্লিকেশন অ্যাক্সেসের url" পরিবর্তন করতে বলেছে।

এটি কী এবং কীভাবে এটি পরিবর্তন করা যায়?


নতুন ইউআরএল দিয়ে আপনি কি একই এক্সিলিপ উইজার্ডটি ব্যবহার করে জিনিসটি পুনরায় তৈরি করতে পারবেন?
থিলো

ওয়েব সার্ভিস প্রোভাইডারকে বলুন আপনার ডাব্লুএসডিএল করার জন্য নতুন ইউআরএল প্রয়োজন, তারপরে ক্লায়েন্টটি পুনরায় জন্মানোর জন্য এটিকে এক্সপ্লাইজ উইজার্ড দিয়ে ব্যবহার করুন।
সিস্টেমে সরিয়ে দিন

@ থিলো @ সিস্টেমম্পুতো গুজ, সমস্যাটি হ'ল তারা একই ডাব্লুএসডিএল ইউআরএল আছে !! আমি নিশ্চিত নই, তবে আমার কাছে মনে হয় যে এক্সিসে আপনি ওয়েব পরিষেবাটি চালু করার সময় একটি URL সরবরাহ করতে পারেন। জ্যাকস-ডাব্লুএস-এ আপনি "রানটাইমের সময় ক্লায়েন্টের শেষ পয়েন্ট" পরিবর্তন করতে পারবেন না। কোন ধারণা, ছেলেরা?
ইউজেনপ

1
@ পাস্কেল থিভেন্ট, @ সিস্টেমেটুনোউট সিট: "ক্লায়েন্ট অ্যাপ্লিকেশন অ্যাক্সেসের জন্য ইউআরএল বা শেষ পয়েন্ট"
ইউজেনপ

1
ঠিক আছে, এই বাক্যটি সম্পর্কে আমার বোঝার বিষয়টি হল "ক্লায়েন্টরা একটি পরিষেবা শেষ পয়েন্ট অ্যাক্সেস করে; শেষ পয়েন্টের অবস্থানটি পরিবর্তিত হয়েছে"। এবং এটি অর্থবোধ করে।
পাসক্ল থিভেন্ট

উত্তর:


174

আইএমও, সরবরাহকারী আপনাকে ক্লায়েন্টের এন্ডপয়েন্টটি নয় (তবে ওয়েব সার্ভিসে কোথায় পৌঁছাতে হবে) পরিষেবার শেষ পয়েন্ট পরিবর্তন করতে বলছে (আমি বুঝতে পারি না এটি কী হতে পারে)। পরিষেবাটির শেষ পয়েন্টটি পরিবর্তন করতে, আপনার কাছে মূলত দুটি বিকল্প রয়েছে।

শেষ পয়েন্ট URL সেট করতে বন্ডিং সরবরাহকারী ব্যবহার করুন ider

প্রথম বিকল্পটি হ'ল (প্রতিটি প্রক্সি প্রয়োগ করে ইন্টারফেস) এর BindingProvider.ENDPOINT_ADDRESS_PROPERTYসম্পত্তি মান পরিবর্তন করা :BindingProviderjavax.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]));
...

ত্রুটিটি হ'ল এটি কেবল তখনই কাজ করে যখন মূল ডাব্লুএসডিএল এখনও অ্যাক্সেসযোগ্য। প্রস্তাবিত নয়।

শেষ পয়েন্ট 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
আমি মনে করি যে দ্বিতীয় কোড ব্লকে একটি ত্রুটি রয়েছে, এটি ইউআরএল newEndPoint = নতুন URL ("WSDL_URL") হওয়া উচিত নয়; প্রথম লাইনে ??
জাইমে হাবলুটজেল


12
এটি উল্লেখ করার মতো যে আধুনিক wsimportসরঞ্জামগুলি কোনও get[Service]Portপদ্ধতির সাথে কোড আর জেনারেট করে না । পরিবর্তে, এই ধরণের বৈশিষ্ট্য নির্ধারণের get[Service]জন্য ফলাফল অবজেক্টটিকে কল এবং কাস্ট করুন BindingProvider
ক্রিস্টোফার শুল্টজ

Wsimport টিপটিতে ক্রেস্টোফারশাল্টজকে ধন্যবাদ! সেই ডিএফ আমাদের জন্য কাজ করেছেন
কুগা

1
আমি যতক্ষণ না সিএক্সএফ দ্বারা উত্পাদিত স্টাব কোড থেকে বুঝতে পারি, উপরের দ্বিতীয় বিকল্পটি ডাব্লুএসডিএল ইউআরএল পরিবর্তন করে, পরিষেবা ইউআরএল নয়। আমি কিছু অনুপস্থিত করছি?
ক্যা্যাসার্ট

16

এখানে কিছু স্পেসিফিকেশন যোগ করার জন্য, আপনি যখন আপনার পরিষেবা তৈরি করবেন, পরিষেবা শ্রেণি ডিফল্ট 'wsdlLocation' ব্যবহার করে, যা sোকানো হয়েছিল যখন ক্লাসটি ডাব্লুএসডিএল থেকে তৈরি করা হয়েছিল। সুতরাং আপনার যদি সোমস সার্ভিস নামে একটি পরিষেবা শ্রেণি থাকে এবং আপনি এই জাতীয় উদাহরণ তৈরি করেন:

SomeService someService = new SomeService();

আপনি যদি সামসারসিভারের ভিতরে তাকান, আপনি দেখতে পাবেন যে কনস্ট্রাক্টরটি এর মতো দেখাচ্ছে:

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

সুতরাং আপনি যদি এটি অন্য কোনও ইউআরএলকে নির্দেশ করতে চান তবে আপনি কেবল এমন কনস্ট্রাক্টর ব্যবহার করুন যা ইউআরএল আর্গুমেন্ট গ্রহণ করে (কিউনাম এবং বৈশিষ্ট্যগুলিও সেট করার জন্য 6 জন নির্মাতা রয়েছে)। উদাহরণস্বরূপ, আপনি যদি একটি স্থানীয় টিসিপি / আইপি মনিটর সেট আপ করেন যা 9999 পোর্টে শুনছে এবং আপনি সেই ইউআরএলটিতে পুনঃনির্দেশ করতে চান:

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

এবং এটি পরিষেবাটির ভিতরে এই কনস্ট্রাক্টরকে কল করবে:

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

2
অগত্যা। আমার অ্যাপাচি সিএক্সএফ এর ডাব্লুএসডিএল 2 জাভা দিয়ে তৈরি পরিষেবা রয়েছে এবং আমরা যখন নতুন ডাব্লুএসডিএল অবস্থানটি কনস্ট্রাক্টরের কাছে পৌঁছে দিই, তখনও এর বন্দরগুলি সংকলন / প্রজন্মের সময় সেট করা অবস্থানের সাথে আবদ্ধ করার চেষ্টা করে (বাইন্ডিংপ্রাইডার এবং বন্দর টাইপকাস্ট ছাড়া কোনও বিকল্প ছাড়েনি) নতুন অনুরোধটি তার অনুরোধ প্রসঙ্গে মানচিত্রে সেট করুন))
luis.espinal

1
@ লুইস - আপনি কী দেখছেন তা ঠিক জানা, তবে আপনি যদি ডিবাগ করেন তবে কলটি জাভ্যাক্স সরবরাহকারী শ্রেণিতে দেখতে হবে এবং তারপরে আপনার নতুন ডাব্লুএসডিএল অবস্থানের সাথে শেষ পয়েন্টটি তৈরি করার চেষ্টা দেখুন (ধরে নিবেন আপনি জ্যাকস-ডাব্লুএস 2.0 ব্যবহার করছেন) + +)। তারপরে আপনার পরিষেবার অভ্যন্তরে, getPort কলটিতে সুপার.getPort কল করা উচিত, যা আপনার নতুন পোর্টটি একটি পরিষেবাডিজিয়েট অবজেক্টে সেট করে। JAX-WS 2.0 তে এটি javax.xML.ws.S সার্ভিসের সাথে কাজ করা উচিত। আমি সুপার কলে একটি ব্রেকপয়েন্ট রেখেছিলাম এবং সেখান থেকে তদন্ত করব।
ম্যাটসি

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: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
অনেক ক্ষেত্রে ডাব্লুএসডিএল আপনার উপর চাপিয়ে দেওয়া হয়েছে এবং আপনার এটি পরিবর্তন করার কথা নয়। আরও গুরুত্বপূর্ণ, পরিবেশ থেকে অন্য (টেস্ট বনাম লাইভ), এন্ডপয়েন্টের ইউআরএল পরিবর্তিত হওয়ার সম্ভাবনা রয়েছে .. এবং কেউ এই ক্ষেত্রে ডাব্লুএসডিএলটিকে টুইট করতে এবং পুনরায় সংকলন করতে চায় না।
মায়োবিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.