JavaRush /Java блогы /Random-KK /Веб қызметтері. 2-қадам. Клиент жазуды қалай жеңілдетуге ...
eGarmin
Деңгей

Веб қызметтері. 2-қадам. Клиент жазуды қалай жеңілдетуге болады?

Топта жарияланған
Осы жылдам жазбада мен алдыңғы қадамда жазған веб-қызмет клиентінің codeын қайта қарағым келеді . Бұл жағдайда сізде 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 пішімі адамдар емес, машиналар оқуға арналған. Олай болса, машинаға лас жұмысты жасап, процестен ләззат алайық. Бұл үшін бізге ерекше ештеңе жасаудың қажеті жоқ, өйткені... Java тіліндегі JDK деп аталатын сүйікті SDK құрамында wsimport деп аталатын арнайы қызметтік бағдарлама бар . Алдымен, алдымен мәзірден Файл > Жаңа жоба... тармағын таңдап , жобаға HelloWS атын беру арқылы IDEA жүйесінде жаңа жоба жасайық . Жаңадан құрылған жобаны қайда ашу керектігін сұрағанда, біз жауап беруіміз керек Жаңа терезе , яғни. жаңа терезеде, өйткені мен алдыңғы жобаның ашық болуы өте маңызды екенін тағы бір рет атап өтемін, өйткені 1-қадамнан біздің веб-қызметіміз сол жобада жұмыс істейтінін есте ұстаймыз. Әрине, оны Windows консолі арқылы іске қосуға болады, бірақ мен мұны ұнатпаймын. Жаңа жобадан Көрініс > Құрал Windows > Терминал тармағын таңдау арқылы консольді ашыңыз немесе жай ғана Alt+F12 пернелерін басыңыз . Енді біз жобаның түбіріндеміз және src қалтасына кіруіміз керек , сондықтан консольге келесі пәрменді енгіземіз: Енді wsimportcd src утorтасын пайдалану уақыты келді . Ол келесі принцип бойынша жұмыс істейді: біз оған WSDL сипаттамасын береміз және жауап ретінде ол веб-қызметке қол жеткізу үшін қажет барлық функционалдылықты қамтитын stub файлдарын (-сыныптар деп аталатын) жасайды . Бұл сыныптар пакетте орналастырылады . Бума атауы қайдан келгенін сұрасаңыз, жауап: бума атауы 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-қадамда қолмен жасаған бірдей веб-қызмет интерфейсі. Айырмашылық аз және ол біз бұрыннан кездестірген annotationлардың сәл басқаша пайдаланылғандығында, сонымен қатар қосымша annotationлар пайдаланылады. Мен ештеңе білмейтінімді айттым, бірақ бәрі бұрын оларсыз біз үшін жұмыс істегендіктен, олар міндетті емес. Екінші класс - stub HelloWebServiceImplService, ол сыныптан мұрагер Service. ServiceБіз клиентімізде сыныпты кездестірдік. Мен бұл сыныптың codeын бермеймін, өйткені... Мен оның барлық жолдарын түсіндіруге дайын емеспін, бірақ сыныптың мәні мынада: веб-қызметке қосылу үшін клиентте бұрын қолмен жазған барлық нәрсе осы сыныпта автоматты түрде жасалады және бізге жай ғана қажет. оның әдістерінің бірін шақырыңыз және бізде барлығы ашық жұмыста болады. Ендеше, осы сыныптарды пайдалана отырып, клиенттің codeын жаңа жобада қайта жазайық және codeтың қысқарақ екеніне көз жеткізейік. Алдымен, жаңа жобаның src қалтасында буманы және оның ішінде әдісі бар ru.javarush.clientсыныпты жасайық : HelloWebServiceClientmain
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 осы веб-қызметке клиент жазуды жеңілдету үшін бізге stub сыныптарын автоматты түрде құруға дайын екенін түсіндік. Менің ойымша, бұл басқа біреудің веб-қызметін тексергіңіз келсе және оның WSDL сипаттамасына көз жүгіртпесеңіз өте пайдалы мүмкіндік. Болашаққа көзқарас Веб-қызметтері туралы келесі мақалада мен веб-қызметті келесідей іске қосудың қажеті болмас үшін Tomcat сервлет контейнеріне және әртүрлі қолданба serverлеріне қалай орналастыру керектігі туралы идеяларды сипаттағым келеді. бірінші 2 қадамдағыдай бөлек қолданба. Бірақ бұған дейін сервлеттер, сервлет контейнерлері деген не және олардың қолданбалы serverлерден және кәдімгі вебтен айырмашылығы неде... тақырыбына қысқаша шолу жасаған дұрыс деп ойлаймын . Сонымен қатар, біз қосымша serverлерге қысқаша шолу жасауымыз керек , менің ойымша, бұл біздің назарымызға лайық.
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION