JavaRush /جاوا بلاگ /Random-SD /ويب خدمتون. قدم 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 . پر پهرين شيون پهرين... پهرين، اچو ته مينيو مان فائل > نئون پروجيڪٽ... کي منتخب ڪري IDEA ۾ هڪ نئون پروجيڪٽ ٺاهيو ۽ پروجيڪٽ کي HelloWS جو نالو ڏيو . جڏهن اسان کان پڇيو ويو ته نئين ٺاهيل پروجيڪٽ کي ڪٿي کولڻ لاء، اسان کي جواب ڏيڻ جي ضرورت آهي New Window ، يعني. هڪ نئين ونڊو ۾، ڇاڪاڻ ته مان هڪ ڀيرو ٻيهر نوٽ ڪندس ته اهو تمام ضروري آهي ته پوئين پروجيڪٽ کليل آهي، ڇاڪاڻ ته اسان کي ياد آهي قدم 1 کان ته اسان وٽ آهي اسان جي ويب سروس انهي پروجيڪٽ ۾ هلندڙ آهي. توهان ڪري سگهو ٿا، يقينا، صرف ان کي ونڊوز ڪنسول ذريعي لانچ ڪريو، پر مون کي اهو پسند ناهي. نئين پروجيڪٽ مان، View > Tool Windows > Terminal کي منتخب ڪندي ڪنسول کوليو ، يا صرف Alt+F12 کي دٻايو . ھاڻي اسان پروجيڪٽ جي روٽ ۾ آھيون، ۽ اسان کي src فولڊر ۾ وڃڻ جي ضرورت آھي ، تنھنڪري اسان ھيٺ ڏنل حڪم ڪنسول ۾ داخل ڪيو: ھاڻي اھو وقت آھي wsimportcd src utility استعمال ڪرڻ جو . اهو هيٺ ڏنل اصول تي ڪم ڪري ٿو: اسان ان کي WSDL وضاحت پاس ڪريون ٿا، ۽ جواب ۾ اهو اسٽب فائلون ٺاهي ٿو (نام نهاد -ڪلاس)، جنهن ۾ اڳ ۾ ئي اهي سڀئي ڪارڪردگي شامل آهن جيڪي اسان کي ويب سروس تائين رسائي جي ضرورت آهي. اهي ڪلاس پيڪيج ۾ رکيا ويندا . جيڪڏهن توهان پڇو ته پئڪيج جو نالو ڪٿان آيو آهي، جواب آهي: پيڪيج جو نالو 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 قدم ۾ ٺاهيو آهي. فرق گهٽ ۾ گهٽ آهي ۽ اهو ان حقيقت ۾ آهي ته اسان اڳ ۾ ئي پيش ڪيل تشريحون ڪجهه مختلف طريقي سان استعمال ڪيون وينديون آهن، ۽ ان کان علاوه، اضافي تشريحون استعمال ڪيون وينديون آهن، جيڪي مون ذڪر ڪيو ته مون کي ڪا به خبر ناهي، پر جيئن ته سڀ ڪجهه اسان لاءِ انهن کان سواءِ ڪم ڪيو، پوءِ اهي واضح طور تي لازمي نه آهن. ٻيو طبقو اسٽب آهي 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 وضاحت آهي ، ته پوءِ jdk اسان کي مهيا ڪرڻ لاءِ تيار آهي پاڻمرادو اسٽب ڪلاسن جي نسل کي stubانهي ويب سروس لاءِ ڪلائنٽ لکڻ کي آسان ڪرڻ لاءِ. منهنجي خيال ۾، هي هڪ تمام مفيد خاصيت آهي جڏهن توهان ڪنهن ٻئي جي ويب سروس کي جانچڻ چاهيو ٿا ۽ ان جي WSDL تفصيل ۾ نه ڏسو. مستقبل تي هڪ نظر ايندڙ مضمون ۾ ويب سروسز جي باري ۾، مان توهان کي خيالن جي ڏي وٺ ڪرڻ چاهيان ٿو ته ڪيئن ويب سروس کي ٽامڪيٽ سروليٽ ڪنٽينر ۾ ۽ مختلف ايپليڪيشن سرورز ۾ ڪيئن لڳايو وڃي، انهي ڪري توهان کي ويب سروس هلائڻ جي ضرورت نه آهي جيئن. هڪ الڳ ايپليڪيشن، جيئن اسان پهرين 2 مرحلن ۾ ڪيو. پر ان کان اڳ، مان سمجهان ٿو ته ان موضوع تي مختصر بحث ڪرڻ بهتر ٿيندو ته servlets، servlet containers ڇا آهن ۽ اهي ايپليڪيشن سرورز ۽ باقاعده ويب کان ڪيئن مختلف آهن .... ان کان علاوه، اسان کي ايپليڪيشن سرورز جو مختصر جائزو وٺڻو پوندو ، جيڪو، منهنجي خيال ۾، اسان جي توجه جو مستحق آهي.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION