JavaRush /جاوا بلاگ /Random-UR /ویب سروسز۔ مرحلہ 2۔ کلائنٹ لکھنے کو کیسے آسان بنایا جائے؟...
eGarmin
سطح

ویب سروسز۔ مرحلہ 2۔ کلائنٹ لکھنے کو کیسے آسان بنایا جائے؟

گروپ میں شائع ہوا۔
اس فوری نوٹ پر، میں اس ویب سروس کلائنٹ کوڈ کو دوبارہ دیکھنا چاہوں گا جو ہم نے پچھلے مرحلے میں لکھا تھا ۔ اس صورت میں، میں فرض کروں گا کہ آپ کے پاس IDEA کھلا ہے، اور اس میں مرحلہ 1 کا پروجیکٹ ہے۔ ہماری ویب سروس اس پروجیکٹ میں شروع کی جانی چاہیے:
package ru.javarush.client;

// нужно, чтобы получить wsdl описание и через него
// дотянуться до самого веб-сервиса
import java.net.URL;
// такой эксепшн возникнет при работе с an objectом URL
import java.net.MalformedURLException;

// классы, чтобы пропарсить xml-ку c wsdl описанием
// и дотянуться до тега service в нем
import javax.xml.namespace.QName;
import javax.xml.ws.Service;

// интерфейс нашего веб-сервиса (нам больше и нужно)
import ru.javarush.ws.HelloWebService;

public class HelloWebServiceClient {
    public static void main(String[] args) throws MalformedURLException {
        // создаем ссылку на wsdl описание
        URL url = new URL("http://localhost:1986/wss/hello?wsdl");

        // Параметры следующего конструктора смотрим в самом первом теге WSDL описания - definitions
        // 1-ый аргумент смотрим в атрибуте targetNamespace
        // 2-ой аргумент смотрим в атрибуте name
        QName qname = new QName("http://ws.javarush.ru/", "HelloWebServiceImplService");

        // Теперь мы можем дотянуться до тега service в wsdl описании,
        Service service = Service.create(url, qname);
        // а далее и до вложенного в него тега port, чтобы
        // получить ссылку на удаленный от нас an object веб-сервиса
        HelloWebService hello = service.getPort(HelloWebService.class);

        // Ура! Теперь можно вызывать удаленный метод
        System.out.println(hello.getHelloString("JavaRush"));
    }
}
غور کریں کہ ہمیں پہلے سے کتنا جاننے کی ضرورت ہے۔ اس حقیقت کے علاوہ کہ آپ کو wsdl وضاحت تک رسائی کی ضرورت ہے (اس کے بغیر، معذرت، کوئی راستہ نہیں ہے):
URL url = new URL("http://localhost:1986/wss/hello?wsdl");
آپ کو اس xML فائل کو خود کھولنے اور ٹیگ کو دیکھنے کی ضرورت ہے definitions، اور اس میں اوصاف targetNamespaceاور nameکنسٹرکٹر کو کال کرنا ہے QName۔
QName qname = new QName("http://ws.javarush.ru/", "HelloWebServiceImplService");
پھر آپ کو دستی طور پر ٹیگ سے جڑنے کی ضرورت ہے service:
Service service = Service.create(url, qname);
اور اس میں ٹیگ پر port:
HelloWebService hello = service.getPort(HelloWebService.class);
اور اس کے بعد ہی ہم ریموٹ طریقہ کو کال کرسکتے ہیں:
hello.getHelloString("JavaRush")
سوال یہ ہے کہ: کیا یہی وجہ ہے کہ ہمارے پردادا میدان جنگ میں مر گئے، تاکہ اب ہم یہ سب ہاتھ سے کرتے ہیں؟ اور اگر یہ ہماری ویب سروس بھی نہیں ہے، بلکہ کسی اور کی ہے۔ پھر یہ عمل اور بھی ناخوشگوار ہوگا۔ XML فارمیٹ مشینوں کے ذریعے پڑھنے کے لیے ڈیزائن کیا گیا ہے، انسانوں کے نہیں۔ تو آئیے مشین کو گندا کام کرنے دیں اور اس عمل سے لطف اندوز ہوں۔ اس کے لیے ہمیں کچھ خاص کرنے کی ضرورت نہیں ہے، کیونکہ... ہمارا پسندیدہ SDK، جسے جاوا میں JDK کہا جاتا ہے، میں ایک خاص یوٹیلیٹی شامل ہے جسے wsimport کہتے ہیں ۔ لیکن سب سے پہلے چیزیں... سب سے پہلے، آئیے مینو سے File > New Project... کو منتخب کرکے اور پروجیکٹ کو HelloWS کا نام دے کر IDEA میں ایک نیا پروجیکٹ بنائیں ۔ جب ہم سے پوچھا جاتا ہے کہ نئے بنائے گئے پروجیکٹ کو کہاں کھولنا ہے، تو ہمیں جواب دینا ہوگا New Window ، یعنی ایک نئی ونڈو میں، کیونکہ میں ایک بار پھر نوٹ کروں گا کہ یہ بہت ضروری ہے کہ پچھلا پروجیکٹ کھلا ہو، کیونکہ ہمیں مرحلہ 1 سے یاد ہے کہ اس پروجیکٹ میں ہماری ویب سروس چل رہی ہے۔ آپ یقیناً اسے ونڈوز کنسول کے ذریعے لانچ کر سکتے ہیں، لیکن مجھے ایسا کرنا پسند نہیں ہے۔ نئے پروجیکٹ سے، View > Tool Windows > Terminal کو منتخب کر کے یا Alt+F12 کو دبا کر کنسول کھولیں ۔ اب ہم پروجیکٹ کی جڑ میں ہیں، اور ہمیں src فولڈر میں جانے کی ضرورت ہے ، لہذا ہم کنسول میں درج ذیل کمانڈ داخل کریں: اب wsimportcd src یوٹیلیٹی کو استعمال کرنے کا وقت آگیا ہے ۔ یہ مندرجہ ذیل اصول پر کام کرتا ہے: ہم اسے WSDL کی تفصیل دیتے ہیں، اور اس کے جواب میں یہ stub فائلیں (نام نہاد -classes) بناتا ہے، جس میں پہلے سے ہی وہ تمام فعالیت ہوتی ہے جس کی ہمیں ویب سروس تک رسائی حاصل کرنے کی ضرورت ہوتی ہے۔ ان کلاسز کو پیکج میں رکھا جائے گا ۔ اگر آپ پوچھتے ہیں کہ پیکیج کا نام کہاں سے آیا ہے، تو جواب ہے: پیکیج کا نام WSDL کی تفصیل سے الٹا ہدف نام کی جگہ ہے۔ WSDL کے ٹیگ میں موجود وصف کو یاد رکھیں ۔ وہاں ہم نے درج ذیل لکھا تھا ۔ اور یہ سائٹ کا ایڈریس نہیں ہے، اس طرح xML میں نام کی جگہوں کو بیان کرنے کا رواج ہے، اور اگر ہم رد کر دیں اور جو باقی رہ گیا ہے اسے بڑھا دیں، تو ہمیں اپنے پیکیج کا نام مل جائے گا۔ تو، آئیے یوٹیلیٹی کو چلائیں: اس کے کام کرنے کے لیے، اس کا راستہ PATH ماحولیاتی متغیر میں بیان کیا جانا چاہیے ، یا آپ اس کے لیے مکمل راستہ استعمال کر سکتے ہیں۔ میرے لیے یہ فولڈر میں واقع ہے C:\Program Files\Java\jdk1.8.0_31\bin ۔ براہ کرم نوٹ کریں کہ آپ کو صرف WSDL فائل کو -keep کلید کے ذریعے پاس کرنا ہے ، جو ایک لنک کے ذریعے دور سے دستیاب ہے، جب تک کہ ہم نے ویب سروس کو غیر فعال نہ کر دیا ہو۔ یہ سٹب کلاسز کیا ہیں؟ ان میں سے صرف دو ہیں۔ ان میں سے ایک ہے۔Stubru.javarush.wstargetNamespacedefinitionshttp:// ws.javarush.ru/http://wsimport -keep http://localhost:1986/wss/hello?wsdlHelloWebServiceجو کہ بنیادی طور پر وہی ویب سروس انٹرفیس ہے جسے ہم نے مرحلہ 1 میں دستی طور پر بنایا تھا۔ فرق کم سے کم ہے اور یہ اس حقیقت میں پنہاں ہے کہ جن تشریحات کا ہم پہلے ہی سامنا کر چکے ہیں وہ قدرے مختلف طریقے سے استعمال ہوتے ہیں، اور اس کے علاوہ اضافی تشریحات بھی استعمال ہوتی ہیں، جو میں نے ذکر کیا کہ میں کچھ نہیں جانتا، لیکن چونکہ ان کے بغیر سب کچھ ہمارے لیے پہلے کام کرتا تھا، تو ظاہر ہے کہ وہ لازمی نہیں ہیں۔ دوسری کلاس stub ہے HelloWebServiceImplService، جو کلاس سے وراثت میں ملتی ہے Service۔ Serviceہم پہلے ہی اپنے کلائنٹ میں کلاس کا سامنا کر چکے ہیں۔ میں اس کلاس کا کوڈ نہیں دوں گا، کیونکہ... میں اس کی تمام سطروں کی وضاحت کرنے کے لیے مشکل سے تیار ہوں، لیکن کلاس کا نچوڑ اس حقیقت پر آتا ہے کہ ہر وہ چیز جو ہم نے پہلے کلائنٹ میں ویب سروس سے منسلک ہونے کے لیے دستی طور پر لکھی تھی، اس کلاس میں خود بخود بن جاتی ہے اور ہمیں بس اس کے طریقوں میں سے ایک کو کال کریں اور ہمارے پاس سب کچھ اوپن ورک میں ہوگا۔ تو آئیے ان کلاسز کا استعمال کرتے ہوئے اپنے کلائنٹ کوڈ کو ایک نئے پروجیکٹ میں دوبارہ لکھیں اور یقینی بنائیں کہ کوڈ زیادہ جامع ہے۔ سب سے پہلے، نئے پروجیکٹ کے src فولڈر میں ، آئیے ایک پیکیج بنائیں ru.javarush.client، اور اس میں ایک HelloWebServiceClientطریقہ کے ساتھ ایک کلاس main:
package ru.javarush.client;

