JavaRush /Java Blogu /Random-AZ /Veb xidmətləri. Addım 2. Müştərinin yazılmasını necə asan...
eGarmin
Səviyyə

Veb xidmətləri. Addım 2. Müştərinin yazılmasını necə asanlaşdırmaq olar?

Qrupda dərc edilmişdir
Bu qısa qeyddə mən əvvəlki addımda yazdığımız veb xidməti müştəri koduna yenidən baxmaq istərdim . Bu halda, mən hesab edirəm ki, sizdə IDEA açıqdır və bu layihədə 1-ci addımdan layihə var. Bizim veb xidmətimiz bu layihədə işə salınmalıdır:
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"));
    }
}
Əvvəlcədən nə qədər bilməli olduğumuza diqqət yetirin. Wsdl təsvirinə daxil olmanız lazım olduğuna əlavə olaraq (bunsuz, üzr istəyirik, heç bir yol yoxdur):
URL url = new URL("http://localhost:1986/wss/hello?wsdl");
bu xml faylını özünüz açmalı və etiketə definitionsvə içindəki atributlara baxmalı targetNamespacenamekonstruktoru çağırmalısınız QName:
QName qname = new QName("http://ws.javarush.ru/", "HelloWebServiceImplService");
sonra etiketə əl ilə qoşulmalısınız service:
Service service = Service.create(url, qname);
və etiketdə port:
HelloWebService hello = service.getPort(HelloWebService.class);
və yalnız bundan sonra biz uzaq metodu çağıra bilərik:
hello.getHelloString("JavaRush")
Sual olunur: bizim ulu babalarımız döyüş meydanlarında buna görə həlak olublar ki, biz indi bunların hamısını əllə edirik? Və hətta bizim veb xidmətimiz deyil, başqasınındırsa. Onda bu proses daha da xoşagəlməz olacaq. XML formatı insanlar tərəfindən deyil, maşınlar tərəfindən oxunmaq üçün nəzərdə tutulmuşdur. Beləliklə, gəlin maşının çirkli işləri görməsinə və prosesdən həzz almasına icazə verək. Bunun üçün xüsusi bir şey etməyə ehtiyac yoxdur, çünki... Java-da JDK adlanan sevimli SDK-ya wsimport adlı xüsusi yardım proqramı daxildir . Amma ilk növbədə... Əvvəlcə menyudan Fayl > Yeni Layihə... seçərək layihəyə HelloWS adını verməklə IDEA-da yeni layihə yaradaq . Yeni yaradılmış layihəni harada açacağımızı soruşduqda, cavab verməliyik Yeni Pəncərə , yəni. yeni pəncərədə, çünki bir daha qeyd edəcəyəm ki, əvvəlki layihənin açıq olması çox vacibdir, çünki 1-ci addımdan xatırlayırıq ki, bizim veb xidmətimiz həmin layihədə işləyir. Siz, əlbəttə ki, onu sadəcə Windows konsolu vasitəsilə işə sala bilərsiniz, amma bunu etməyi xoşlamıram. Yeni layihədən View > Tool Windows > Terminal seçərək konsolu açın və ya sadəcə Alt+F12 düymələrini sıxın . İndi biz layihənin kökündəyik və src qovluğuna daxil olmalıyıq , ona görə də konsola aşağıdakı əmri daxil edirik: İndi wsimportcd src yardım proqramından istifadə etmək vaxtıdır . O, aşağıdakı prinsip üzərində işləyir: biz ona WSDL təsvirini veririk və cavab olaraq o , veb-xidmətə daxil olmaq üçün lazım olan bütün funksionallığı özündə ehtiva edən stub faylları (sözdə -classlar) yaradır . Bu siniflər paketə yerləşdiriləcək . Paket adının haradan gəldiyini soruşsanız, cavab belədir: paketin adı WSDL təsvirindən tərsinə çevrilmiş hədəf ad sahəsidir. WSDL- dən etiketdəki atributu yadda saxlayın . Orada aşağıdakıları yazdıq . Və bu sayt ünvanı deyil, ad boşluqlarını xml-də belə təsvir etmək adətdir və tərs qaydada qalanları atıb genişləndirsək, paketimizin adını alacağıq. Beləliklə, köməkçi proqramı işə salaq: Onun işləməsi üçün ona gedən yol PATH mühit dəyişənində göstərilməlidir və ya sadəcə ona gedən tam yoldan istifadə edə bilərsiniz. Mənim üçün C:\Program Files\Java\jdk1.8.0_31\bin qovluğunda yerləşir . Nəzərə alın ki, sizə lazım olan tək şey WSDL faylını keçid vasitəsilə uzaqdan əldə edilə bilən –keep açarı vasitəsilə ötürməkdir , əlbəttə ki, biz veb xidmətini söndürməmişik. Bu stub sinifləri nədir? Onlardan yalnız ikisi var. Onlardan biriStubru.javarush.wstargetNamespacedefinitionshttp:// ws.javarush.ru/http://wsimport -keep http://localhost:1986/wss/hello?wsdlHelloWebService, mahiyyətcə 1-ci addımda əl ilə yaratdığımız eyni veb-xidmət interfeysidir. Fərq minimaldır və bu, artıq rastlaşdığımız annotasiyaların bir qədər fərqli istifadə olunmasında və əlavə olaraq əlavə annotasiyaların istifadə olunmasındadır. Mən heç nə bilmədiyimi qeyd etdim, amma əvvəllər onlarsız hər şey bizim üçün işlədiyi üçün onlar açıq şəkildə məcburi deyillər. İkinci sinif HelloWebServiceImplServicesinifdən miras qalan stubdur Service. ServiceMüştərimizdə artıq siniflə qarşılaşmışıq. Bu sinfin kodunu verməyəcəyəm, çünki... Mən onun bütün sətirlərini izah etməyə demək olar ki, hazır deyiləm, lakin sinfin mahiyyəti ondan ibarətdir ki, veb xidmətə qoşulmaq üçün əvvəllər müştəriyə əl ilə yazdığımız hər şey bu sinifdə avtomatik olaraq yaradılır və biz sadəcə olaraq lazımdır. onun üsullarından birini çağırın və biz açıq işdə hər şeyə sahib olacağıq. Beləliklə, gəlin bu siniflərdən istifadə edərək müştərimizin kodunu yeni layihədə yenidən yazaq və kodun daha qısa olmasına əmin olun. Əvvəlcə yeni layihənin src qovluğunda bir paket yaradaq ru.javarush.clientvə içərisində HelloWebServiceClientmetodu olan bir sinif 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") );
    }
}
Kodu təhlil etmək elementardır və şərhlərdə təsvir etdiklərim kifayətdir. Müştərini işə saldıqdan sonra xətti görməliyik: Hello, JavaRush Community!Eyni zamanda, 1-ci addımdan layihənin müştərisi işləməyə davam edəcək və orada yazdığımız mətni göstərəcək, yəni: Hello, JavaRush! Bu nöqtədə, bəlkə də, biz bunu bitirə bilərik. Addım, çünki məqsədinə çatmışdır. Biz başa düşdük ki, əgər veb xidmətin WSDL təsviri varsa , o zaman jdkstub bu veb xidməti üçün müştəri yazmağı asanlaşdırmaq üçün bizə stub siniflərinin avtomatik yaradılmasını təqdim etməyə hazırdır . Fikrimcə, başqasının veb xidmətini sınamaq və onun WSDL təsvirinə baxmaq istəmədiyiniz zaman bu çox faydalı xüsusiyyətdir. Gələcəyə baxış Veb xidmətləri haqqında növbəti məqalədə mən veb xidmətini Tomcat servlet konteynerinə və müxtəlif proqram serverlərinə necə yerləşdirmək barədə fikirləri qeyd etmək istərdim ki, siz veb xidmətini belə işlətməyə ehtiyac qalmasın. İlk 2 Addımda etdiyimiz kimi ayrı bir tətbiq. Amma bundan əvvəl servletlərin, servlet konteynerlərinin nə olduğu və onların proqram serverlərindən və adi internetdən nə ilə fərqləndiyi mövzusunda qısa bir araşdırma aparmaq daha yaxşı olardı ... . Bundan əlavə, məncə, diqqətimizə layiq olan tətbiq serverləri haqqında qısa məlumat verməliyik .
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION