JavaRush /Blog Jawa /Random-JV /Layanan web. Langkah 2. Kepiye cara nyederhanakake nulis ...
eGarmin
tingkat

Layanan web. Langkah 2. Kepiye cara nyederhanakake nulis klien?

Diterbitake ing grup
Ing cathetan cepet iki, aku pengin mriksa maneh kode klien layanan web sing wis ditulis ing langkah sadurunge . Ing kasus iki, aku bakal nganggep yen sampeyan duwe IDEA mbukak, lan ing proyek kasebut saka Langkah 1. Layanan web kita kudu diluncurake ing proyek iki:

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"));
    }
}
Priksa manawa kita kudu ngerti sadurunge. Saliyane kasunyatan manawa sampeyan butuh akses menyang katrangan wsdl (tanpa iki, nuwun, ora ana cara):

URL url = new URL("http://localhost:1986/wss/hello?wsdl");
sampeyan kudu mbukak file xml iki dhewe lan ndeleng tag definitions, lan ing atribut targetNamespacelan namenelpon konstruktor QName:

QName qname = new QName("http://ws.javarush.ru/", "HelloWebServiceImplService");
banjur sampeyan kudu nyambungake kanthi manual menyang tag service:

Service service = Service.create(url, qname);
lan menyang tag port:

HelloWebService hello = service.getPort(HelloWebService.class);
lan mung sawise kita bisa nelpon cara remot:

hello.getHelloString("JavaRush")
Pitakonan: apa iki simbah-simbah kita padha mati ing paprangan, mula saiki kita nindakake kabeh kanthi tangan? Lan yen dudu layanan web kita, nanging layanan wong liya. Banjur proses iki bakal dadi luwih ora nyenengake. Format XML dirancang kanggo diwaca dening mesin, dudu manungsa. Dadi ayo mesin nindakake pakaryan sing reged lan nikmati proses kasebut. Kanggo iki, kita ora perlu nindakake apa-apa khusus, amarga ... SDK favorit kita, disebut JDK ing Jawa, kalebu sarana khusus disebut wsimport . Nanging dhisik dhisik ... Pisanan, ayo nggawe proyek anyar ing IDEA kanthi milih File > Proyek Anyar ... saka menu lan menehi proyek kasebut HelloWS . Nalika kita takon ngendi kanggo mbukak proyek sing mentas digawe, kita kudu njawab New Window , i.e. ing jendela anyar, amarga aku bakal Wigati sepisan maneh iku penting banget sing project sadurungé mbukak, amarga Kita elinga saka Langkah 1 manawa layanan web kita mlaku ing proyek kasebut. Sampeyan bisa, mesthi, mung mbukak liwat konsol Windows, nanging aku ora seneng nglakoni. Saka proyek anyar, bukak konsol kanthi milih View > Tool Windows > Terminal , utawa mung pencet Alt + F12 . Saiki kita ana ing oyod proyek, lan kita kudu mlebu ing folder src , supaya kita ngetik perintah ing ngisor iki menyang konsol: cd src Saiki wektune nggunakake sarana wsimport . Kerjane ing asas ing ngisor iki: kita menehi katrangan WSDL , lan nanggepi nggawe file rintisan (disebut Stub-classes), sing wis ngemot kabeh fungsi sing dibutuhake kanggo ngakses layanan web. Kelas kasebut bakal diselehake ing paket kasebut ru.javarush.ws. Yen sampeyan takon saka ngendi asale jeneng paket, jawabane: jeneng paket minangka ruang jeneng target sing dibalik saka deskripsi WSDL . Elingi atribut targetNamespaceing tag definitionssaka WSDL . Ing kana kita wis ditulis ing ngisor iki http:// ws.javarush.ru/. Lan iki dudu alamat situs, iki minangka adat kanggo njlèntrèhaké spasi jeneng ing xml, lan yen kita mbuwang http://lan nggedhekake apa sing isih ana ing urutan mbalikke, kita bakal entuk jeneng paket. Dadi, ayo mbukak sarana: wsimport -keep http://localhost:1986/wss/hello?wsdl Supaya bisa digunakake, path kasebut kudu ditemtokake ing variabel lingkungan PATH , utawa sampeyan mung bisa nggunakake path lengkap kasebut. Kanggo kula dumunung ing folder C:\Program Files\Java\jdk1.8.0_31\bin . Wigati dimangerteni manawa sampeyan mung kudu ngirim file WSDL liwat tombol –keep , sing kasedhiya saka jarak adoh liwat link, kajaba, mesthine, kita wis mateni layanan web. Apa kelas rintisan iki? Mung ana loro. Salah sijine yaikuHelloWebService, sing ateges antarmuka layanan web sing padha sing digawe kanthi manual ing Langkah 1. Bentenipun minimal lan dumunung ing kasunyatan sing anotasi sing wis ditemoni digunakake rada beda, lan tambahan, anotasi tambahan digunakake, sing Aku kasebut aku ora ngerti apa-apa, nanging wiwit kabeh bisa kanggo kita tanpa wong sadurunge, banjur padha temenan ora prentah. Kelas kapindho yaiku rintisan HelloWebServiceImplService, yaiku warisan saka kelas Service. Kita wis nemoni kelas Serviceing klien kita. Aku ora bakal menehi kode kelas iki, amarga ... Aku meh ora siyap kanggo nerangake kabeh baris, nanging inti saka kelas nerangake kasunyatan sing kabeh sing sadurunge kita nulis ing klien kanthi manual kanggo nyambung menyang layanan web digawe kanthi otomatis ing kelas iki lan kita mung kudu nelpon salah siji saka cara lan kita bakal duwe kabeh ing openwork. Dadi ayo nulis maneh kode klien ing proyek anyar nggunakake kelas kasebut lan priksa manawa kode kasebut luwih ringkes. Pisanan, ing folder src proyek anyar, ayo nggawe paket ru.javarush.client, lan ing kelas kasebut HelloWebServiceClientkanthi metode 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") );
    }
}
Parsing kode punika dhasar lan apa aku diterangake ing komentar cukup cukup. Sawise ngluncurake klien, kita kudu ndeleng baris: Hello, JavaRush Community!Ing wektu sing padha, klien saka proyek saka Langkah 1 bakal terus kerja lan nampilake teks sing ditulis ing kono, yaiku: Hello, JavaRush! Ing wektu iki, bisa uga kita bisa ngrampungake iki. Langkah, amarga ancasipun sampun kagayuh. Kita nyadari yen ana katrangan WSDL babagan layanan web, jdk siap nyedhiyakake stubkelas stub generasi otomatis kanggo nyederhanakake nulis klien kanggo layanan web iki. Miturut pendapatku, iki minangka fitur sing migunani banget nalika sampeyan pengin nyoba layanan web wong liya lan ora ndeleng katrangan WSDL . Deleng ing mangsa ngarep Ing artikel sabanjure babagan layanan web, aku pengin njelasake ide babagan cara nyebarake layanan web menyang wadhah servlet Tomcat lan menyang server aplikasi sing beda-beda, supaya sampeyan ora perlu mbukak layanan web minangka a aplikasi kapisah, kita iya ing pisanan 2 Langkah. Nanging sadurunge iku, aku luwih apik kanggo nggawe digression singkat babagan topik apa servlets, servlet containers lan carane beda-beda saka server aplikasi lan web biasa ... . Kajaba iku, kita kudu nggawe ringkesan ringkes babagan server aplikasi , sing, miturut pendapatku, pantes diwenehi perhatian.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION