JavaRush /Java блогу /Random-KY /Веб кызматтары. Кадам 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"));
    }
}
Канчалык алдын ала бorшибиз керек экенин байкаңыз. Мындан тышкары, сизге 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 тorндеги JDK деп аталган биздин сүйүктүү SDK wsimport деп аталган атайын утorтаны камтыйт . Бирок биринчи кезекте... Алгач менюдан File > New Project... дегенди тандап , долбоорго HelloWS атын берүү менен IDEAда жаңы долбоор түзөлү . Жаңы түзүлгөн долбоорду кайда ачууну сураганда, биз жооп беришибиз керек Жаңы терезе , б.а. жаңы терезеде, анткени мен дагы бир жолу белгилеп кетем, бул мурунку долбоордун ачык болушу абдан маанилүү, анткени 1-кадамдан биз ошол долбоордо биздин веб-сервисибиз иштеп жатканын эстейбиз. Сиз, албетте, жөн гана Windows консолу аркылуу ишке киргизсеңиз болот, бирок мен муну жактырбайм. Жаңы долбоордон Көрүү > Курал Windows > Терминалды тандап , же жөн гана Alt+F12 баскычтарын басып консолду ачыңыз . Азыр биз долбоордун тамырындабыз жана src папкасына киришибиз керек , ошондуктан консолго төмөнкү буйрукту киргизебиз: Эми wsimportcd src утorтасын колдонууга убакыт келди . Ал төмөнкү принцип боюнча иштейт: биз ага WSDL сыпаттамасын өткөрүп беребиз жана жооп катары ал stub файлдарын (-класстар деп аталган ) түзөт, алар мурунтан эле веб-кызматка кирүү үчүн зарыл болгон бардык функцияларды камтыйт. Бул класстар пакетке жайгаштырылат . Пакеттин аталышы кайдан келгенин сурасаңыз, жооп: пакеттин аталышы WSDL сүрөттөмөсүндөгү тескери максаттуу аттар мейкиндиги. WSDL тегиндеги атрибутту эстеңиз . Ал жерде бизге төмөндөгүлөр жазылган . Жана бул сайттын дареги эмес, аттар мейкиндиктерин xml менен сүрөттөп берүү адаты ушундай, жана эгерде биз тескери тартипте калгандарды четке кагып, кеңейтсек, пакетибиздин аталышын алабыз. Андыктан, келгиле, утorтаны иштетели: Ал иштеши үчүн, ага баруучу жол PATH чөйрө өзгөрмөсүндө көрсөтүлүшү керек , же жөн гана ага толук жолду колдонсоңуз болот. Мен үчүн ал C:\Program Files\Java\jdk1.8.0_31\bin папкасында жайгашкан . Эсиңизде болсун, сизге WSDL файлын –keep ачкычы аркылуу өткөрүү керек , ал шилтеме аркылуу алыстан жеткorктүү, албетте, биз веб-кызматты өчүрүп салбасак. Бул класстар кандай? Алардын экөө гана бар. Алардын бириStubru.javarush.wstargetNamespacedefinitionshttp:// ws.javarush.ru/http://wsimport -keep http://localhost:1986/wss/hello?wsdlHelloWebService, бул негизинен биз 1-кадамда кол менен түзгөн веб-кызмат интерфейси. Айырмачылык минималдуу жана биз буга чейин жолуккан annotationлар бир аз башкача колдонулгандыгында жана кошумча annotationлар колдонулат, алар Мен эч нерсе билбейм деп айттым, бирок баары аларсыз мурда биз үчүн иштегендиктен, алар сөзсүз түрдө милдеттүү эмес. Экинчи класс - HelloWebServiceImplServiceбул класстан мураска алынган stub Service. ServiceКардарыбызда классты мурунтан эле кезиктирдик. Мен бул класстын codeун бербейм, анткени... Мен анын бардык саптарын түшүндүрүүгө даяр эмесмин, бирок класстын маңызы мына ушунда турат: биз мурун кардарда веб-кызматка туташуу үчүн кол менен жазган нерселердин баары ушул класста автоматтык түрдө түзүлөт жана биз жөн гана кылышыбыз керек. анын ыкмаларынын бирин чакырыңыз жана бизде бардыгы ачык түрдө болот. Андыктан, келгиле, бул класстарды колдонуу менен жаңы долбоорго кардар codeун кайра жазып, codeдун кыскараак экенине ынаналы. Биринчиден, жаңы долбоордун 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 бул веб-кызматта кардарды жазууну жөнөкөйлөтүү үчүн бизге stub класстарын автоматтык түрдө чыгарууга даяр экенин түшүндүк. Менин оюмча, бул башка бирөөнүн веб-кызматын сынап көргүңүз келсе жана анын WSDL сүрөттөмөсүн карабасаңыз, абдан пайдалуу функция . Келечекке көз салуу Веб кызматтары тууралуу кийинки макалада мен веб-кызматты Tomcat сервлет контейнерине жана ар кандай тиркеме serverлерине кантип жайгаштыруу боюнча идеяларды баяндагым келет, андыктан веб-кызматты төмөнкүдөй иштетүүнүн кереги жок. өзүнчө колдонмо, биз биринчи 2 кадамда кылгандай. Бирок ага чейин сервлеттер, сервлет контейнерлери деген эмне жана алар тиркеме serverлеринен жана кадимки вебтен эмнеси менен айырмаланат деген темага кыскача токтолуп кетсем жакшы болмок ... . Мындан тышкары, биз колдонмо serverлери жөнүндө кыскача баяндама жасашыбыз керек , менин оюмча, алар биздин көңүл буруубузга татыктуу.
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION