Java เรียกเว็บเซิร์ฟเวอร์ เมื่อคุณติดต่อคุณครั้งแรกคุณจะคิดว่ามันเป็นฝันร้ายโดยเฉพาะอย่างยิ่งไม่มีการใช้งานมาตรฐานแบบครบวงจร เมื่อเปรียบเทียบกับการใช้งานเว็บเซอร์ที่สามารถทำได้ในไม่กี่ขั้นตอนของ. NET มันเป็นเรื่องน่าเศร้าที่เห็นการใช้งานของ Java แต่ถึงแม้ว่าเราจะเศร้าเราก็ยังต้องทำมันให้เสร็จ Java มีการนำไปใช้ที่ดีมากมายเช่น Xfire, Jersey, CXF ที่นี่เราจะดูการใช้ Xfire ด้วยกัน
1) ก่อนอื่นแน่นอนฉันต้องลงกระเป๋าและคนธรรมดาคนนี้รู้ http://xfire.codehaus.org/download คุณสามารถไปที่นี่คุณสามารถไปทั้งหมดหรือแจกจ่าย แต่เป็นการดีกว่าที่จะให้ปัญหาแปลก ๆ มากมายเพื่อลดความมั่นใจ
ฉันควรทำอย่างไรถ้าฉันเอากระเป๋าออก? วางไว้ในโครงการ ดูเหมือนไร้สาระ แต่หลายคนก็ไม่รู้ว่าต้องทำอะไร
ในการสร้างโครงการใหม่ฉันเปรียบเทียบกับ Xfirewebservice ซึ่งแน่นอนว่าเป็นโครงการเว็บที่นี่
ฉันได้ใส่แพ็คเกจทั้งหมดที่นี่ ท้ายที่สุดเมื่อเราเขียนตัวอย่างไม่จำเป็นต้องจู้จี้จุกจิก คลิกอย่างไม่ตั้งใจ หากคุณต้องการดูข้อมูลข้อยกเว้นคุณสามารถเพิ่มได้อย่างช้าๆ มันง่ายที่จะกำจัดข้อผิดพลาดในอนาคต แต่เราจะไม่ทำที่นี่ ท้ายที่สุดไม่มีอะไรน่าเกลียดเกี่ยวกับการขาดข้อยกเว้นใด ๆ และคุณสามารถกำจัดพวกเขาเองได้
2) ก่อนอื่นให้เข้าใจถึงความแตกต่างระหว่าง XFIRE และเฟรมเวิร์กเว็บเซอร์วิสอื่น ๆ ความแตกต่างที่ยิ่งใหญ่ที่สุดคือต้องใช้อินเทอร์เฟซและหากคุณต้องการใช้ XFire เพื่อเรียกเว็บเซิร์ฟเวอร์ที่เกี่ยวข้องคุณต้องรู้คำจำกัดความของอินเทอร์เฟซ ฉันรู้สึกว่ามีข้อ จำกัด เล็กน้อยที่นี่ แต่นอกเหนือจากนี้มันค่อนข้างสะดวกในการโทรหา Webservice เช่นเดียวกับการโทรหาวิธีการในท้องถิ่น ลองดูตัวอย่างโดยตรง:
ก่อนอื่นอินเทอร์เฟซที่สำคัญที่สุด:
อินเทอร์เฟซสาธารณะ iReaderservice {Public Reader GetReader (ชื่อสตริง, รหัสผ่านสตริง); รายการสาธารณะ <Rester> GetReaders (); } มีอินเทอร์เฟซแน่นอนว่าจะต้องมีคลาสการใช้งานมิฉะนั้นอินเทอร์เฟซจะไม่มีความหมาย Public Class Readerservice ใช้ iReaderservice {Public Reader GetReader (ชื่อสตริง, รหัสผ่านสตริง) {ส่งคืนเครื่องอ่านใหม่ (ชื่อ, รหัสผ่าน); } รายการสาธารณะ <reader> getReaders () {list <reader> readerList = new ArrayList <Aderer> (); readerlist.add (ผู้อ่านใหม่ ("shun1", "123")); readerlist.add (ผู้อ่านใหม่ ("shun2", "123")); ส่งคืนผู้อ่าน; - ลองดูที่คลาส Javabean และ Reader:
ผู้อ่านระดับสาธารณะ {ส่วนตัวคงที่สุดท้าย Long SerialVersionUid = 1L; ชื่อสตริงส่วนตัว; รหัสผ่านสตริงส่วนตัว Public Reader () {} Public Reader (ชื่อสตริง, รหัสผ่านสตริง) {this.name = name; this.password = รหัสผ่าน; } // get/set วิธีการละเว้นสตริงสาธารณะ toString () {return "ชื่อ:"+name+", รหัสผ่าน:"+รหัสผ่าน; -โปรดทราบว่าคลาสผู้อ่านของเราที่นี่ใช้อินเตอร์เฟส serializable ทำไม? ที่นี่ก่อนอื่นเราต้องเข้าใจหลักการของเว็บเซิร์ฟเวอร์ สำหรับ Java หากเราต้องการอัปโหลดวัตถุบนอินเทอร์เน็ตแน่นอนว่าหลายคนจะนึกถึงการทำให้เป็นอนุกรม โดยวิธีการนี่คือการทำให้เป็นอนุกรมเพราะเราจำเป็นต้องส่งผู้อ่านเป็นพารามิเตอร์ สิ่งนี้จะต้องดำเนินการโดยใช้การบังคับในเวอร์ชันก่อนหน้ามิฉะนั้นจะมีการรายงานข้อผิดพลาด อย่างไรก็ตามเวอร์ชันล่าสุด (อันที่จริงแล้วรุ่นล่าสุดก็มาจากปี 2007 เนื่องจาก Xfire หยุดการพัฒนาและถูกรวมเข้ากับโครงการ CXF โดย Apache เราจะพูดถึงเรื่องนี้ในภายหลัง) ไม่จำเป็นอีกต่อไป สำหรับวิธีการใช้งานเราจะไม่ตรวจสอบในเชิงลึกที่นี่ในขณะนี้เพราะมันถูกรวมเข้ากับ CXF หากเราต้องการเรียนรู้ในเชิงลึกควรดีกว่าที่จะเรียนรู้ CXF
3) หลังจากที่เราทำอินเทอร์เฟซข้างต้นและการเขียน Javabean หลายคนจะถามว่าฉันเห็นว่าเว็บเซอร์วิสจำนวนมากจะมีไฟล์ WSDL ดังนั้นคุณจะได้รับมันอย่างไร? ก่อนที่จะพูดถึงเรื่องนี้ลองพูดคุยกันว่า WSDL คืออะไร บางที บริษัท หลายแห่งมีอินเทอร์เฟซที่เป็นเพียงที่อยู่ HTTP การส่งคืนรูปแบบ XML และของเราก็เช่นกัน สิ่งนี้มีข้อดีอย่างหนึ่งและข้อเสียหนึ่งข้อ ข้อได้เปรียบคือการพัฒนาของเรานั้นยากน้อยกว่าในขณะที่ข้อเสียคือเราจำเป็นต้องให้ไฟล์คำอธิบายมากมายแก่ผู้ใช้ แท็ก XML ที่ส่งคืนแต่ละอันหมายถึงอะไร? นี่คืออะไร แต่มันก็น่ารำคาญ สำหรับ Webservice ข้อเสียคือเราได้พัฒนาสิ่งต่าง ๆ อีกเล็กน้อยและข้อได้เปรียบคือเราไม่จำเป็นต้องเขียนไฟล์คำอธิบายมากมายเพราะมีคำอธิบายแบบครบวงจรที่เรียกว่า WSDL นี่คือเอกสารคำอธิบายของ Webservice ซึ่งเป็นหนึ่งเดียวและไม่ว่าจะเป็นภาษาใดดังนั้นจึงไม่มีปัญหาที่ไม่มีใครสามารถเข้าใจได้
และที่นี่เมื่อเราปรับใช้ XFIRE มันสามารถช่วยเราสร้างไฟล์ WSDL
ปัญหาคือวิธีการปรับใช้มันง่ายจริงๆ เราสร้างโฟลเดอร์ใหม่ Meta-Inf ในไดเรกทอรี SRC จากนั้นสร้างโฟลเดอร์ XFire ในนั้นและสร้าง File Services.xml โครงสร้างที่ตามมามีดังนี้:
บางคนอาจถามว่าทำไมเราต้องสร้างมันลงในไดเรกทอรี SRC ในความเป็นจริงมันไม่ได้เป็นงานสร้างที่กำหนดไว้ที่นี่ แต่เนื่องจากเราจำเป็นต้องถามเครื่องมือการพัฒนาเพื่อช่วยให้เราปรับใช้ไฟล์เหล่านี้ด้วยตนเองดังนั้นหากเราวางไว้ที่นี่ Eclipse สามารถช่วยเราปรับใช้กับ Tomcat หรือคอนเทนเนอร์อื่น ๆ โปรดทราบว่าระดับโฟลเดอร์ที่ไฟล์นี้ได้รับการแก้ไขและไม่สามารถแก้ไขได้
มาดู services.xml กันโดยตรง:
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <beans xmlns = "http://xfire.codehaus.org/config/1.0"> <บริการ> <! -> <namespace> http: // test/helloService </namespace> <!-คลาสอินเตอร์เฟส-> <serviceClass> com.xfire.servlet.ireaderservice </serviceClass> <!
โดยทั่วไปแล้วมันก็โอเคที่จะดูความคิดเห็น
4) หลายคนคิดว่ามันเพียงพอแล้ว ไม่มันยังไม่ได้ผล หากคุณระบุสิ่งนี้คนอื่นจะเยี่ยมชมได้อย่างไร? วิธีส่งต่อคำขอที่เกี่ยวข้องไปยัง XFIRE และปล่อยให้มันประมวลผล เราจำเป็นต้องแก้ไข web.xml อีกครั้ง
หลังจากการแก้ไขสิ่งต่อไปนี้คือ:
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <web-app xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://java.sun.com/xml xmlns: web = "http://java.sun.com/xml/ns/javaee" xmlns: web = "http://java.sun.com/xml/ns/javaee/web-app_2_5_5.xsd" XSI: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id = "webapp_id" เวอร์ชัน = "3.0"> <servlet-class> org.codehaus.xfire.transport.http.xfireconfigurableservlet </servlet-class> </servlet> <servlet-mapping> <servlet-name> xfireservlet </servlet-name>
ในความเป็นจริงมันเป็นเพียงการเพิ่ม servlet และการแมปที่สอดคล้องกัน ต่อไปเราป้อนโดยตรงในเบราว์เซอร์:
http: // localhost: 8080/xfirewebservice/services/readerservice? wsdl
เราสามารถเห็น:
สิ่งที่แสดงที่นี่คือ WSDL ซึ่งจะแสดงวิธีที่เรากำหนดและประเภทที่ส่งคืน มีคำอธิบายของ WSDL ในภายหลัง
5) หลังจากเสร็จสิ้นสี่ขั้นตอนข้างต้นเราได้เสร็จสิ้นการปรับใช้เว็บเซิร์ฟเวอร์ คนอื่น ๆ สามารถเรียกเว็บเซอร์ที่เกี่ยวข้องเพื่อเข้าถึงวิธีการของเรา มาใช้ไคลเอนต์ที่ได้รับจาก XFire เพื่อเข้าถึงบริการเว็บไซต์ที่เราเพิ่งเผยแพร่:
Public Class ReaderClient {โมฆะสาธารณะคงที่หลัก (สตริง [] args) {// นี่คือการสร้างบริการและต้องส่งผ่านคลาสอินเตอร์เฟสเพราะเราต้องเรียกใช้วิธีการอินเตอร์เฟสที่สอดคล้องกัน // Agent Factory นี่คือการสร้างคลาสอินเตอร์เฟสที่เกี่ยวข้องในภายหลังโรงงาน XFireProxyFactory = ใหม่ XFireProxyFactory (XFireFactory.NewInstance (). getXfire ()); // ที่อยู่ webservice ไม่จำเป็นต้องเพิ่ม WSDL สตริง readerserviceUrl = "http: // localhost: 8080/xfirewebservice/services/readerservice"; ลอง {// ใช้โรงงานเพื่อส่งคืนคลาสอินเตอร์เฟสที่สอดคล้องกัน iReaderservice readerservice = (iReaderservice) Factory.Create (SrcModel, ReaderserViceUrl); reader reader = readerservice.getReader ("Shun", "123"); System.out.println (ผู้อ่าน); } catch (malformedurlexception e) {e.printstacktrace (); - ด้วยวิธีนี้เราจะเห็นว่าผลลัพธ์คือ:
การวิเคราะห์โครงสร้างไฟล์ WSDL
WSDL (คำอธิบายบริการเว็บบริการภาษาบริการเว็บคำอธิบายภาษา) เป็นแอปพลิเคชัน XML ที่กำหนดคำอธิบายบริการเว็บเป็นชุดจุดเชื่อมต่อบริการที่ลูกค้าสามารถเข้าถึงบริการที่มีข้อมูลเอกสารหรือการโทรขั้นตอน (คล้ายกับการโทรขั้นตอนระยะไกล) WSDL บทคัดย่อการดำเนินการเข้าถึงและข้อความคำขอ/การตอบกลับที่ใช้ในระหว่างการเข้าถึงและเชื่อมโยงกับโปรโตคอลการขนส่งเฉพาะและรูปแบบข้อความเพื่อกำหนดจุดเชื่อมต่อบริการที่ปรับใช้เฉพาะในที่สุด จุดเชื่อมต่อบริการสำหรับการปรับใช้เฉพาะที่เกี่ยวข้องกลายเป็นบริการเว็บนามธรรมผ่านการรวมกัน บทความนี้จะอธิบายโครงสร้างของเอกสาร WSDL โดยละเอียดและวิเคราะห์บทบาทของแต่ละองค์ประกอบ
1: คำจำกัดความของ WSDL
WSDL เป็นเอกสารที่ใช้ในการอธิบายบริการเว็บอย่างถูกต้องและเอกสาร WSDL เป็นเอกสาร XML ที่เป็นไปตามรูปแบบ WSDL XML เอกสาร WSDL กำหนดบริการเว็บเป็นคอลเลกชันของจุดเชื่อมต่อบริการหรือพอร์ต ใน WSDL เนื่องจากคำจำกัดความนามธรรมของจุดเชื่อมต่อบริการและข้อความได้ถูกแยกออกจากการปรับใช้บริการเฉพาะหรือการเชื่อมโยงรูปแบบข้อมูลคำจำกัดความนามธรรมสามารถใช้อีกครั้ง: ข้อความหมายถึงคำอธิบายที่เป็นนามธรรมของข้อมูลที่แลกเปลี่ยน; และประเภทพอร์ตหมายถึงคอลเลกชันที่เป็นนามธรรมของการดำเนินงาน โปรโตคอลเฉพาะและข้อมูลจำเพาะรูปแบบข้อมูลสำหรับประเภทพอร์ตเฉพาะประกอบด้วยการเชื่อมโยงที่สามารถนำกลับมาใช้ใหม่ได้ การเชื่อมโยงที่อยู่เว็บเข้ากับการเชื่อมโยงที่นำกลับมาใช้ใหม่สามารถกำหนดพอร์ตได้และชุดของพอร์ตถูกกำหนดเป็นบริการ
เอกสาร WSDL มักจะมีองค์ประกอบสำคัญ 7 รายการ ได้แก่ ประเภทการนำเข้าข้อความ Porttype การดำเนินงานการเชื่อมโยงและองค์ประกอบบริการ องค์ประกอบเหล่านี้ซ้อนกันในองค์ประกอบคำจำกัดความซึ่งเป็นองค์ประกอบรูทของเอกสาร WSDL ส่วนถัดไปของบทความจะแนะนำโครงสร้างพื้นฐานของ WSDL โดยละเอียด
2: โครงสร้างพื้นฐานของ WSDL-Overview
ตามที่อธิบายไว้ในตอนท้ายของส่วนแรกเอกสาร WSDL พื้นฐานมีองค์ประกอบสำคัญ 7 ประการ ต่อไปนี้จะแนะนำองค์ประกอบเหล่านี้และฟังก์ชั่นของพวกเขา
เอกสาร WSDL ใช้องค์ประกอบต่อไปนี้ในคำจำกัดความของบริการเว็บ:
・ ประเภท - คอนเทนเนอร์ที่กำหนดโดยประเภทข้อมูลซึ่งใช้ระบบประเภทหนึ่ง (โดยปกติจะเป็นระบบประเภทใน XML Schema)
・ ข้อความ - คำจำกัดความประเภทนามธรรมของโครงสร้างข้อมูลสำหรับข้อความการสื่อสาร ใช้ประเภทที่กำหนดโดยประเภทเพื่อกำหนดโครงสร้างข้อมูลของข้อความทั้งหมด
・ การดำเนินการ - คำอธิบายที่เป็นนามธรรมของการดำเนินงานที่สนับสนุนในบริการ โดยทั่วไปการดำเนินการเดียวจะอธิบายคู่ข้อความร้องขอ/ตอบกลับที่เข้าถึงรายการ
・ PortType - คอลเลกชันนามธรรมของการดำเนินงานที่สนับสนุนโดยประเภทจุดเข้าใช้งานที่แน่นอนซึ่งสามารถรองรับได้ด้วยจุดเชื่อมต่อบริการอย่างน้อยหนึ่งจุด
・ การเชื่อมโยง - การเชื่อมโยงโปรโตคอลเฉพาะและข้อมูลจำเพาะรูปแบบข้อมูลสำหรับประเภทพอร์ตเฉพาะ
・ พอร์ต - กำหนดเป็นจุดเชื่อมต่อบริการเดียวที่รวมรูปแบบโปรโตคอล/ข้อมูลที่มีผลผูกพันกับที่อยู่การเข้าถึงเว็บเฉพาะ
・ บริการ- ชุดของจุดเชื่อมต่อบริการที่เกี่ยวข้อง
Schema XML ของ WSDL สามารถเรียกได้ว่าเป็น URL ต่อไปนี้: http://schemas.xmlsoap.org/wsdl/
สาม: โครงสร้างพื้นฐานของ WSDL-คำอธิบายรายละเอียด
ส่วนนี้จะอธิบายรายละเอียดเกี่ยวกับบทบาทของแต่ละองค์ประกอบของเอกสาร WSDL ผ่านตัวอย่าง ตัวอย่างต่อไปนี้คือเนื้อหาของเอกสาร WSDL อย่างง่าย สำหรับการสร้างเอกสารนี้โปรดดูบทความอื่น ๆ ของฉัน: Xfire Development ตัวอย่าง-Helloworld
เอกสาร WSDL บริการเว็บอย่างง่ายที่รองรับการดำเนินการที่ไม่ซ้ำกันชื่อ Sayhello ซึ่งดำเนินการโดยใช้โปรโตคอล SOAP บน HTTP คำขอยอมรับชื่อสตริงและส่งคืนสตริงง่าย ๆ หลังจากการประมวลผล เอกสารมีดังนี้:
<? xml version = "1.0" encoding = "utf-8"?> <wsdl: คำจำกัดความ targetNamespace = "http: //com.liuxiang.xfiredemo/helloservice" xmlns: tns = "http: //com.liuxian xmlns: wsdlsoap = "http://schemas.xmlsoap.org/wsdl/soap/" xmlns: soap12 = "http://www.w3.org/2003/05/soap-envelope" xmlns: xsd = "http://www.w3.org/2001/xmlschema" xmlns: soapenc11 = "http://schemas.xmlsoap.org/soap/encoding/" XMLNS: SOAPENC12 = "http://www.w3.org/2003/05/soap-encoding" xmlns: soap11 = "http://schemas.xmlsoap.org/soap/envelope/" xmlns: wsdl = "http://schemas.xmlsoap.org/wsdl/"> <wsdl: ประเภท> <xsd: schema xmlns: xsd = "http://www.w3.org/2001/xmlschyma targetNamespace = "http: //com.liuxiang.xfiredemo/helloservice"> <xsd: element name = "sayhello"> <xsd: complexType> <xsd: sequence> <xsd: element maxoccurs = "1" minoccurs = "1" 1 " </xsd: sequence> </xsd: complexType> </xsd: องค์ประกอบ> <xsd: ชื่อองค์ประกอบ = "sayhelloresponse"> <xsd: complexType> <xsd: sequence> <xsd: องค์ประกอบ maxoccurs = "1" minoccurs = "1" ชื่อ " </xsd: complexType> </xsd: องค์ประกอบ> </xsd: schema> </wsdl: ประเภท> <wsdl: ชื่อข้อความ = "sayhelloresponse"> <wsdl: part name = "parameters" element = "tns: sayhelloresponse"/> <wsdl: ชื่อส่วน = "พารามิเตอร์" องค์ประกอบ = "tns: sayhello" /> < /wsdl: ข้อความ> <wsdl: porttype name = "helloServiceportType"> <wsdl: erperation name = "sayhello"> <wsdl name = "sayhelloresponse" ข้อความ = "tns: sayhelloresponse"/> </wsdl: การดำเนินการ> </wsdl: porttype> <wsdl: การผูกชื่อ = "helloServicehttpbinding" type = "tns: helloServiceport transport = "http://schemas.xmlsoap.org/soap/http"/> <wsdlsoap: name aperation = "sayhello"> <wsdlsoap: การดำเนินการ soopaction = ""/> <wsdlsoap: การดำเนินการ <WSDLSOAP: body use = "ตัวอักษร"/> </wsdl: output> </wsdl: การดำเนินการ> </wsdl: การผูก> <wsdl: ชื่อบริการ = "helloService"> <wsdl: name = "HelloServiceHttpport" binding = "tns: helloserviceht location = "http: // localhost: 8080/xfire/services/helloService"/> </wsdl: พอร์ต> </wsdl: บริการ> </wsdl: คำจำกัดความ>
องค์ประกอบประเภทใช้ภาษา XML Schema เพื่อประกาศชนิดข้อมูลและองค์ประกอบที่ซับซ้อนที่ใช้ในที่อื่นในเอกสาร WSDL
องค์ประกอบการนำเข้าคล้ายกับองค์ประกอบการนำเข้าในเอกสาร XML Schema และใช้ในการนำเข้าคำจำกัดความ WSDL จากเอกสาร WSDL อื่น ๆ
องค์ประกอบข้อความอธิบายถึงน้ำหนักบรรทุกของข้อความโดยใช้ประเภทในตัวประเภทที่ซับซ้อนหรือองค์ประกอบของ Schema XML ที่กำหนดไว้ในองค์ประกอบประเภทของเอกสาร WSDL หรือกำหนดไว้ในเอกสาร WSDL ภายนอกที่อ้างอิงโดยองค์ประกอบการนำเข้า
องค์ประกอบ PortType และองค์ประกอบการดำเนินงานอธิบายอินเทอร์เฟซของบริการเว็บและกำหนดวิธีการ องค์ประกอบ PortType และองค์ประกอบการดำเนินงานคล้ายกับการประกาศวิธีการที่กำหนดไว้ในอินเทอร์เฟซ Java องค์ประกอบการดำเนินการใช้ประเภทข้อความอย่างน้อยหนึ่งประเภทเพื่อกำหนดน้ำหนักบรรทุกของอินพุตและเอาต์พุต
องค์ประกอบที่มีผลผูกพันกำหนดองค์ประกอบ porttype และองค์ประกอบการดำเนินการให้กับโปรโตคอลพิเศษและรูปแบบการเข้ารหัส
องค์ประกอบบริการมีหน้าที่รับผิดชอบในการกำหนดที่อยู่อินเทอร์เน็ตให้กับการเชื่อมโยงที่เฉพาะเจาะจง
1. องค์ประกอบคำจำกัดความ
องค์ประกอบรูทของเอกสาร WSDL ทั้งหมดคือองค์ประกอบคำจำกัดความ องค์ประกอบนี้ห่อหุ้มเอกสารทั้งหมดในขณะที่จัดทำเอกสาร WSDL ผ่านชื่อ องค์ประกอบนี้ไม่มีฟังก์ชั่นอื่นยกเว้นการให้เนมสเปซดังนั้นจะไม่ได้รับการอธิบายในรายละเอียด
รหัสต่อไปนี้เป็นโครงสร้างขององค์ประกอบคำจำกัดความ:
<wsdl: คำจำกัดความ targetNamespace = "http: //com.liuxiang.xfiredemo/helloservice" xmlns: tns = "http: //com.liuxiang.xfiredemo/helloservice" xmlns: wsdlsoap = "http://schemas.xmlsoap.org/wsdl/soap/" xmlns: soap12 = "http://www.w3.org/2003/05/soap-envelope" xmlns: xsd = "http://www.w3.org/2001/xmlschema" xmlns: soapenc11 = "http://schemas.xmlsoap.org/soap/encoding/" XMLNS: SOAPENC12 = "http://www.w3.org/2003/05/soap-encoding" xmlns: soap11 = "http://schemas.xmlsoap.org/soap/envelope/" xmlns: wsdl = "http://schemas.xmlsoap.org/wsdl/"> </wsdl: คำจำกัดความ>
2. ประเภทองค์ประกอบ
WSDL ใช้ประเภท W3C XML Schema ในตัวเป็นระบบประเภทพื้นฐาน องค์ประกอบประเภทใช้เป็นคอนเทนเนอร์เพื่อกำหนดชนิดข้อมูลต่างๆที่ไม่ได้อธิบายไว้ในประเภท XML Schema ในตัว เมื่อประกาศเพย์โหลดของชิ้นส่วนข้อความนิยามข้อความจะใช้ชนิดข้อมูลและองค์ประกอบที่กำหนดไว้ในองค์ประกอบประเภท ประเภทคำจำกัดความในเอกสาร WSDL นี้:
<WSD: ประเภท> <xsd: schema xmlns: xsd = "http://www.w3.org/2001/xmlschema" attributeFormDefault = "ElementFormDefault =" เป้าหมาย name = "sayhello"> <xsd: complexType> <xsd: sequence> <xsd: องค์ประกอบ maxoccurs = "1" minoccurs = "1" name = "name" nillable = "true" type = "xsd: string"/> </xsd: sequence> </xsd <xsd: complexType> <xsd: sequence> <xsd: องค์ประกอบ maxoccurs = "1" minoccurs = "1" name = "out" nillable = "true" type = "xsd: string"/> </xsd: sequence> </xsd: complexType> </xsd:
ด้านบนเป็นส่วนนิยามข้อมูลซึ่งกำหนดสององค์ประกอบหนึ่งคือ Sayhello และอีกอย่างคือ sayhelloresponse:
Sayshello: กำหนดประเภทที่ซับซ้อนซึ่งมีเฉพาะสตริงง่าย ๆ ซึ่งใช้เพื่ออธิบายส่วนที่เข้ามาของการดำเนินการในอนาคต
Sayshelloresponse: กำหนดประเภทที่ซับซ้อนซึ่งมีเฉพาะสตริงง่าย ๆ และค่าคืนที่ใช้เพื่ออธิบายการดำเนินการในอนาคต
3. องค์ประกอบนำเข้า
องค์ประกอบการนำเข้าช่วยให้การใช้องค์ประกอบนิยามในเนมสเปซที่ระบุในเอกสาร WSDL อื่น ๆ ในเอกสาร WSDL ปัจจุบัน องค์ประกอบนำเข้าไม่ได้ใช้ในตัวอย่างนี้ ฟังก์ชั่นนี้มักจะมีประสิทธิภาพมากเมื่อผู้ใช้ต้องการทำให้เป็นโมดูลเอกสาร WSDL
รูปแบบของการนำเข้ามีดังนี้:
<wsdl: นำเข้า namespace = "http://xxx.xxx.xxx/xxx/xxx" location = "http://xxx.xxx.xxx/xxx/xxx.wsdl"/>>
จะต้องมีแอตทริบิวต์เนมสเปซและแอตทริบิวต์ตำแหน่ง:
แอตทริบิวต์เนมสเปซ: ค่าจะต้องตรงกับเป้าหมายที่ประกาศไว้ในเอกสาร WSDL ที่นำเข้า;
แอตทริบิวต์ตำแหน่ง: ต้องชี้ไปที่เอกสาร WSDL จริงและเอกสารไม่สามารถว่างเปล่าได้
4. องค์ประกอบข้อความ
องค์ประกอบข้อความอธิบายถึงเพย์โหลดของบริการเว็บโดยใช้ข้อความ องค์ประกอบข้อความสามารถอธิบาย payload ของเอาต์พุตหรือการยอมรับข้อความ; นอกจากนี้ยังสามารถอธิบายเนื้อหาของส่วนหัวไฟล์ SOAP และองค์ประกอบรายละเอียดข้อผิดพลาด วิธีการกำหนดองค์ประกอบข้อความขึ้นอยู่กับการใช้การส่งข้อความสไตล์ RPC หรือรูปแบบเอกสาร ในคำจำกัดความขององค์ประกอบข้อความในบทความนี้เอกสารนี้ใช้การส่งข้อความสไตล์เอกสาร:
<wsdl: ชื่อข้อความ = "sayhelloresponse"> <wsdl: part name = "parameters" element = "tns: sayhelloresponse" /> < /wsdl: ข้อความ> <wsdl: ชื่อข้อความ =
ส่วนนี้เป็นคำจำกัดความที่เป็นนามธรรมของรูปแบบข้อความ: สองข้อความ sayhelloresponse และ sayhellorequest ถูกกำหนดไว้:
Sayshellorequest: รูปแบบข้อความคำขอของการดำเนินการ Sayhello ซึ่งประกอบด้วยชิ้นส่วนข้อความพารามิเตอร์ชื่อและองค์ประกอบคือองค์ประกอบในประเภทที่เรากำหนดไว้ก่อนหน้านี้
Sayshelloresponse: รูปแบบข้อความตอบกลับของการดำเนินการ Sayhello ประกอบด้วยชิ้นส่วนข้อความพารามิเตอร์ชื่อและองค์ประกอบคือองค์ประกอบในประเภทที่เรากำหนดไว้ก่อนหน้านี้
หากคุณใช้การส่งข้อความสไตล์ RPC คุณจะต้องแก้ไของค์ประกอบองค์ประกอบในเอกสารเพื่อพิมพ์
5. องค์ประกอบ Porttype
องค์ประกอบ PortType กำหนดอินเทอร์เฟซนามธรรมของบริการเว็บ อินเทอร์เฟซนี้ค่อนข้างคล้ายกับอินเทอร์เฟซ Java ซึ่งทั้งสองอย่างนี้กำหนดประเภทนามธรรมและวิธีการและไม่มีการกำหนดการนำไปใช้ ใน WSDL องค์ประกอบ PortType ถูกนำมาใช้โดยองค์ประกอบการเชื่อมโยงและบริการซึ่งใช้เพื่อแสดงโปรโตคอลอินเทอร์เน็ตโครงการเข้ารหัสและที่อยู่อินเทอร์เน็ตที่ใช้โดยการใช้งานบริการเว็บ
การดำเนินการหลายครั้งสามารถกำหนดได้ในพอร์ตไทป์และการดำเนินการหนึ่งครั้งสามารถถือได้ว่าเป็นวิธีการ คำจำกัดความของเอกสาร WSDL ในบทความนี้:
<wsdl: portType name = "HelloServicePortType"> <wsdl: name erperation = "sayhello"> <wsdl: name input = "sayhellorequest" ข้อความ = "tns: sayhellorequest" /> </wsdl: PortType>
PortType กำหนดประเภทของโหมดการโทรของบริการ มันมีวิธีการดำเนินการ Sayshello ซึ่งมีทั้งอินพุตและเอาต์พุตเพื่อระบุว่าการดำเนินการเป็นโหมดคำขอ/ตอบสนอง ข้อความคำขอคือ SayhelloreQuest ที่กำหนดไว้ก่อนหน้านี้และข้อความตอบกลับคือ Sayhelloresponse ที่กำหนดไว้ก่อนหน้านี้ อินพุตแสดงถึงเพย์โหลดที่ส่งไปยังบริการเว็บและข้อความเอาท์พุทแสดงถึงการส่งสัญญาณที่ส่งไปยังไคลเอนต์
6. การผูก
องค์ประกอบที่มีผลผูกพันแมปพอร์ตนามธรรมกับชุดของโปรโตคอลเฉพาะ (SOAO และ HTTP) รูปแบบการส่งข้อความและรูปแบบการเข้ารหัส องค์ประกอบที่มีผลผูกพันมักจะใช้ร่วมกับองค์ประกอบที่เป็นกรรมสิทธิ์ของโปรโตคอล ตัวอย่างในบทความนี้:
<wsdl: ชื่อที่มีผลผูกพัน = "HelloServiceHttpBinding" type = "tns: helloServiceportType"> <wsdlsoap: binding style = "document" transport = "http://schemas.xmlsoap.org/soap/http"/> soapaction = "" /> <wsdl: ชื่ออินพุต = "sayhellorequest"> <wsdlsoap: body use = "ตัวอักษร" /> < /wsdl: อินพุต> <wsdl: name output = "sayhelloresponse"> <wsdlsoap