เนื่องจากความต้องการของโครงการฉันหยิบเว็บเซิร์ฟเวอร์ที่ฉันใช้มาก่อนและเลือกใช้ Java Native Jaxws ที่ไม่ต้องการแพ็คเกจ JAR ก่อนอื่นการใช้งานของ WSIMPORT จะถูกแชร์ก่อน: ไปที่เส้นทางที่โครงการอยู่ภายใต้ CMD จากนั้นเรียกใช้คำสั่งต่อไปนี้
การคัดลอกรหัสมีดังนี้:
WSIMPORT -KEEPTENTENSION -S./SRC -P com.jaxws.test http://192.168.1.1.1:8080/service?wsdl
คุณสามารถค้นหาคลาสเสริมที่เกี่ยวข้องกับไคลเอนต์ที่สร้างขึ้นโดยอัตโนมัติภายใต้แพ็คเกจ com.jaxws.test ฉันจะไม่อธิบายว่าหมวดหมู่เหล่านี้มีการใช้รายละเอียดอย่างไรมีข้อมูลออนไลน์มากมาย จากนั้นฉันเขียนคลาสการโทรด้วยตัวเอง (ฉันเป็นแค่วิธีที่นี่เพียงแค่เรียกมัน)
การคัดลอกรหัสมีดังนี้:
สตริงสาธารณะ Jaxws (Object [] Opargs)
-
ServiceSservice Service = New Servicesservice ();
// เพิ่มส่วนหัวลงในสบู่
Service.SethandLerresolver (handlerresolver ใหม่ () {
รายการสาธารณะ <Dandler> Gethandlerchain (Portinfo Portinfo) {
รายการ <dhandler> handlerlist = new ArrayList <DanDler> ();
// เพิ่มข้อมูลการรับรองความถูกต้อง
handlerlist.add (ใหม่ clienthandler ());
HandlerList กลับ;
-
-
String result = service.getServicesport (). getResults (opargs.toString ());
// รับผลลัพธ์
System.out.println (ผลลัพธ์);
ผลการกลับมา;
-
หมายเหตุ [// เพิ่มข้อมูลการรับรองความถูกต้อง handlerlist.add (ใหม่ ClientHandler ());] ที่นี่ดังนั้นเราจึงต้องสร้างคลาสไคลเอนต์ Handler ใหม่เพื่อใช้แอสเซมบลีของข้อความการรับรองความถูกต้องดังนี้:
การคัดลอกรหัสมีดังนี้:
แพ็คเกจ com.jaxws.test;
นำเข้า java.util.set;
นำเข้า javax.xml.namespace.qname;
นำเข้า Javax.xml.soap.*;
นำเข้า javax.xml.ws.handler.messagecontext;
นำเข้า javax.xml.ws.handler.soap.soaphandler;
นำเข้า javax.xml.ws.handler.soap.soapmessagecontext;
Public Class ClientHandler ใช้ Soaphandler <SoapMessageContext> {
HandleMessage บูลีนสาธารณะ (SOAPMESSAGECONTEXT CTX) {
// ขาออกนั่นคือเพิ่มข้อมูลส่วนหัวก่อนที่ลูกค้าจะออกคำขอ
บูลีน request_p = (บูลีน) ctx.get (messageContext.message_outbound_property);
ถ้า (request_p) {
พยายาม {
SoapMessage msg = ctx.getMessage ();
SOAPENVELOPE Env = msg.getSoAppart (). getenvelope ();
soapheader hdr = env.getheader ();
ถ้า (hdr == null) hdr = env.addheader ();
// เพิ่มส่วนหัวข้อมูลการรับรอง
// qname (สตริง namespaceuri, สตริง localpart, คำนำหน้าสตริง)
// qname (สตริง namespaceuri, สตริง localpart)
// qname (สตริง localpart)
//@param namespaceuri: qname namespace
//@param localpart: ส่วนท้องถิ่นของ qname
//@param คำนำหน้า: คำนำหน้า qName
qname name = ใหม่ qName ("http://csdc.info/", "การรับรองความถูกต้อง", "wsse");
ส่วนหัว SoapheaderElement = hdr.addheaderElement (ชื่อ);
// addChildElement (สตริง localName, คำนำหน้าสตริง, สตริง uri)
// addChildElement (สตริง localName, คำนำหน้าสตริง)
// AddChildElement (String localName)
//@param uri: ชื่ออวกาศ uri ซึ่งองค์ประกอบใหม่เป็นของ
//@param localname: ชื่อโลคัลขององค์ประกอบใหม่
//@param คำนำหน้า: คำนำหน้าอวกาศสำหรับชื่อองค์ประกอบใหม่
// ดู API ของ JDK 1.6
SOAPELEMENT USERELEMENT = Header.addChildElement ("ชื่อผู้ใช้", "WSSE");
userElement.addTextNode ("ผู้ดูแลระบบ");
Soapelement Passelement = Header.addChildElement ("รหัสผ่าน", "WSSE");
Passelement.addTextNode ("Admin");
msg.savechanges ();
// เอาต์พุตข้อความสบู่ไปยัง System.out นั่นคือคอนโซล
msg.writeto (system.out);
กลับมาจริง;
} catch (Exception e) {
E.PrintStackTrace ();
-
-
กลับเท็จ;
-
@Override
Public Boolean Handlefault (บริบท SoapMessageContext) {
// todo วิธีการที่สร้างขึ้นอัตโนมัติสตับ
กลับเท็จ;
-
@Override
โมฆะสาธารณะปิด (บริบท MessageContext) {
// todo วิธีการที่สร้างขึ้นอัตโนมัติสตับ
-
@Override
ชุดสาธารณะ <Qname> getheaders () {
// todo วิธีการที่สร้างขึ้นอัตโนมัติสตับ
คืนค่า null;
-
-
คลาสนี้เพิ่มข้อความส่วนหัวลงในข้อความ SOAP ทั้งหมด
การคัดลอกรหัสมีดังนี้:
<WSSE: การรับรองความถูกต้อง XMLNS: wsse = "http://csdc.info/">
<wsse: ชื่อผู้ใช้> ผู้ดูแลระบบ </wsse: ชื่อผู้ใช้>
<WSSE: รหัสผ่าน> ผู้ดูแลระบบ </wsse: รหัสผ่าน>
</wsse: การรับรองความถูกต้อง>
สิ่งนี้ใช้ไคลเอนต์ Webservice ที่ใช้ JAXWS ด้วยการตรวจสอบส่วนหัวของ SOAP