نظرًا لاحتياجات المشروع ، التقطت خدمة الويب التي استخدمتها من قبل واخترت استخدام Jaxws الأصلي Java والتي لا تتطلب حزم جرة. أولاً ، تتم مشاركة استخدام Wsimport أولاً: انتقل إلى المسار الذي يقع فيه المشروع تحت CMD ، ثم قم بتشغيل الأمر التالي
نسخة الكود كما يلي:
Wsimport -keep -extension -s./src -p com.jaxws.test http://192.168.1.1:8080/service؟wsdl
يمكنك العثور على العديد من الفئات المساعدة المتعلقة بالعميل والتي يتم إنشاؤها تلقائيًا تحت حزمة Com.Jaxws.Test. لن أشرح كيف يتم استخدام هذه الفئات بالتفصيل ، فهناك الكثير من المعلومات عبر الإنترنت. ثم أكتب فصل الاتصال بنفسي (أنا مجرد طريقة هنا ، فقط اتصل بها)
نسخة الكود كما يلي:
jaxws السلسلة العامة (Object [] Opargs)
{
خدمة servicesservice = new ServicEsService () ؛
// أضف رأسًا إلى الصابون
Service.SethandLerresolver (New Handlerresolver () {
القائمة العامة <Handler> gethandlerchain (portinfo portinfo) {
قائمة <Handler> HandlerList = new ArrayList <Handler> () ؛
// إضافة معلومات المصادقة
HandlerList.Add (New ClientHandler ()) ؛
قائمة المعالج ؛
}
}) ؛
String result = service.getServicesport (). getResults (Opargs.ToString ()) ؛
// احصل على النتيجة
System.out.println (نتيجة) ؛
نتيجة العودة
}
لاحظ [// إضافة معالج معلومات المصادقة. add (clientHandler ())
نسخة الكود كما يلي:
حزمة 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 ؛
تنفذ ClientHandler من الفئة العامة Soaphandler <SapMessageContext> {
Public Boolean Handlemessage (SoapmessageContext Ctx) {
// في الخارج ، أي إضافة معلومات الرأس قبل أن يصدر العميل طلبًا
Boolean request_p = (Boolean) ctx.get (messagecontext.message_outbound_property) ؛
if (request_p) {
يحاول {
soapmessage msg = ctx.getMessage () ؛
soapenvelope env = msg.getSoappart (). getenvelope () ؛
soapheader hdr = env.getheader () ؛
if (hdr == null) hdr = env.addheader () ؛
// إضافة رأس معلومات شهادة
// QName (سلسلة اسم اسم الاسم ، سلسلة محلي ، بادئة السلسلة)
// qname (سلسلة اسم الاسم ، سلسلة LocalPart)
// QName (String LocalPart)
//@param namespaceuri: مساحة اسم QName
//@param localpart: الجزء المحلي من QName
//@param prefix: QName Prefix
QName name = new QName ("http://csdc.info/" ، "المصادقة" ، "wsse") ؛
soapheaderElement header = hdr.addheaderelement (name) ؛
// AddChildElement (سلسلة LocalName ، بادئة السلسلة ، سلسلة URI)
// AddChildElement (String LocalName ، بادئة السلسلة)
// AddChildElement (سلسلة LocalName)
//@param uri: اسم المساحة uri الذي ينتمي إليه العنصر الجديد
//@param localname: الاسم المحلي للعنصر الجديد
//@parm prefix: بادئة الفضاء لاسم عنصر جديد
// انظر واجهة برمجة تطبيقات JDK 1.6
مستخدم soapelement = header.addchildElement ("اسم المستخدم" ، "wsse") ؛
userElement.addTextNode ("admin") ؛
soapelement passelement = header.addChildElement ("كلمة المرور" ، "wsse") ؛
passelement.addtextNode ("admin") ؛
msg.savechanges () ؛
// إخراج رسالة الصابون إلى system.out ، أي وحدة التحكم
msg.writeto (system.out) ؛
العودة صحيح.
} catch (استثناء e) {
E.PrintStackTrace () ؛
}
}
العودة كاذبة
}
@تجاوز
BOOLEAN GEALLEFAULT (SOAPMESSAGECONTEXT CONTEXT) {
// TODO METHOTION METTOD COBS
العودة كاذبة
}
@تجاوز
إغلاق الفراغ العام (سياق MessageContext) {
// TODO METHOTION METTOD COBS
}
@تجاوز
المجموعة العامة <QName> getheaders () {
// TODO METHOTION METTOD COBS
العودة لاغية.
}
}
يضيف هذا الفصل رسالة رأس إلى جميع رسائل الصابون.
نسخة الكود كما يلي:
<wsse: المصادقة xmlns: wsse = "http://csdc.info/">
<wsse: اسم المستخدم> المسؤول </wsse: اسم المستخدم>
<wsse: password> admin </wsse: password>
</wsse: المصادقة>
هذا ينفذ عميل WebService المستند إلى JAXWS مع مصادقة رأس الصابون.