// подключаем классы-заглушки
import ru.javarush.ws.*;

public class HelloWebServiceClient {
    public static void main(String[] args) {
        // подключаемся к тегу service в wsdl описании
        HelloWebServiceImplService helloService = new HelloWebServiceImplService();
        // получив информацию из тега service подключаемся к самому веб-сервису
        HelloWebService hello = helloService.getHelloWebServiceImplPort();

        // обращаемся к веб-сервису и выводим результат в консоль
        System.out.println( hello.getHelloString("JavaRush Community") );
    }
}
کوڈ کو پارس کرنا ابتدائی ہے اور جو میں نے تبصروں میں بیان کیا ہے وہ کافی ہے۔ کلائنٹ کو لانچ کرنے کے بعد، ہمیں لائن دیکھنا چاہئے: Hello, JavaRush Community!اسی وقت، مرحلہ 1 سے پروجیکٹ کا کلائنٹ کام کرنا جاری رکھے گا اور اس کا متن دکھائے گا جو ہم نے اس میں لکھا ہے، یعنی: Hello, JavaRush! اس وقت، شاید، ہم اسے ختم کر سکتے ہیں۔ قدم، کیونکہ اس کا مقصد حاصل کر لیا گیا ہے. ہم نے محسوس کیا کہ اگر کسی ویب سروس کی WSDL تفصیل موجود ہے ، تو jdkstub ہمیں اس ویب سروس کے لیے کلائنٹ کو لکھنے کو آسان بنانے کے لیے اسٹب کلاسز کی خودکار جنریشن فراہم کرنے کے لیے تیار ہے ۔ میری رائے میں، یہ ایک بہت مفید خصوصیت ہے جب آپ کسی اور کی ویب سروس کو جانچنا چاہتے ہیں اور اس کی WSDL تفصیل میں جھانکنا نہیں چاہتے ہیں۔ مستقبل پر ایک نظر ویب سروسز کے بارے میں اگلے مضمون میں، میں اس بارے میں خیالات کا خاکہ پیش کرنا چاہوں گا کہ ویب سروس کو ٹامکیٹ سرولیٹ کنٹینر اور مختلف ایپلیکیشن سرورز میں کیسے تعینات کیا جائے، تاکہ آپ کو ویب سروس کو چلانے کی ضرورت نہ پڑے۔ ایک علیحدہ درخواست، جیسا کہ ہم نے پہلے 2 مراحل میں کیا تھا۔ لیکن اس سے پہلے، میں سمجھتا ہوں کہ سرولیٹس، سرولیٹ کنٹینرز کیا ہیں اور وہ ایپلیکیشن سرورز اور ریگولر ویب سے کیسے مختلف ہیں اس موضوع پر مختصر بحث کرنا بہتر ہوگا ۔ اس کے علاوہ، ہمیں ایپلیکیشن سرورز کا ایک مختصر جائزہ لینا پڑے گا ، جو میری رائے میں، ہماری توجہ کے مستحق ہیں۔
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION