1. ตัวอย่าง 1 (ส่วนใหญ่ดู [2])
1.1. ฟังก์ชั่นระบบ:
พัฒนาบริการเครื่องคิดเลข calculateservice ซึ่งรวมถึงการดำเนินงานเช่นบวกการลบการคูณและการหาร
1.2. การเตรียมการก่อนการพัฒนา:
ติดตั้ง Eclipse-Jee;
ดาวน์โหลด Axis2 เวอร์ชันล่าสุด URL คือ http://axis.apache.org/axis2/java/core/download.cgi เลือกแพ็คเกจซิปของการแจกแจงไบนารีมาตรฐานและคลายชื่อไดเรกทอรี Axis2-1.4.1 โครงสร้างไฟล์ในไดเรกทอรีมีดังนี้:
1.3. การกำหนดค่าก่อนการพัฒนา:
ในแถบเมนูของ Eclipse, หน้าต่าง -> การตั้งค่า -> บริการเว็บ -> การยกระดับ Axis2 เลือกตำแหน่งของแพ็คเกจการบีบอัด Axis2 ในตำแหน่งรันไทม์ Axis2 หลังจากตั้งค่าให้คลิก "ตกลง" (ดังแสดงในภาพ)
1.4. พัฒนาบริการเว็บ:
(1) สร้างโครงการ Java ใหม่และตั้งชื่อมันว่า "WebServiceTest1"
(2) สร้างคลาสใหม่และตั้งชื่อมัน "calculateservice" รหัสที่สมบูรณ์มีดังนี้:
แพ็คเกจ edu.sjtu.webservice; /*** การดำเนินการเครื่องคิดเลข* @author rongxinhua*/คลาสสาธารณะ calculateservice {// เพิ่มเติม public float plus (float x, float y) {return x + y; } // การลบสาธารณะลอยลบลบ (ลอย x, ลอย y) {return x - y; } // การลอยตัวสาธารณะหลายครั้ง (float x, float y) {return x * y; } // การแยกแยะการลอยตัวสาธารณะ Divide (Float X, Float y) {ถ้า (y! = 0) {return x /y; } return -1; -(3) ในโครงการ "webserviceTest1" ใหม่ -> อื่น ๆ ค้นหา "บริการเว็บ" ภายใต้ "บริการเว็บ";
(4) ขั้นตอนถัดไป (ถัดไป) ในกล่องวัตถุบริการเว็บที่ปรากฏขึ้นคลิก "เรียกดู" ในการใช้งานบริการป้อนกล่องวัตถุคลาสเรียกดูและค้นหาคลาส Calculateservice ที่เราเพิ่งเขียน (รูปด้านล่าง) คลิก "ตกลง" แล้วคุณจะกลับไปที่กล่องโต้ตอบเว็บบริการ
(5) ในกล่องโต้ตอบเว็บบริการปรับแถบเลื่อนในประเภทบริการเว็บให้เป็นตำแหน่งของ "เริ่มบริการ" และปรับแถบเลื่อนในประเภทไคลเอนต์ให้เป็นตำแหน่งของ "ไคลเอนต์ทดสอบ"
(6) มี "การกำหนดค่า" ทางด้านขวาของไดอะแกรมประเภทบริการเว็บ คลิกตัวเลือกด้านล่างเพื่อป้อนกล่องวัตถุการกำหนดค่าการปรับใช้บริการและเลือกเซิร์ฟเวอร์ที่เกี่ยวข้อง (ฉันใช้ TomCat6.0 ที่นี่) และ Web Service Runtime (เลือก Apache Axis2) ดังแสดงในรูปด้านล่าง:
(7) หลังจากคลิกตกลงมันจะกลับไปที่กล่องโต้ตอบเว็บบริการ ในทำนองเดียวกันนอกจากนี้ยังมี "การกำหนดค่า" ทางด้านขวาของตัวเลื่อนในประเภทไคลเอนต์และการตั้งค่าที่สอดคล้องกันจะต้องดำเนินการ ขั้นตอนเหมือนกันข้างต้น หลังจากเสร็จสิ้นถัดไป -> ถัดไปพร้อมแล้ว การกำหนดค่าการกำหนดค่า Java Bean Axis2 เราเลือกสร้าง Services.xml เริ่มต้นตามที่แสดงในรูปด้านล่าง:
(8) เมื่อคุณมาถึงกล่องโต้ตอบเริ่มต้นเซิร์ฟเวอร์มีปุ่ม "เริ่มเซิร์ฟเวอร์" (ดังที่แสดงด้านล่าง) คลิกเพื่อเริ่มเซิร์ฟเวอร์ Tomcat
(9) หลังจากรอการเริ่มต้นให้คลิก "ถัดไป -> ถัดไป" ทุกอย่างจะทำตามค่าเริ่มต้นและในที่สุดก็คลิกเสร็จสิ้น ในที่สุดอินเทอร์เฟซต่อไปนี้จะปรากฏขึ้น: (Web Service Explorer) ซึ่งเราสามารถทดสอบบริการเว็บของเราได้ (หากคุณเปิดด้วยเบราว์เซอร์ให้ใช้ที่อยู่ต่อไปนี้: http://127.0.0.1:19189/wse/wsexplorer/wsexplorer.jsp?org.eclipse.wst.ws.explorer=3) ดังที่แสดงในรูปด้านล่าง:
หมายเหตุ: Open Web Service Explorer ในเบราว์เซอร์ (บางครั้ง Webservice Explorer ถูกปิดใน Eclipse ซึ่งสามารถเปิดได้ด้วยวิธีนี้)
ที่อยู่การเข้าสู่ระบบครั้งแรก: http://127.0.0.1:19189/wse/wsexplorer/wsexplorer.jsp จากนั้นเลือกแท็บ Web Service Explorer ที่มุมขวาบนของหน้าเว็บ จากนั้นป้อนที่อยู่ WSDL: http: // localhost: 8080/webservicetest1/บริการ/claculateservice? wsdl ที่อยู่ WSDL นี้คือ WSDL ที่เราเพิ่งเปิดตัวบริการ คลิกไปตามที่แสดงในรูปต่อไปนี้:
จากนั้นคุณสามารถดูอินเทอร์เฟซต่อไปนี้:
(10) การทดสอบค่อนข้างง่าย ตัวอย่างเช่นเราเลือกการดำเนินการ "บวก" (จะต้อง conculateservicesoap11binding) รูปต่อไปนี้จะปรากฏขึ้น ป้อน 1 ในกล่องอินพุตของ X, ป้อน 2 ในกล่องอินพุตของ Y และคลิก "GO" และผลลัพธ์ 3.0 จะปรากฏในแถบสถานะ การทดสอบวิธีการอื่นมีความคล้ายคลึงกัน ผลลัพธ์จะแสดงในรูปด้านบน
1.5. claculateservice client calling โปรแกรม
เราได้กำหนดวิธีการเพิ่มเติมการลบการคูณและการหารและเผยแพร่วิธีการเหล่านี้เป็นบริการ ตอนนี้สิ่งที่เราต้องทำคือเรียกบริการเหล่านี้ โปรแกรมการโทรไคลเอน
แพ็คเกจ edu.sjtu.webservice.test; นำเข้า javax.xml.namespace.qname; นำเข้า org.apache.axis2.axisfault; นำเข้า org.apache.axis2.addressing.endpointreference; นำเข้า org.apache.axis2.client.options; นำเข้า org.apache.axis2.rpc.client.rpcserviceClient; คลาสสาธารณะ calateserviceTest { / ** * @param args * @throws axisisisfault * / โมฆะคงที่สาธารณะหลัก (สตริง [] args) พ่น Axisisisfault {// วิธีการที่สร้างอัตโนมัติแบบอัตโนมัติ ตัวเลือกตัวเลือก = serviceClient.getOptions (); // ระบุ URL เพื่อเรียก webservice endpoIntreference targetepr = ใหม่ endpoIntreference ("http: // localhost: 8080/webserviceTest1/services/calculateservice"); ตัวเลือก Setto (Targetepr); // ระบุวิธีการและเนมสเปซของไฟล์ WSDL ในคอมพิวเตอร์ที่จะเรียก: edu.sjtu.webservice qname opaddentry = new qname ("http://webservice.sjtu.edu", "plus"); // addqname opaddentryminus = new qname ("http://webservice.sjtu.edu" qname ("http://webservice.sjtu.edu", "ทวีคูณ"); // ทวีคูณ qname opaddentrydivide = qname ใหม่ ("http://webservice.sjtu.edu" opaddentryargs = วัตถุใหม่ [] {1,2}; // ระบุประเภทข้อมูลของค่าส่งคืนของคลาส Plus Method [] คลาส = คลาสใหม่ [] {float.class}; // เรียกเมธอดบวกและส่งออกค่าส่งคืนของเมธอด system.out.println (serviceClient.invokeBlocking (opaddentry, opaddentryargs, คลาส) [0]); System.out.println (serviceClient.invokeBlocking (opaddentryminus, opaddentryargs, คลาส) [0]); System.out.println (serviceClient.invokeBlocking (opaddentrymultiply, opaddentryargs, คลาส) [0]); System.out.println (serviceClient.invokeBlocking (opaddentrydivide, opaddentryargs, คลาส) [0]); -ผลการทำงาน:
3.0
-1.0
2.0
0.5
2. ตัวอย่าง
2. Helloservice
(1) ก่อนกำหนดวิธีการบริการรหัสมีดังนี้:
แพ็คเกจ edu.sjtu.webservice; ชั้นเรียนสาธารณะ HelloService {Public String Sayshellonew () {return "Hello"; } สตริงสาธารณะ SayshellotopersonNew (ชื่อสตริง) {ถ้า (ชื่อ == null) {name = "ไม่มีใคร"; } return "Hello" + ชื่อ; } โมฆะสาธารณะอัพเดท (ข้อมูลสตริง) {system.out.println (data + "อัปเดต"); - (2) อ้างถึงตัวอย่างที่ 1 เพื่อเผยแพร่วิธีนี้เป็นบริการ
(3) เขียนรหัสไคลเอนต์เพื่อเรียกเว็บเซิร์ฟเวอร์ (อ้างอิงหลัก [5])
ความแตกต่างที่ใหญ่ที่สุดระหว่างตัวอย่างนี้กับตัวอย่างอื่น ๆ อยู่ที่นี่ ตัวอย่างอื่น ๆ โดยทั่วไปจำเป็นต้องสร้างต้นขั้วไคลเอนต์ตามบริการ WSDL ตอนนี้จากนั้นโทรหาบริการผ่านต้นขั้ว วิธีนี้ดูเหมือนจะค่อนข้างเดี่ยว ลูกค้าต้องต้องใช้ต้นขั้วเพื่อเข้าถึงบริการซึ่งไม่ยุติธรรมมาก ไคลเอนต์ในตัวอย่างนี้ไม่ได้ใช้วิธี Stub แต่ใช้วิธีการโทรทั่วไปและไม่ต้องการให้ไคลเอ็นต์ stub ใด ๆ เข้าถึงบริการ คุณจะต้องระบุที่อยู่ Web Servce, ชื่อการทำงาน, พารามิเตอร์และประเภทการส่งคืนฟังก์ชั่น รหัสมีลักษณะเช่นนี้:
HelloServiceTest2.javapackage edu.sjtu.webservice.test; นำเข้า javax.xml.namespace.qname; นำเข้า org.apache.axis2.axisfault; นำเข้า org.apache.axis2.addressing.endpointreference; นำเข้า org.apache.axis2.client.options; นำเข้า org.apache.axis2.rpc.client.rpcserviceClient; ชั้นเรียนสาธารณะ HelloServiceTest2 {ส่วนตัว RPCServiceClient ตัวเลือกตัวเลือกส่วนตัว Private EndpoIntreference Targetepr; Public HelloServiceTest2 (จุดสิ้นสุดของสตริง) พ่น Axisfault {serviceClient = ใหม่ rpcserviceClient (); ตัวเลือก = serviceClient.getOptions (); targetep = new EndpoIntreference (จุดสิ้นสุด); ตัวเลือก Setto (Targetepr); } วัตถุสาธารณะ [] InvokeOp (String TargetNamespace, String opname, Object [] opargs, คลาส <?> [] opreturntype) พ่น Axisisisfault, classnotFoundException {// ตั้งชื่อของการดำเนินการ qname opqname = ใหม่ qName // ตั้งค่าการส่งคืน // คลาส <?> [] opreirn = คลาสใหม่ [] {opreturntype}; // พารามิเตอร์ที่จะต้องส่งผ่านการดำเนินการจะได้รับอยู่แล้วในพารามิเตอร์ ที่นี่เราเรียกส่งคืน serviceClient.invokeBlocking โดยตรง (opqname, opargs, opreturntype); }/** * @param args * @throws axisisfault * @throws classnotfoundexception */โมฆะคงที่สาธารณะหลัก (สตริง [] args) พ่น AxisiSfault, classnotFoundException {// toDo วิธีการที่สร้างอัตโนมัติ สตริงสุดท้าย targetNamespace = "http://webservice.sjtu.edu"; helloServiceTest2 client = ใหม่ helloServiceTest2 (endpoIntreference); string opname = "sayhellotopersonnew"; Object [] opargs = วัตถุใหม่ [] {"เพื่อนของฉัน"}; คลาส <?> [] opreturntype = คลาสใหม่ [] {string []. class}; Object [] response = client.invokeop (TargetNamespace, opname, opargs, opreirntype); System.out.println (((String []) การตอบสนอง [0]) [0]); -เรียกใช้โปรแกรมและคลิก Run As-> Java Application คุณจะเห็นว่าเอาต์พุตของพอร์ตคอนโซลคือ: สวัสดีเพื่อนของฉันระบุว่าการโทรของลูกค้าสำเร็จ ความแตกต่างและข้อได้เปรียบที่ใหญ่ที่สุดของตัวอย่างนี้สะท้อนให้เห็นในวิธีการเรียกของลูกค้าหรือกล่าวอีกนัยหนึ่งวิธีการเริ่มต้นการโทรบริการ แม้ว่าจะมีรหัสมากกว่าเล็กน้อยกว่าต้นขั้วต้นขั้วของลูกค้า แต่วิธีนี้เป็นแบบรวมและไม่จำเป็นต้องมีการผลิตรหัส Stub Stub ซึ่งแก้ปัญหาที่ลูกค้ามีหลายคลาส หากผู้อ่านสรุปรหัสเหล่านี้เพิ่มเติมฉันคิดว่าวิธีการโทรนั้นง่ายเพียงแค่ผ่านพารามิเตอร์ที่เกี่ยวข้องซึ่งแสดงให้เห็นถึงข้อดีของการโทรบริการได้ดีขึ้น ยิ่งกว่านั้นวิธีนี้ง่ายและชัดเจนขึ้นและคุณสามารถบอกความหมายเฉพาะได้อย่างรวดเร็ว ไม่จำเป็นต้องสร้างกลไกบางอย่างของระดับต้นขั้ว
(4) เขียนรหัสของบริการการโทรลูกค้าใหม่
(3) รหัสแอปพลิเคชันไคลเอนต์ที่กล่าวถึงในต่อไปนี้มีความซับซ้อนเล็กน้อยในการเขียน ไคลเอ็นต์ข้างต้นเรียกโปรแกรมบริการใหม่ซึ่งง่ายกว่ามาก รหัสมีดังนี้:
HelloServiceTest.javaimport Javax.xml.namespace.qname; นำเข้า org.apache.axis2.axisfault; นำเข้า org.apache.axis2.addressing.endpointreference; นำเข้า org.apache.axis2.client.options; นำเข้า org.apache.axis2.rpc.client.rpcserviceClient; ชั้นเรียนสาธารณะ HelloServiceTest {โมฆะคงที่สาธารณะหลัก (String args []) พ่น AxisiSfault {// การโทร WebService RPCServiceClient โดยใช้ rpc serviceClient = ใหม่ rpcserviceClient (); ตัวเลือกตัวเลือก = serviceClient.getOptions (); // ระบุ URL เพื่อเรียก WebService EndPoInTreference Targetepr = ใหม่ endpoIntreference ("http: // localhost: 8080/webserviceTest1/services/helloService"); ตัวเลือก Setto (Targetepr); // ระบุวิธี Sayhellotoperson ที่จะเรียกและ namespace ของไฟล์ wsdl qname opaddentry = ใหม่ qname ("http://webservice.sjtu.edu", "sayhellotopersonnew"); // ระบุค่าพารามิเตอร์ของวัตถุวิธี Sayhellotoperson [] opaddentryargs = วัตถุใหม่ [] {"xuwei"}; // ระบุวัตถุคลาสของประเภทข้อมูลที่เมธอด sayhellotoperson ส่งคืนคลาสค่า [] คลาส = คลาสใหม่ [] {string.class}; // เรียกเมธอด sayhellotoperson และส่งออกค่าส่งคืนของวิธีการ method.out.println (serviceclient.invokeblocking (opaddentry, opaddentryargs, คลาส) [0]); -ผ่านเนื้อหาข้างต้นฉันจะแนะนำตัวอย่างการพัฒนาอย่างง่าย ๆ ของ Eclipse+Webservice และฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน!