នៅក្នុងអត្ថបទនេះខ្ញុំនឹងនិយាយអំពីអ្វីដែលជាឯកសារ WSDL ហេតុអ្វីបានជាវាត្រូវការ និងរបៀបធ្វើការជាមួយវា។
ផែនទីអត្ថបទ
តើអ្វីទៅជា WSDL
WSDL គឺជាភាសាពិពណ៌នាសេវាកម្មគេហទំព័រដែលមានរចនាសម្ព័ន្ធ XML ។ គោលបំណងសំខាន់នៃឯកសារ WSDL គឺជាចំណុចប្រទាក់សម្រាប់ការចូលប្រើមុខងារសេវាកម្ម និងប្រភេទទិន្នន័យត្រឡប់មកវិញ។ ផ្លូវទៅកាន់សំណើដំណើរការម៉ាស៊ីនមេ។ល។
ផ្លូវទៅកាន់ឯកសារ wsdl ជាធម្មតាមើលទៅដូច http://host/services/wsdl/gbdar-v2-2.wsdl
មានឧបករណ៍ជាច្រើន បណ្ណាល័យត្រូវបានរចនាឡើងដើម្បីអានឯកសារ WSDL ។
សាប៊ូយូ
ឧបករណ៍មួយបែបនោះគឺ soapUi()។ តាមរយៈការដំឡើងការចែកចាយដែលបានរចនាឡើងសម្រាប់វេទិការបស់អ្នក អ្នកអាចបង្កើតបាន។ គម្រោងថ្មី។ដោយក្រុមគម្រោង File/New SoapUi ។ នៅក្នុងប្រអប់សម្រាប់បង្កើតគម្រោងថ្មី ទុកប្រអប់ធីក បង្កើតសំណើគំរូ
ការអនុវត្តសំណួរ
នៅក្នុងគម្រោងថ្មី គំរូសំណើនឹងត្រូវបានបង្កើតដោយស្វ័យប្រវត្តិសម្រាប់សេវាកម្ម ការពិពណ៌នាដែលមាននៅក្នុងឯកសារ wsdl ។ នៅខាងឆ្វេងក្នុងមែកធាងអ្នកនឹងឃើញបញ្ជីមុខងារដែលមាននៅក្នុងឯកសារ WSDL ។ ខ្ញុំនឹងបង្ហាញមុខងារចម្លង។ នៅខាងក្នុងវាមានសំណើរ Request1 ដោយចុចពីរដងលើដែលយើងនឹងឃើញប្រអប់ដែលមានគំរូសំណើជំនួសឱ្យប៉ារ៉ាម៉ែត្រលំនាំដើមវានឹងមានសញ្ញាសួរ។ ដើម្បីឱ្យមុខងារប្រតិបត្តិបានត្រឹមត្រូវ អ្នកត្រូវតែបំពេញប៉ារ៉ាម៉ែត្រទាំងអស់ដែលមិនត្រូវបានសម្គាល់ដោយស្លាកជម្រើស ហើយបន្ទាប់មកចុចលើត្រីកោណពណ៌បៃតងនៅជ្រុងខាងឆ្វេងខាងលើនៃប្រអប់។
ប្រសិនបើប៉ារ៉ាម៉ែត្រទាំងអស់ត្រូវបានបញ្ជាក់ត្រឹមត្រូវ ការឆ្លើយតបរបស់សេវាកម្មចំពោះសំណើនឹងបង្ហាញនៅខាងស្តាំ។
SoapUi ផ្តល់នូវសមត្ថភាពក្នុងការមើលប៉ារ៉ាម៉ែត្រនៃឯកសារ WSDL ដើម្បីធ្វើដូច្នេះអ្នកត្រូវចុចពីរដងលើឈ្មោះចំណុចប្រទាក់ (សម្គាល់ដោយរូបតំណាងពណ៌បៃតងនៅក្នុងមែកធាងឯកសារ WSDL សម្រាប់ខ្ញុំ - gdbar-v2-2SOAP) ។ នៅក្នុងប្រអប់ អ្នកអាចរកឃើញ៖
- ផ្ទាំង OverView - ការពិពណ៌នា ប៉ារ៉ាម៉ែត្រទូទៅ WSDL បញ្ជីមុខងារ និងសកម្មភាពម៉ាស៊ីនមេដែលពាក់ព័ន្ធ
- ផ្ទាំងសេវាកម្មបញ្ចប់ - ផ្លូវទៅកាន់ម៉ាស៊ីនមេ និងប៉ារ៉ាម៉ែត្រផ្សេងទៀត។
- មាតិកា WSDL - មែកធាងរុករកឯកសារ
- ការអនុលោមតាម WS-I — នៅទីនេះអ្នកអាចបង្កើតរបាយការណ៍ WS-I នៅលើចំណុចប្រទាក់
ការបង្កើតឯកសារ
SoapUi អនុញ្ញាតឱ្យយើងបង្កើតឯកសារមុខងារ WSDL ។ ដើម្បីធ្វើដូចនេះចុច ចុចកណ្ដុរស្ដាំតាមរយៈចំណុចប្រទាក់ ហើយហៅពាក្យបញ្ជា បង្កើតឯកសារ។ជាលទ្ធផល យើងនឹងទទួលបានសៀវភៅណែនាំលម្អិតជាទម្រង់ html ។
នោះហើយជាទាំងអស់, ជាវការបង្ហោះថ្មី, ទុកមតិយោបល់, ផ្តល់យោបល់សម្រាប់ការកែលម្អអត្ថបទ។
សេវាគេហទំព័រនីមួយៗផ្តល់ឯកសារ WSDL (ភាសាពិពណ៌នាសេវាកម្មគេហទំព័រ) ដែលពិពណ៌នាអំពីអ្វីគ្រប់យ៉ាងដែលអតិថិជនត្រូវការដើម្បីធ្វើការជាមួយសេវាកម្មនេះ។ ឯកសារ WSDL ផ្តល់នូវវិធីសាមញ្ញ និងស្របសម្រាប់អ្នកអភិវឌ្ឍន៍ដើម្បីបញ្ជាក់វាក្យសម្ព័ន្ធសម្រាប់ការហៅវិធីសាស្ត្រគេហទំព័រណាមួយ។ ជាងនេះទៅទៀត ឯកសារនេះអនុញ្ញាតឱ្យប្រើឧបករណ៍បង្កើតថ្នាក់ប្រូកស៊ីដោយស្វ័យប្រវត្តិ ដែលស្រដៀងទៅនឹងអ្វីដែលរួមបញ្ចូលក្នុងក្របខ័ណ្ឌ ស្ទូឌីយោ Visual.NET និង .NET Framework ។ សូមអរគុណចំពោះឧបករណ៍ទាំងនេះ ការប្រើប្រាស់សេវាកម្មគេហទំព័រគឺងាយស្រួលដូចការប្រើប្រាស់ថ្នាក់មូលដ្ឋានដែរ។
ឯកសារ WSDL គឺផ្អែកលើ ទ្រង់ទ្រាយ XMLយោងតាមព័ត៌មានដែលត្រូវបានបែងចែកជា 5 ក្រុម។ ក្រុមបីដំបូងគឺជានិយមន័យអរូបីដែលឯករាជ្យនៃវេទិកា បណ្តាញ ឬភាសាជាក់លាក់ ខណៈដែលក្រុមពីរដែលនៅសល់រួមមានការពិពណ៌នាជាក់លាក់។
ពិធីការសាប៊ូ
ការទំនាក់ទំនងរវាងសេវាកម្មគេហទំព័រ និងអតិថិជនរបស់ពួកគេត្រូវបានអនុវត្តតាមរយៈសារក្នុងទម្រង់ XML ។
SOAP (Simple Object Access Protocol) គឺជាពិធីសារសម្រាប់ជ្រើសរើសសេវាកម្មគេហទំព័រ។
គំនិតចម្បងនៃស្តង់ដារ SOAP គឺថាសារគួរតែត្រូវបានអ៊ិនកូដក្នុងទម្រង់ XML ស្តង់ដារ។
បន្ថែមពីលើសារ SOAP អ្នកអាចប្រើ GET និង ពិធីការប្រកាស HTTP
អត្ថប្រយោជន៍នៃការប្រើប្រាស់ទម្រង់ SOAP លើទម្រង់ផ្សេងទៀតសម្រាប់ការផ្ទេរទិន្នន័យ៖
ការអ៊ិនកូដរចនាសម្ព័ន្ធទិន្នន័យ និងសំណុំទិន្នន័យក្នុង XML ដោយប្រើ SOAP គឺងាយស្រួលដូចការអ៊ិនកូដទិន្នន័យនៃប្រភេទមាត្រដ្ឋានសាមញ្ញដែរ។
នៅពេលប្រើសារ SOAP ឧបករណ៍បន្ថែមជាឧទាហរណ៍ អនុញ្ញាតឱ្យអ្នកបន្ថែមមុខងារសុវត្ថិភាព ឬតាមដានយ៉ាងងាយស្រួល។
មានប្រអប់ឧបករណ៍ SOAP សម្រាប់ភាសាសរសេរកម្មវិធីផ្សេងៗ (និងសូម្បីតែភាសាមុនៗ)។ កំណែ Microsoft C ++ និង Visual Basic) ។ បើមិនដូច្នេះទេក្នុងគោលបំណងដើម្បីផ្តល់នូវការទំនាក់ទំនងជាមួយសេវាតាមរយៈទទួលបានវិធីសាស្រ្ត
និង POST នៃពិធីការ HTTP អ្នកច្បាស់ជាត្រូវបង្កើតខ្សែអក្សរសំណួរដោយខ្លួនឯង ហើយបន្ទាប់មកញែកការឆ្លើយតប។
ស្តង់ដារឌីស្កូ
ស្តង់ដារ DISCO ផ្តល់នូវវិធីសាមញ្ញបំផុតក្នុងការចូលប្រើឯកសារ manifest ដែលអនុញ្ញាតឱ្យអ្នកដាក់ឯកសារយោងជាក្រុមទៅកាន់សេវាកម្មគេហទំព័រ។ ឯកសារ DISCO អាចរួមបញ្ចូលឯកសារពីម៉ាស៊ីនមេគេហទំព័រផ្សេងៗគ្នា និងគាំទ្រ "ការស្វែងរកថាមវន្ត" -ការស្វែងរកដោយស្វ័យប្រវត្តិ
ឯកសារ Manifest មានប្រយោជន៍ព្រោះវារួមបញ្ចូលគ្នានូវសេវាកម្មគេហទំព័រជាច្រើនទៅក្នុងបញ្ជីតែមួយ ប៉ុន្តែពួកគេមិនអនុញ្ញាតឱ្យអតិថិជនស្វែងរកប្រភេទជាក់លាក់នៃសេវាកម្មគេហទំព័រដោយមិនបញ្ជាក់ឈ្មោះរបស់ក្រុមហ៊ុនដែលបានបង្កើតវានោះទេ។
ការបញ្ជាក់ uddi
ការបញ្ជាក់របស់ UDDI (Universal Description, Discovery, and Integration) ជៀសវាងបញ្ហាទាំងនេះដោយប្រើកន្លែងផ្ទុកពិសេស (ឃ្លាំង) ដែលសហគ្រាស និងអង្គការអាចដាក់ទិន្នន័យអំពីសេវាកម្មដែលពួកគេផ្តល់។ ក្រុមហ៊ុនជាង 100 បានត្រួសត្រាយផ្លូវបង្កើតបច្ចេកវិទ្យា UDDI (បញ្ជីពេញលេញអាចរកបាននៅ http://www.uddi.org/community.html) រួមទាំង Sun និង Microsoft ។ រួមគ្នា ក្រុមហ៊ុនទាំងនេះបានបង្កើតសេចក្តីព្រាងការបញ្ជាក់ UDDI ដែលត្រូវបានធ្វើស្តង់ដារបន្ទាប់ពី 18 ខែ។
ព័ត៌មាននៅក្នុងឃ្លាំងនេះត្រូវតែធ្វើបច្ចុប្បន្នភាពដោយដៃ។ ដល់ទីបញ្ចប់នេះ "ប្រតិបត្តិករថ្នាំង" មួយចំនួនរក្សាច្បាប់ចម្លងដូចគ្នាបេះបិទនៃឃ្លាំង UDDI ។ ក្រុមហ៊ុនទាំងនេះផ្តល់នូវការផ្ទុកនៃឃ្លាំងដែលបានបញ្ជាក់ និងការចូលប្រើដោយឥតគិតថ្លៃទៅកាន់វាដើម្បីធ្វើឱ្យសេវាកម្មគេហទំព័រពេញនិយម។ លើសពីនេះ Microsoft បានបញ្ចូលកំណែ UDDI នៅក្នុងកម្មវិធី ម៉ាស៊ីនមេវីនដូ.NET សម្រាប់ប្រើលើអ៊ីនធឺណេតសាជីវកម្ម។
ហាង UDDI មានព័ត៌មានអំពីសហគ្រាសដែលផ្តល់សេវាកម្មគេហទំព័រ ប្រភេទនៃសេវាកម្មនីមួយៗ និងទំនាក់ទំនងទៅនឹងព័ត៌មាន និងលក្ខណៈជាក់លាក់ដែលទាក់ទងនឹងសេវាកម្មទាំងនោះ។ ចំណុចប្រទាក់ UDDI ខ្លួនវាគឺជាសេវាកម្មបណ្តាញ។ ដើម្បីចុះឈ្មោះ ឬស្វែងរកសេវាកម្ម អ្នកត្រូវតែផ្ញើសារ SOAP ។
គុណវិបត្តិចម្បងនៃសេវាកម្មគេហទំព័រគឺដំណើរការទាបជាង និងទំហំធំជាង ចរាចរណ៍បណ្តាញបើប្រៀបធៀបទៅនឹងបច្ចេកវិទ្យាដូចជា RMI, CORBA, DCOM ដោយសារតែការប្រើប្រាស់សារ XML ។
ចំណងជើងប្រធានបទពិតជាសំណួរមួយ ពីព្រោះ... ខ្លួនខ្ញុំផ្ទាល់មិនដឹងថាវាជាអ្វីទេ ហើយជាលើកដំបូងដែលខ្ញុំនឹងព្យាយាមធ្វើការជាមួយវានៅក្នុងក្របខ័ណ្ឌនៃអត្ថបទនេះ។ រឿងតែមួយគត់ដែលខ្ញុំអាចធានាបាននោះគឺថា កូដដែលបានបង្ហាញខាងក្រោមនឹងដំណើរការ ប៉ុន្តែឃ្លារបស់ខ្ញុំគ្រាន់តែជាការសន្មត់ និងការស្មានអំពីរបៀបដែលខ្ញុំយល់អំពីទាំងអស់នេះប៉ុណ្ណោះ។ អញ្ចឹងតោះទៅ...
សេចក្តីផ្តើម
យើងត្រូវចាប់ផ្តើមជាមួយនឹងមូលហេតុដែលគំនិតនៃសេវាកម្មគេហទំព័រត្រូវបានបង្កើតឡើង។ នៅពេលដែលគំនិតនេះបានបង្ហាញខ្លួននៅក្នុងពិភពលោក បច្ចេកវិទ្យាមានរួចហើយដែលអនុញ្ញាតឱ្យកម្មវិធីធ្វើអន្តរកម្មពីចម្ងាយ ដែលកម្មវិធីមួយអាចហៅវិធីសាស្ត្រមួយចំនួននៅក្នុងកម្មវិធីមួយផ្សេងទៀត ដែលអាចដាក់ឱ្យដំណើរការនៅលើកុំព្យូទ័រដែលមានទីតាំងនៅទីក្រុង ឬប្រទេសមួយផ្សេងទៀត។ ទាំងអស់នេះត្រូវបានអក្សរកាត់ជា RPC (ការហៅតាមនីតិវិធីពីចម្ងាយ)។ ឧទាហរណ៍រួមមាន បច្ចេកវិទ្យា CORBAនិងសម្រាប់ Java - RMI (Remote Method Invoking)។ ហើយអ្វីគ្រប់យ៉ាងហាក់ដូចជាល្អនៅក្នុងពួកគេជាពិសេសនៅក្នុង CORBA ដោយសារតែ ... អ្នកអាចធ្វើការជាមួយវានៅក្នុងភាសាសរសេរកម្មវិធីណាមួយ ប៉ុន្តែអ្វីមួយនៅតែបាត់។ ខ្ញុំជឿថាគុណវិបត្តិនៃ CORBA គឺថាវាដំណើរការតាមរយៈមួយចំនួនរបស់វា។ ពិធីការបណ្តាញជំនួសឱ្យ HTTP សាមញ្ញដែលនឹងសមនឹងជញ្ជាំងភ្លើងណាមួយ។ គំនិតនៃសេវាកម្មបណ្តាញគឺដើម្បីបង្កើត RPC ដែលនឹងត្រូវបានបញ្ចូលទៅក្នុងកញ្ចប់ HTTP ។ ដូច្នេះបានចាប់ផ្តើមការអភិវឌ្ឍនៃស្តង់ដារ។ តើអ្វីជាគោលគំនិតជាមូលដ្ឋាននៃស្តង់ដារនេះ៖- សាប៊ូ. មុននឹងហៅទៅនីតិវិធីពីចម្ងាយ អ្នកត្រូវពណ៌នាការហៅនេះចូល ឯកសារ XML e ទម្រង់ SOAP ។ សាប៊ូគឺគ្រាន់តែជារបស់មួយក្នុងចំណោមមនុស្សជាច្រើន ការសម្គាល់ XMLដែលត្រូវបានប្រើប្រាស់ក្នុងសេវាកម្មគេហទំព័រ។ អ្វីគ្រប់យ៉ាងដែលយើងចង់ផ្ញើទៅកន្លែងណាមួយតាមរយៈ HTTP ត្រូវបានប្រែក្លាយជាលើកដំបូង ការពិពណ៌នា XML SOAP បន្ទាប់មកបញ្ចូលទៅក្នុងកញ្ចប់ HTTP ហើយផ្ញើទៅកុំព្យូទ័រផ្សេងទៀតនៅលើបណ្តាញតាមរយៈ TCP/IP ។
- WSDL. មានសេវាបណ្តាញ, i.e. កម្មវិធីដែលវិធីសាស្រ្តអាចហៅពីចម្ងាយ។ ប៉ុន្តែស្តង់ដារតម្រូវឱ្យកម្មវិធីនេះអមដោយការពិពណ៌នាដែលនិយាយថា "បាទ អ្នកត្រូវ - នេះគឺពិតជាសេវាកម្មបណ្ដាញ ហើយអ្នកអាចហៅវិធីបែបនេះពីវា"។ ការពិពណ៌នានេះត្រូវបានតំណាងដោយឯកសារ XML ផ្សេងទៀតដែលមានទម្រង់ផ្សេងគ្នាគឺ WSDL ។ ទាំងនោះ។ WSDL គ្រាន់តែជាឯកសារ XML ដែលពណ៌នាអំពីសេវាកម្មគេហទំព័រ ហើយគ្មានអ្វីទៀតទេ។
វិធីសាស្រ្តទូទៅ
នៅក្នុងសេវាកម្មគេហទំព័រ តែងតែមានម៉ាស៊ីនភ្ញៀវ និងម៉ាស៊ីនមេ។ ម៉ាស៊ីនមេ គឺជាសេវាកម្មគេហទំព័ររបស់យើង ហើយពេលខ្លះត្រូវបានគេហៅថា ចំណុចបញ្ចប់ (ដូចនៅក្នុង ចំណុចបញ្ចប់ ដែលសារ SOAP ពីអតិថិជនទៅដល់)។ យើងត្រូវធ្វើដូចខាងក្រោមៈ- ពិពណ៌នាអំពីចំណុចប្រទាក់នៃសេវាកម្មគេហទំព័ររបស់យើង។
- អនុវត្តចំណុចប្រទាក់នេះ។
- បើកដំណើរការសេវាកម្មគេហទំព័ររបស់យើង។
- សរសេរអតិថិជន ហើយហៅពីចម្ងាយ វិធីសាស្រ្តដែលចង់បានសេវាគេហទំព័រ
ម៉ាស៊ីនមេ
តោះចាប់ផ្តើម IDEA ហើយបង្កើតគម្រោងថ្មីមួយ បង្កើតគម្រោងថ្មី។. ចូរបង្ហាញឈ្មោះ HelloWebServiceហើយចុចប៊ូតុង បន្ទាប់បន្ទាប់មកចុចប៊ូតុង បញ្ចប់. នៅក្នុងថតឯកសារ srcតោះបង្កើតកញ្ចប់ ru.javarush.ws. នៅក្នុងកញ្ចប់នេះ យើងនឹងបង្កើតចំណុចប្រទាក់ HelloWebService: package ru ។ javarush ។ ws; // ទាំងនេះគឺជាចំណារពន្យល់, i.e. វិធីដើម្បីសម្គាល់ថ្នាក់ និងវិធីសាស្រ្តរបស់យើង // ទាក់ទងនឹងបច្ចេកវិទ្យាសេវាកម្មគេហទំព័រនាំចូល javax ។ jws. វិធីសាស្រ្តគេហទំព័រ; នាំចូល javax ។ jws. សេវាគេហទំព័រ;នាំចូល javax ។ jws. សាប៊ូ។ SOAPbinding; // យើងនិយាយថាចំណុចប្រទាក់របស់យើងនឹងដំណើរការជាសេវាកម្មគេហទំព័រ@សេវាកម្មគេហទំព័រ // យើងនិយាយថាសេវាកម្មបណ្តាញនឹងត្រូវបានប្រើដើម្បីហៅវិធីសាស្ត្រ@SOAPBinding (រចនាប័ទ្ម = SOAPBinding ។ រចនាប័ទ្ម។ RPC) ចំណុចប្រទាក់សាធារណៈ HelloWebService ( // យើងនិយាយថាវិធីសាស្ត្រនេះអាចត្រូវបានគេហៅថាពីចម្ងាយ@WebMethod ខ្សែអក្សរសាធារណៈ getHelloString(ឈ្មោះខ្សែអក្សរ); ) នៅក្នុងកូដនេះ ថ្នាក់ WebService និង WebMethod ត្រូវបានគេហៅថា ចំណារពន្យល់ និងមិនធ្វើអ្វីទាំងអស់ លើកលែងតែសម្គាល់ចំណុចប្រទាក់របស់យើង និងវិធីសាស្ត្ររបស់វាជាសេវាកម្មគេហទំព័រ។ ដូចគ្នានេះដែរអនុវត្តចំពោះថ្នាក់ SOAPBinding ។ ភាពខុសគ្នាតែមួយគត់គឺថា SOAPBinding គឺជាចំណារពន្យល់ដែលមានប៉ារ៉ាម៉ែត្រ។ INក្នុងករណីនេះ ប៉ារ៉ាម៉ែត្ររចនាប័ទ្មត្រូវបានប្រើជាមួយនឹងតម្លៃដែលបង្ហាញថាសេវាបណ្តាញនឹងមិនដំណើរការតាមរយៈសារឯកសារនោះទេប៉ុន្តែជា RPC បុរាណពោលគឺឧ។ ដើម្បីហៅវិធីសាស្រ្តមួយ។ ចូរយើងអនុវត្តតក្កវិជ្ជាចំណុចប្រទាក់របស់យើង ហើយបង្កើតថ្នាក់ HelloWebServiceImpl នៅក្នុងកញ្ចប់របស់យើង។ និយាយអីញ្ចឹងខ្ញុំកត់សម្គាល់ថាការបញ្ចប់ថ្នាក់ជាមួយ Impl គឺជាអនុសញ្ញាមួយនៅក្នុង Java ដែលយោងទៅតាមការអនុវត្តនៃចំណុចប្រទាក់ត្រូវបានកំណត់ដូច្នេះ (Impl - ពីការអនុវត្តពាក្យពោលគឺការអនុវត្ត) ។ នេះមិនមែនជាតម្រូវការទេ ហើយអ្នកមានសេរីភាពក្នុងការដាក់ឈ្មោះថ្នាក់តាមអ្វីដែលអ្នកចង់បាន ប៉ុន្តែសុជីវធម៌ទាមទារវា៖ កញ្ចប់ ru ។ javarush ។ ws; // ចំណារពន្យល់ដូចគ្នានឹងពេលពិពណ៌នាចំណុចប្រទាក់ នាំចូល javax ។ jws. សេវាគេហទំព័រ;// ប៉ុន្តែនៅទីនេះវាត្រូវបានប្រើជាមួយប៉ារ៉ាម៉ែត្រ endpointInterface,// ចង្អុលបង្ហាញ ឈ្មោះពេញថ្នាក់ចំណុចប្រទាក់នៃសេវាកម្មគេហទំព័ររបស់យើង។ @WebService(endpointInterface="ru.javarush.ws.HelloWebService" ) ថ្នាក់សាធារណៈ HelloWebServiceImpl អនុវត្ត HelloWebService ( @Override public String getHelloString (ឈ្មោះខ្សែអក្សរ) (// គ្រាន់តែត្រឡប់ការស្វាគមន៍ srcត្រឡប់ "សួស្តី" + ឈ្មោះ + "!" ; )) សូមចាប់ផ្តើមសេវាកម្មគេហទំព័ររបស់យើងជាម៉ាស៊ីនមេឯករាជ្យ , i.e. ដោយគ្មានការចូលរួមពី Tomcat និងម៉ាស៊ីនមេកម្មវិធីណាមួយ (នេះគឺជាប្រធានបទសម្រាប់ការពិភាក្សាដាច់ដោយឡែក)។ ដើម្បីធ្វើដូចនេះនៅក្នុងរចនាសម្ព័ន្ធគម្រោងនៅក្នុងថតតោះបង្កើតកញ្ចប់ ru.javarush.endpoint ហើយនៅក្នុងនោះ យើងនឹងបង្កើតថ្នាក់ HelloWebServicePublisher ជាមួយនឹងវិធីសាស្ត្រចម្បង៖ package ru ។ javarush ។ ចំណុចបញ្ចប់; // class សម្រាប់ដំណើរការ web server ជាមួយនឹង web services នាំចូល javax ។ xml ws ចំណុចបញ្ចប់; // ថ្នាក់នៃសេវាកម្មគេហទំព័ររបស់យើង។នាំចូល ru ។ javarush ។ ws HelloWebServiceImpl; "http://localhost:1986/wss/hello"ថ្មី HelloWebServiceImpl () ); )) ឥឡូវយើងរត់ថ្នាក់នេះដោយចុចប្ដូរ (Shift) + F10. គ្មានអ្វីនឹងបង្ហាញនៅក្នុងកុងសូលទេ ប៉ុន្តែម៉ាស៊ីនមេកំពុងដំណើរការ។ អ្នកអាចផ្ទៀងផ្ទាត់វាដោយវាយបន្ទាត់ http://localhost:1986/wss/hello?wsdl នៅក្នុងកម្មវិធីរុករករបស់អ្នក។ មួយវិញទៀត ទំព័រដែលបើក បង្ហាញថាយើងមានម៉ាស៊ីនមេគេហទំព័រ (http://) ដែលកំពុងដំណើរការនៅលើច្រក 1986 នៅលើកុំព្យូទ័ររបស់យើង (localhost) ហើយម្យ៉ាងវិញទៀត បង្ហាញការពិពណ៌នា WSDL នៃសេវាកម្មគេហទំព័ររបស់យើង។ ប្រសិនបើអ្នកបញ្ឈប់កម្មវិធី នោះការពណ៌នានឹងលែងមាន ដូចសេវាកម្មគេហទំព័រខ្លួនឯងដែរ ដូច្នេះយើងនឹងមិនធ្វើបែបនេះទេ ប៉ុន្តែបន្តទៅការសរសេរអតិថិជន។
អតិថិជន srcនៅក្នុងថតគម្រោង តោះបង្កើតកញ្ចប់ ru.javarush.client ហើយនៅក្នុងនោះ ថ្នាក់ HelloWebServiceClient ជាមួយនឹងវិធីសាស្ត្រចម្បង៖ កញ្ចប់ ru ។ javarush អតិថិជន; // ត្រូវការដើម្បីទទួលបានការពិពណ៌នា wsdl និងតាមរយៈវា។// ឈានដល់សេវាកម្មគេហទំព័រដោយខ្លួនឯង។ នាំចូល java ។ សុទ្ធ។ URL// ករណីលើកលែងនេះនឹងកើតឡើងនៅពេលធ្វើការជាមួយវត្ថុ URL នាំចូល java ។ សុទ្ធ។ MalformedURLException; // ថ្នាក់ដើម្បីញែក xml ជាមួយនឹងការពិពណ៌នា wsdl// ហើយឈានដល់ស្លាកសេវាកម្មនៅក្នុងវា។ នាំចូល javax ។ xml ចន្លោះឈ្មោះ។ QName;នាំចូល javax ។ xml ws សេវាកម្ម; // ចំណុចប្រទាក់នៃសេវាកម្មគេហទំព័ររបស់យើង (យើងត្រូវការបន្ថែមទៀត) នាំចូល ru ។ javarush ។ ws HelloWebService;ថ្នាក់សាធារណៈ HelloWebServiceClient ( public static void main (String args) បោះ MalformedURLException ( // បង្កើតតំណភ្ជាប់ទៅការពិពណ៌នា wsdl) ; អាសយដ្ឋាន url = URL ថ្មី ( "http://localhost:1986/wss/hello?wsdl"// យើងមើលប៉ារ៉ាម៉ែត្រនៃ constructor បន្ទាប់នៅក្នុងស្លាកដំបូងបំផុតនៃការពិពណ៌នា WSDL - និយមន័យ // រកមើលនៅអាគុយម៉ង់ទី 1 នៅក្នុងគុណលក្ខណៈ targetNamespace // មើលអាគុយម៉ង់ទី 2 ក្នុងគុណលក្ខណៈឈ្មោះ, QName qname = ថ្មី QName ("http://ws.site/", "HelloWebServiceImplService" );// ឥឡូវនេះយើងអាចទៅដល់ស្លាកសេវាកម្មនៅក្នុង ការពិពណ៌នា wsdl សេវាកម្ម= សេវាកម្ម។ បង្កើត (url, qname); // ហើយបន្ទាប់មករហូតដល់ស្លាកច្រកដែលដាក់នៅក្នុងវា ដូច្នេះ // ទទួលបានតំណភ្ជាប់ទៅវត្ថុសេវាកម្មគេហទំព័រពីចម្ងាយពីយើង HelloWebService ជំរាបសួរ = សេវាកម្ម។ getPort(HelloWebService.class);// ហ៊ឺយ! ឥឡូវនេះអ្នកអាចហៅបាន។
វិធីសាស្រ្តពីចម្ងាយ ប្រព័ន្ធ។ ចេញ។ println (ជំរាបសួរ. getHelloString ( "JavaRush" ) );ទៅកាន់សេវាកម្មបណ្តាញ។ ជាថ្មីម្តងទៀត ខ្ញុំនឹងនិយាយថាអ្វីដែលខ្ញុំសរសេរច្រើនគឺជាការស្មានរបស់ខ្ញុំអំពីរបៀបដែលវាដំណើរការ ដូច្នេះហើយអ្នកមិនគួរទុកចិត្តខ្ញុំខ្លាំងពេកទេ។ ខ្ញុំនឹងដឹងគុណប្រសិនបើ មនុស្សដែលមានចំណេះដឹងគេនឹងកែខ្ញុំ ព្រោះពេលនោះខ្ញុំនឹងរៀនអ្វីមួយ។ UPDនៅក្នុងជំពូកទី 2 យើងបានពិភាក្សាថាបន្ទាប់ពីបង្កើតសេវាកម្មបណ្តាញនៅលើម៉ាស៊ីនមេជា servlet ទំព័រ JSP ឯកសារ JWS EJB ឬវត្ថុផ្សេងទៀត អ្នកគួរតែពណ៌នាអំពីសមាសភាព និងសមត្ថភាពនៃសេវាកម្មគេហទំព័រជាភាសាឯករាជ្យនៃវេទិកា។ ប្រព័ន្ធប្រតិបត្តិការប្រព័ន្ធសរសេរកម្មវិធីដែលប្រើដើម្បីបង្កើតសេវាកម្មបណ្តាញ។ ការពិពណ៌នានេះត្រូវបានចុះឈ្មោះនៅក្នុងទីតាំងដែលអាចចូលប្រើបានជាសាធារណៈនៅលើអ៊ីនធឺណិត ដូចជាបញ្ជីឈ្មោះ UDDI ឬ ebXML ឬរក្សាទុកនៅលើម៉ាស៊ីនបម្រើសេវាកម្មបណ្តាញ។ ការពិពណ៌នាត្រូវតែមានពេញលេញ និង ព័ត៌មានត្រឹមត្រូវ។អំពីសេវាកម្មទាំងអស់ដែលផ្តល់ដោយសេវាកម្មបណ្តាញ វិធីសាស្រ្តសម្រាប់ការទទួលបានសេវាកម្ម ខ្លឹមសារនៃសំណើសម្រាប់សេវាកម្ម ទម្រង់នៃព័ត៌មានដែលបានផ្តល់។
មធ្យោបាយមួយក្នុងចំណោមមធ្យោបាយនៃការពិពណ៌នាអំពីសេវាកម្មគេហទំព័រយ៉ាងត្រឹមត្រូវ និងស្មើភាពគ្នាគឺភាសា WSDL ដែលបង្កើតឡើងដោយសម្ព័ន្ធ W3C ។ ភាសានេះគឺជាការអនុវត្តមួយផ្សេងទៀតនៃ XML ។ ការបញ្ជាក់ដែលបានណែនាំចុងក្រោយបំផុតរបស់វាតែងតែត្រូវបានបោះពុម្ពនៅលើទំព័រ http://www.w3.org/TR/wsdI. នៅពេលសរសេរសៀវភៅ WSDL កំណែគឺ 1.2 ដែលយើងនឹងពិពណ៌នានៅក្នុងជំពូកនេះ។
សមាសភាពនៃឯកសារ WSDL
ធាតុដើមនៃឯកសារ XML - ការពិពណ៌នា WSDL - គឺជាធាតុ
និយមន័យ WSDL ប្រើយ៉ាងទូលំទូលាយនៃ namespaces ផ្សេងៗ។ បន្ថែមពីលើឈ្មោះត្រឹមត្រូវ WSDL ជារឿយៗប្រើឈ្មោះធាតុភាសាប្រភេទ និងការប្រកាស គ្រោងការណ៍ XSD(សូមមើលជំពូកទី១) និងឈ្មោះភាសា ពិធីការ SOAP. ចន្លោះឈ្មោះ WSDL ត្រូវបានពិពណ៌នាជាញឹកញាប់ថាជា namespace លំនាំដើម។ ការកំណត់អត្តសញ្ញាណ namespace នៃកំណែ WSDL 1.2 ចុងក្រោយបំផុតនៅពេលសរសេរគឺស្មើនឹង http://www.w3.org/2002/07/wsdl. ចន្លោះឈ្មោះគោលដៅដែលឧបករណ៍កំណត់អត្តសញ្ញាណត្រូវបានបញ្ជាក់ដោយគុណលក្ខណៈជាធម្មតាត្រូវបានបុព្វបទជាមួយ tns (ទំហំឈ្មោះគោលដៅ) ។
ទៅធាតុដើម
?
?
?
?
?
? < service >- បញ្ជាក់ទីតាំងនៃសេវាកម្មគេហទំព័រជាច្រកមួយ ឬច្រើន។ ច្រកនីមួយៗត្រូវបានពិពណ៌នាដោយធាតុដែលជាប់
បន្ថែមពីលើធាតុសំខាន់ៗទាំងប្រាំមួយនេះមានធាតុជំនួយពីរបន្ថែមទៀត។
?
មតិយោបល់។ វាអាចត្រូវបានរួមបញ្ចូលនៅក្នុងធាតុណាមួយ។
ការពិពណ៌នា WSDL ។
យើងអាចនិយាយបានថាធាតុ
ធាតុ
ទីបំផុតធាតុ
រចនាសម្ព័ន្ធនៃឯកសារ WSDL ត្រូវបានបង្ហាញនៅក្នុងបញ្ជី 4.1 ។ តួអក្សរនៅក្នុងតង្កៀបការ៉េមិនមាននៅក្នុងឯកសារទេ។ ពួកគេបង្ហាញពាក្យដដែលៗនៃធាតុ ឬគុណលក្ខណៈនៅក្នុងការពិពណ៌នាអំពីសេវាកម្មគេហទំព័រ៖
តួអក្សរ [?] មានន័យថាធាតុ ឬគុណលក្ខណៈអាចបង្ហាញសូន្យ ឬម្តងក្នុងឯកសារ។
និមិត្តសញ្ញា [*] មានន័យថាធាតុអាចលេចឡើងសូន្យ ឬច្រើនដង។
និមិត្តសញ្ញា [+] មានន័យថាធាតុអាចលេចឡើងមួយដង ឬច្រើនដង។
អវត្ដមាននៃតួអក្សរក្នុងតង្កៀបការ៉េមានន័យថា គុណលក្ខណៈត្រូវតែបង្ហាញម្ដង។
j ការចុះបញ្ជី 4.1 ។ គ្រោងការណ៍ឯកសារ WSDL
targetNamespace="nfleH l ra «iij ទីតាំង = "URI-aflpec" /> [*] មតិយោបល់ដោយឥតគិតថ្លៃ ការពិពណ៌នាអំពីប្រភេទស្មុគស្មាញ និងមិនមានស្តង់ដារ។
ការពិពណ៌នាអរូបីនៃសារ SOAP ជាសំណុំនៃផ្នែកធាតុផ្សំរបស់វា។
ការពិពណ៌នាអរូបីនៃសេវាកម្មបណ្តាញជាសំណុំនៃប្រតិបត្តិការ (សេវាកម្ម)។ ការពិពណ៌នាអំពីសេវាកម្មដូចជាការទទួល (បញ្ចូល) និងផ្ញើ (លទ្ធផល, កំហុស) សារ។ បានទទួលសារ។ បានផ្ញើ message="nMH ធាតុដែលត្រូវគ្នា។ សារកំហុសដែលត្រូវផ្ញើ។ type="MMH នៃធាតុដែលត្រូវគ្នា។ ព័ត៌មានលម្អិតអំពីពិធីការជាក់លាក់។ ពួកគេត្រូវបានកំណត់នៅក្នុងគ្រោងការណ៍ ពិធីការនេះ។ -> ធាតុពណ៌នាលម្អិតត្រូវបានសរសេរនៅទីនេះ ប្រតិបត្តិការជាក់លាក់។ -> ធាតុដែលពណ៌នា ព័ត៌មានលម្អិតនៃសារជាក់លាក់ដែលបានទទួល។ -> ធាតុដែលពណ៌នា ព័ត៌មានលម្អិតនៃសារជាក់លាក់ដែលត្រូវបានផ្ញើ។ ->
ធាតុដែលពណ៌នា ព័ត៌មានលម្អិតនៃសារកំហុសជាក់លាក់។ ->
serviceType="MMH នៃធាតុដែលត្រូវគ្នា។ ការពិពណ៌នាអំពីចំណុចប្រទាក់សេវាបណ្តាញជាសំណុំនៃច្រក។ binding="nMH នៃធាតុដែលត្រូវគ្នា។ អាសយដ្ឋានចាំបាច់ និងតែមួយគត់នៃចំណុចប្រទាក់សេវាកម្មគេហទំព័រត្រូវបានសរសេរនៅទីនេះ សរសេរដោយយោងទៅតាមច្បាប់ ពិធីការដែលបានបញ្ជាក់នៅក្នុងធាតុ
ពិធីការផ្ទេរសារជាក់លាក់នីមួយៗ - SOAP, HTTP, FTP, SMTP - បន្ថែមធាតុបន្ថែមរបស់វាទៅធាតុជំនួយសំខាន់ប្រាំមួយ និងពីរនៃភាសា WSDL ដោយពណ៌នាអំពីលក្ខណៈពិសេសនៃពិធីការនេះ។
ចូរយើងផ្តល់ឧទាហរណ៍ដ៏សាមញ្ញមួយ។ នៅក្នុងការចុះបញ្ជី 3.14 យើងបានសរសេរសេវាបណ្តាញសាមញ្ញជាថ្នាក់ Java ដែលត្រឡប់សំណើដែលបានផ្ញើដោយមិនចាំបាច់ដំណើរការណាមួយឡើយ៖
ថ្នាក់សាធារណៈ EchoService (
ខ្សែអក្សរសាធារណៈ getEcho (ខ្សែអក្សរ req) ( ត្រឡប់ req;
ការចុះបញ្ជី 4.2 ពិពណ៌នាអំពីសេវាកម្មគេហទំព័រនេះនៅក្នុង WSDL ដោយប្រើពិធីការ SOAP ។
ការចុះបញ្ជី 4.2 ។ ការពិពណ៌នាអំពីសេវាគេហទំព័រ EchoService
កំណែ = "1.0" ការអ៊ិនកូដ = "UTF-8" ?>
targetNamespace="http://echoservice.com/echoservice.wsdl" xmlns="http://www.w3.org/2002/07/wsdl" xmlns:tns="http://echoservice.com/echoservice.wsdl " xmlns:soap="http://www.w3.org/2002/07/wsdl/soapl2" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
transport="http://schemas.xmlsoap.org/soap/http" /> "http://schemas.xmlsoap.org/soap/encoding/" namespace= "http://echoservice.ccm/echcservice.wsdl" use="encoded" /> ^oapKbocy enccdingStyle= "http://schemas .xmlsoap. org/soap/encoding/" namespace= "http://echoservice. c^/ech^service .wsdl" use="encoded" /> "http://localhost:8080/axis/EchoService.jws" /> នៅក្នុងបញ្ជី 4.2 យើងស្ថិតនៅក្នុងធាតុ ឈ្មោះ "getEchoRequest" និង "getEchoResponse" ត្រូវបានប្រើនៅក្នុងធាតុបន្ទាប់ txarspcrt^=^"ht:tp^://?chepas^.>plscap^.c^rc^/?cap^/ht:tp^" /> ប្រសិនបើរចនាប័ទ្មឯកសារ SOAP ត្រូវបានប្រើ នោះគុណលក្ខណៈរចនាប័ទ្មត្រូវបានកំណត់ទៅជា "ឯកសារ" ។ ទីបំផុតនៅក្នុងធាតុ នៅក្នុងការចុះបញ្ជីលេខ 4.2 ឈ្មោះដែលមានបុព្វបទជាមួយសាប៊ូបានបញ្ជាក់ពីការពិពណ៌នានៃសារ និងរបៀបដែលវាត្រូវបានផ្ញើ។ តោះមើលថាតើពិធីការជាក់លាក់អ្វីខ្លះដែល WSDL 1.2 ផ្តល់ជូន។ អក្សរសិល្ប៍៖ Khabibullin I. Sh. ការអភិវឌ្ឍន៍សេវាកម្មគេហទំព័រដោយប្រើ Java ។ - សាំងពេទឺប៊ឺគៈ BHV-Petersburg, 2003. - 400 p.: ill. ចំណងជើងប្រធានបទពិតជាសំណួរមួយ ពីព្រោះ... ខ្លួនខ្ញុំផ្ទាល់មិនដឹងថាវាជាអ្វីទេ ហើយជាលើកដំបូងដែលខ្ញុំនឹងព្យាយាមធ្វើការជាមួយវានៅក្នុងក្របខ័ណ្ឌនៃអត្ថបទនេះ។ រឿងតែមួយគត់ដែលខ្ញុំអាចធានាបាននោះគឺថា កូដដែលបានបង្ហាញខាងក្រោមនឹងដំណើរការ ប៉ុន្តែឃ្លារបស់ខ្ញុំគ្រាន់តែជាការសន្មត់ និងការស្មានអំពីរបៀបដែលខ្ញុំយល់អំពីទាំងអស់នេះប៉ុណ្ណោះ។ អញ្ចឹងតោះទៅ...សេចក្តីផ្តើម
យើងត្រូវចាប់ផ្តើមជាមួយនឹងមូលហេតុដែលគំនិតនៃសេវាកម្មគេហទំព័រត្រូវបានបង្កើតឡើង។ នៅពេលដែលគំនិតនេះបានបង្ហាញខ្លួននៅក្នុងពិភពលោក បច្ចេកវិទ្យាមានរួចហើយដែលអនុញ្ញាតឱ្យកម្មវិធីធ្វើអន្តរកម្មពីចម្ងាយ ដែលកម្មវិធីមួយអាចហៅវិធីសាស្ត្រមួយចំនួននៅក្នុងកម្មវិធីមួយផ្សេងទៀត ដែលអាចដាក់ឱ្យដំណើរការនៅលើកុំព្យូទ័រដែលមានទីតាំងនៅទីក្រុង ឬប្រទេសមួយផ្សេងទៀត។ ទាំងអស់នេះត្រូវបានអក្សរកាត់ជា RPC (ការហៅតាមនីតិវិធីពីចម្ងាយ)។ ឧទាហរណ៍រួមមានបច្ចេកវិទ្យា CORBA និងសម្រាប់ Java - RMI (Remote Method Invoking)។ ហើយអ្វីគ្រប់យ៉ាងហាក់ដូចជាល្អនៅក្នុងពួកគេជាពិសេសនៅក្នុង CORBA ដោយសារតែ ... អ្នកអាចធ្វើការជាមួយវានៅក្នុងភាសាសរសេរកម្មវិធីណាមួយ ប៉ុន្តែអ្វីមួយនៅតែបាត់។ ខ្ញុំជឿថាគុណវិបត្តិនៃ CORBA គឺថាវាដំណើរការតាមរយៈពិធីការបណ្តាញផ្ទាល់ខ្លួនមួយចំនួនជំនួសឱ្យ HTTP សាមញ្ញដែលនឹងសមនឹងជញ្ជាំងភ្លើងណាមួយ។ គំនិតនៃសេវាកម្មបណ្តាញគឺដើម្បីបង្កើត RPC ដែលនឹងត្រូវបានបញ្ចូលទៅក្នុងកញ្ចប់ HTTP ។ ដូច្នេះបានចាប់ផ្តើមការអភិវឌ្ឍនៃស្តង់ដារ។ តើអ្វីជាគោលគំនិតជាមូលដ្ឋាននៃស្តង់ដារនេះ៖
ហេតុអ្វីបានជាអ្នកសួរយ៉ាងខ្លី? តើអ្នកមិនអាចជាក់លាក់ជាងនេះបានទេ? វាប្រហែលជាអាចធ្វើទៅបាន ប៉ុន្តែដើម្បីធ្វើបែបនេះ អ្នកនឹងត្រូវងាកទៅរកសៀវភៅដូចជា T. Mashnin “Java Web Services”។ នៅទីនោះ ជាង 200 ទំព័រដំបូង មានការពិពណ៌នាលម្អិតនៃស្លាកនីមួយៗនៃស្តង់ដារ SOAP និង WSDL ។ តើវាសមនឹងធ្វើទេ? តាមគំនិតខ្ញុំអត់ទេព្រោះ... ទាំងអស់នេះត្រូវបានបង្កើតដោយស្វ័យប្រវត្តិនៅក្នុង Java ហើយអ្នកគ្រាន់តែត្រូវការសរសេរមាតិកានៃវិធីសាស្រ្តដែលត្រូវបានគេសន្មត់ថាត្រូវបានហៅពីចម្ងាយ។ ដូច្នេះ API ដូចជា JAX-RPC បានបង្ហាញខ្លួននៅក្នុង Java ។ ប្រសិនបើអ្នកណាម្នាក់មិនដឹង នៅពេលដែលពួកគេនិយាយថា Java មាន API បែបនេះ វាមានន័យថាមានកញ្ចប់មួយដែលមានថ្នាក់ដែលដាក់បញ្ចូលបច្ចេកវិទ្យានៅក្នុងសំណួរ។ JAX-RPC បានវិវត្តន៍តាមពេលវេលាពីកំណែមួយទៅកំណែមួយ ហើយទីបំផុតបានក្លាយជា JAX-WS ។ WS ច្បាស់ជាតំណាងឱ្យ WebService ហើយមនុស្សម្នាក់អាចគិតថានេះគ្រាន់តែជាការប្តូរឈ្មោះ RPC ជាពាក្យ buzzword ដ៏ពេញនិយមនាពេលបច្ចុប្បន្ននេះ។ នេះមិនមែនជាការពិតទេ ពីព្រោះ ឥឡូវនេះសេវាគេហទំព័របានផ្លាស់ប្តូរឆ្ងាយពីគំនិតដើម ហើយអនុញ្ញាតឱ្យអ្នកមិនត្រឹមតែហៅវិធីសាស្ត្រពីចម្ងាយប៉ុណ្ណោះទេ ប៉ុន្តែថែមទាំងផ្ញើសារឯកសារក្នុងទម្រង់ SOAP ផងដែរ។ ខ្ញុំមិនដឹងថាហេតុអ្វីបានជាវាត្រូវការនៅឡើយទេ វាទំនងជាថាចម្លើយនៅទីនេះនឹងមាន “គ្រាន់តែក្នុងករណីដែលវាត្រូវការ”។ ខ្លួនខ្ញុំផ្ទាល់ចង់រៀនពីសមមិត្តដែលមានបទពិសោធន៍បន្ថែមទៀត។ ហើយចុងក្រោយ JAX-RS បានបង្ហាញខ្លួនសម្រាប់សេវាកម្មគេហទំព័រ RESTful ដែលគេហៅថា ប៉ុន្តែនេះគឺជាប្រធានបទនៃអត្ថបទដាច់ដោយឡែកមួយ។ ការណែនាំអាចបញ្ចប់នៅទីនេះ ពីព្រោះ... បន្ទាប់យើងនឹងរៀនធ្វើការជាមួយ JAX-WS ។ វិធីសាស្រ្តទូទៅ
នៅក្នុងសេវាកម្មគេហទំព័រ តែងតែមានម៉ាស៊ីនភ្ញៀវ និងម៉ាស៊ីនមេ។ ម៉ាស៊ីនមេ គឺជាសេវាកម្មគេហទំព័ររបស់យើង ហើយពេលខ្លះត្រូវបានគេហៅថា ចំណុចបញ្ចប់ (ដូចនៅក្នុង ចំណុចបញ្ចប់ ដែលសារ SOAP ពីអតិថិជនទៅដល់)។ យើងត្រូវធ្វើដូចខាងក្រោមៈ
អ្នកអាចបើកដំណើរការសេវាកម្មគេហទំព័រតាមវិធីផ្សេងៗគ្នា៖ ទាំងពណ៌នាអំពីថ្នាក់មួយជាមួយនឹងវិធីសាស្ត្រចម្បង ហើយបើកដំណើរការសេវាកម្មគេហទំព័រដោយផ្ទាល់ជាម៉ាស៊ីនមេ ឬដាក់ពង្រាយវាទៅម៉ាស៊ីនមេដូចជា Tomcat ឬផ្សេងទៀត។ ក្នុងករណីទីពីរ យើងខ្លួនយើងផ្ទាល់មិនបើកដំណើរការម៉ាស៊ីនមេថ្មី ហើយមិនបើកច្រកផ្សេងទៀតនៅលើកុំព្យូទ័រនោះទេ ប៉ុន្តែគ្រាន់តែប្រាប់កុងតឺន័រ servlet Tomcat ថា "យើងបានសរសេរថ្នាក់សេវាកម្មគេហទំព័រនៅទីនេះ សូមផ្សព្វផ្សាយវា ដូច្នេះអ្នកគ្រប់គ្នាដែលទាក់ទងអ្នកអាច ប្រើប្រាស់សេវាកម្មគេហទំព័ររបស់យើង។" ដោយមិនគិតពីវិធីសាស្រ្តនៃការបើកដំណើរការសេវាកម្មបណ្តាញយើងនឹងមានអតិថិជនដូចគ្នា។ ម៉ាស៊ីនមេ
តោះចាប់ផ្តើម IDEA ហើយបង្កើតគម្រោងថ្មីមួយ បង្កើតគម្រោងថ្មី។. ចូរបង្ហាញឈ្មោះ HelloWebServiceហើយចុចប៊ូតុង បន្ទាប់បន្ទាប់មកចុចប៊ូតុង បញ្ចប់. នៅក្នុងថតឯកសារ srcតោះបង្កើតកញ្ចប់ ru.javarush.ws. នៅក្នុងកញ្ចប់នេះ យើងនឹងបង្កើតចំណុចប្រទាក់ HelloWebService: package ru ។ javarush ។ ws; // ទាំងនេះគឺជាចំណារពន្យល់, i.e. វិធីដើម្បីសម្គាល់ថ្នាក់ និងវិធីសាស្រ្តរបស់យើង
// ទាក់ទងនឹងបច្ចេកវិទ្យាសេវាកម្មគេហទំព័រនាំចូល javax ។ jws. វិធីសាស្រ្តគេហទំព័រ; នាំចូល javax ។ jws. សេវាគេហទំព័រ;នាំចូល javax ។ jws. សាប៊ូ។ SOAPbinding; // យើងនិយាយថាចំណុចប្រទាក់របស់យើងនឹងដំណើរការជាសេវាកម្មគេហទំព័រ@សេវាកម្មគេហទំព័រ // យើងនិយាយថាសេវាកម្មបណ្តាញនឹងត្រូវបានប្រើដើម្បីហៅវិធីសាស្ត្រ@WebMethod ខ្សែអក្សរសាធារណៈ getHelloString(ឈ្មោះខ្សែអក្សរ); ) នៅក្នុងកូដនេះ ថ្នាក់ WebService និង WebMethod ត្រូវបានគេហៅថា ចំណារពន្យល់ និងមិនធ្វើអ្វីទាំងអស់ លើកលែងតែសម្គាល់ចំណុចប្រទាក់របស់យើង និងវិធីសាស្ត្ររបស់វាជាសេវាកម្មគេហទំព័រ។ ដូចគ្នានេះដែរអនុវត្តចំពោះថ្នាក់ SOAPBinding ។ ភាពខុសគ្នាតែមួយគត់គឺថា SOAPBinding គឺជាចំណារពន្យល់ដែលមានប៉ារ៉ាម៉ែត្រ។ INក្នុងករណីនេះ ប៉ារ៉ាម៉ែត្ររចនាប័ទ្មត្រូវបានប្រើជាមួយនឹងតម្លៃដែលបង្ហាញថាសេវាបណ្តាញនឹងមិនដំណើរការតាមរយៈសារឯកសារនោះទេប៉ុន្តែជា RPC បុរាណពោលគឺឧ។ ដើម្បីហៅវិធីសាស្រ្តមួយ។ ចូរយើងអនុវត្តតក្កវិជ្ជាចំណុចប្រទាក់របស់យើង ហើយបង្កើតថ្នាក់ HelloWebServiceImpl នៅក្នុងកញ្ចប់របស់យើង។ និយាយអីញ្ចឹងខ្ញុំកត់សម្គាល់ថាការបញ្ចប់ថ្នាក់ជាមួយ Impl គឺជាអនុសញ្ញាមួយនៅក្នុង Java ដែលយោងទៅតាមការអនុវត្តនៃចំណុចប្រទាក់ត្រូវបានកំណត់ដូច្នេះ (Impl - ពីការអនុវត្តពាក្យពោលគឺការអនុវត្ត) ។ នេះមិនមែនជាតម្រូវការទេ ហើយអ្នកមានសេរីភាពក្នុងការដាក់ឈ្មោះថ្នាក់តាមអ្វីដែលអ្នកចង់បាន ប៉ុន្តែសុជីវធម៌ទាមទារវា៖ កញ្ចប់ ru ។ javarush ។ ws;
) នៅក្នុងកូដនេះ ថ្នាក់ WebService និង WebMethod ត្រូវបានគេហៅថា ចំណារពន្យល់ និងមិនធ្វើអ្វីទាំងអស់ លើកលែងតែសម្គាល់ចំណុចប្រទាក់របស់យើង និងវិធីសាស្ត្ររបស់វាជាសេវាកម្មគេហទំព័រ។ ដូចគ្នានេះដែរអនុវត្តចំពោះថ្នាក់ SOAPBinding ។ ភាពខុសគ្នាតែមួយគត់គឺថា SOAPBinding គឺជាចំណារពន្យល់ដែលមានប៉ារ៉ាម៉ែត្រ។ ក្នុងករណីនេះ ប៉ារ៉ាម៉ែត្ររចនាប័ទ្មត្រូវបានប្រើជាមួយនឹងតម្លៃដែលបង្ហាញថាសេវាបណ្តាញនឹងដំណើរការមិនមែនតាមរយៈសារឯកសារនោះទេប៉ុន្តែជា RPC បុរាណពោលគឺឧ។ ដើម្បីហៅវិធីសាស្រ្តមួយ។ ចូរយើងអនុវត្តតក្កវិជ្ជាចំណុចប្រទាក់របស់យើង ហើយបង្កើតថ្នាក់ HelloWebServiceImpl នៅក្នុងកញ្ចប់របស់យើង។ និយាយអីញ្ចឹងខ្ញុំកត់សម្គាល់ថាការបញ្ចប់ថ្នាក់ជាមួយ Impl គឺជាអនុសញ្ញាមួយនៅក្នុង Java ដែលយោងទៅតាមការអនុវត្តនៃចំណុចប្រទាក់ត្រូវបានកំណត់ដូច្នេះ (Impl - ពីការអនុវត្តពាក្យពោលគឺការអនុវត្ត) ។ នេះមិនមែនជាតម្រូវការទេ ហើយអ្នកមានសេរីភាពក្នុងការដាក់ឈ្មោះថ្នាក់តាមអ្វីដែលអ្នកចង់បាន ប៉ុន្តែសុជីវធម៌ទាមទារវា៖ កញ្ចប់ ru ។ javarush ។ ws;// ចង្អុលបង្ហាញ ឈ្មោះពេញថ្នាក់ចំណុចប្រទាក់នៃសេវាកម្មគេហទំព័ររបស់យើង។ @WebService(endpointInterface=// បង្ហាញឈ្មោះពេញនៃថ្នាក់ចំណុចប្រទាក់នៃសេវាកម្មគេហទំព័ររបស់យើង។ srcត្រឡប់ "សួស្តី" + ឈ្មោះ + "!" ; )) សូមចាប់ផ្តើមសេវាកម្មគេហទំព័ររបស់យើងជាម៉ាស៊ីនមេឯករាជ្យ , i.e. ដោយគ្មានការចូលរួមពី Tomcat និងម៉ាស៊ីនមេកម្មវិធីណាមួយ (នេះគឺជាប្រធានបទសម្រាប់ការពិភាក្សាដាច់ដោយឡែក)។ ដើម្បីធ្វើដូចនេះនៅក្នុងរចនាសម្ព័ន្ធគម្រោងនៅក្នុងថតតោះបង្កើតកញ្ចប់ ru.javarush.endpoint ហើយនៅក្នុងនោះ យើងនឹងបង្កើតថ្នាក់ HelloWebServicePublisher ជាមួយនឹងវិធីសាស្ត្រចម្បង៖ package ru ។ javarush ។ ចំណុចបញ្ចប់; // class សម្រាប់ដំណើរការ web server ជាមួយនឹង web services
នាំចូល javax ។ xml ws ចំណុចបញ្ចប់;
// ថ្នាក់នៃសេវាកម្មគេហទំព័ររបស់យើង។នាំចូល ru ។ javarush ។ ws HelloWebServiceImpl; "http://localhost:1986/wss/hello"ថ្មី HelloWebServiceImpl () ); )) ឥឡូវយើងរត់ថ្នាក់នេះដោយចុចប្ដូរ (Shift) + F10 . គ្មានអ្វីនឹងបង្ហាញនៅក្នុងកុងសូលទេ ប៉ុន្តែម៉ាស៊ីនមេកំពុងដំណើរការ។ អ្នកអាចផ្ទៀងផ្ទាត់វាដោយវាយបន្ទាត់ http://localhost:1986/wss/hello?wsdl នៅក្នុងកម្មវិធីរុករករបស់អ្នក។ មួយវិញទៀត ទំព័រដែលបើក បង្ហាញថាយើងមានម៉ាស៊ីនមេគេហទំព័រ (http://) ដែលកំពុងដំណើរការនៅលើច្រក 1986 នៅលើកុំព្យូទ័ររបស់យើង (localhost) ហើយម្យ៉ាងវិញទៀត បង្ហាញការពិពណ៌នា WSDL នៃសេវាកម្មគេហទំព័ររបស់យើង។ ប្រសិនបើអ្នកបញ្ឈប់កម្មវិធី នោះការពណ៌នានឹងលែងមាន ដូចសេវាកម្មគេហទំព័រខ្លួនឯងដែរ ដូច្នេះយើងនឹងមិនធ្វើបែបនេះទេ ប៉ុន្តែបន្តទៅការសរសេរអតិថិជន។
អតិថិជន srcនៅក្នុងថតគម្រោង តោះបង្កើតកញ្ចប់ ru.javarush.client ហើយនៅក្នុងនោះ ថ្នាក់ HelloWebServiceClient ជាមួយនឹងវិធីសាស្ត្រចម្បង៖ កញ្ចប់ ru ។ javarush អតិថិជន;
// ត្រូវការដើម្បីទទួលបានការពិពណ៌នា wsdl និងតាមរយៈវា។// ឈានដល់សេវាកម្មគេហទំព័រដោយខ្លួនឯង។ នាំចូល java ។ សុទ្ធ។ URL// ករណីលើកលែងនេះនឹងកើតឡើងនៅពេលធ្វើការជាមួយវត្ថុ URL នាំចូល java ។ សុទ្ធ។ MalformedURLException;
// ថ្នាក់ដើម្បីញែក xml ជាមួយនឹងការពិពណ៌នា wsdl// ហើយឈានដល់ស្លាកសេវាកម្មនៅក្នុងវា។ នាំចូល javax ។ xml ចន្លោះឈ្មោះ។ QName;នាំចូល javax ។ xml ws សេវាកម្ម; // ចំណុចប្រទាក់នៃសេវាកម្មគេហទំព័ររបស់យើង (យើងត្រូវការបន្ថែមទៀត)ត្រឡប់ "សួស្តី" + ឈ្មោះ + "!" ; // បង្កើតតំណភ្ជាប់ទៅការពិពណ៌នា wsdl)
;
អាសយដ្ឋាន url
= URL ថ្មី (
"http://localhost:1986/wss/hello?wsdl") ) សូមចាប់ផ្តើមសេវាកម្មគេហទំព័ររបស់យើងជាម៉ាស៊ីនមេឯករាជ្យ ឧ. ដោយគ្មានការចូលរួមពី Tomcat និងម៉ាស៊ីនមេកម្មវិធីណាមួយ (នេះគឺជាប្រធានបទសម្រាប់ការពិភាក្សាដាច់ដោយឡែក)។ ដើម្បីធ្វើដូចនេះនៅក្នុងរចនាសម្ព័ន្ធគម្រោងនៅក្នុងថត URL url = URL ថ្មី ( QName qname = ថ្មី QName ("http://ws.javarush.ru/", "HelloWebServiceImplService" ); ការពិពណ៌នា wsdl
សេវាកម្ម= សេវាកម្ម។ បង្កើត (url, qname); // ឥឡូវនេះយើងអាចទៅដល់ស្លាកសេវាកម្មនៅក្នុងការពិពណ៌នា wsdl, HelloWebService ជំរាបសួរ = សេវាកម្ម។ getPort(HelloWebService.class); // ហ៊ឺយ! ឥឡូវនេះអ្នកអាចហៅបាន។
សេវាកម្ម = សេវាកម្ម។ បង្កើត (url, qname); UPD