1. مثال 1 (انظر بشكل رئيسي [2])
1.1. وظائف النظام:
قم بتطوير خدمة الآلة الحاسبة Compalateservice ، والتي تتضمن عمليات مثل Plus ، الطرح ، الضاعف ، والقسمة.
1.2. التحضير قبل التنمية:
تثبيت Eclipse-Jee ؛
قم بتنزيل أحدث إصدار من AXIS2 ، عنوان URL هو http://axis.apache.org/axis2/java/core/download.cgi ، حدد الحزمة الرمز البريدي للتوزيع الثنائي القياسي ، وفصل اسم الدليل AXIS2-1.4.1. هيكل الملف في الدليل كما يلي:
1.3. تكوين ما قبل التطوير:
في شريط القائمة من Eclipse ، Window -> التفضيلات -> خدمة الويب -> epherences AXIS2 ، حدد موقع حزمة إلغاء الضغط AXIS2 في موقع وقت تشغيل AXIS2. بعد إعداده ، انقر فوق "موافق". (كما هو موضح في الصورة)
1.4. تطوير خدمة الويب:
(1) إنشاء مشروع جديد Java وتسميته "WebServicetest1"
(2) إنشاء فئة جديدة وتسميتها "calculateservice". الرمز الكامل كما يلي:
حزمة edu.sjtu.webservice ؛ /*** عملية الآلة الحاسبة* Author rongxinhua*/الفئة العامة calculateservice {// إضافة عامة تعويم (float x ، float y) {return x + y ؛ } // الطرح العام العائم ناقصًا (Float X ، Float y) {return x - y ؛ } // تعويم عام متعددة مضاعفة (Float X ، Float y) {return x * y ؛ }. } عودة أخرى -1 ؛ }}(3) في مشروع "WebServicet1" جديد -> آخر ، ابحث عن "خدمة الويب" ضمن "خدمات الويب" ؛
(4) الخطوة التالية (التالي) ، في مربع كائن خدمات الويب الذي يظهر ، انقر فوق "استعراض" في تطبيق الخدمة ، وأدخل مربع كائن فئات Browse ، والعثور على فئة Calculateservice التي كتبناها للتو. (الشكل أدناه). انقر فوق "موافق" ، وستعود إلى مربع حوار خدمة الويب.
(5) في مربع حوار خدمة الويب ، اضبط التمرير في نوع خدمة الويب إلى موضع "START SERVICE" وضبط شريط التمرير في نوع العميل إلى موضع "Test Client".
(6) يوجد "تكوين" على الجانب الأيمن من مخطط شريط التمرير نوع خدمة الويب. انقر فوق الخيار الموجود أدناه لإدخال مربع كائن تكوين نشر الخدمة ، وحدد الخادم المقابل (أنا أستخدم TomCat6.0 هنا) ووقت تشغيل خدمة الويب (حدد Apache Axis2) ، كما هو موضح في الشكل أدناه:
(7) بعد النقر فوق موافق ، سيعود إلى مربع حوار خدمة الويب. وبالمثل ، هناك أيضًا "تكوين" على الجانب الأيمن من شريط التمرير في نوع العميل ، ويجب تنفيذ الإعداد المقابل. الخطوات هي نفسها كما هو موضح أعلاه. بعد الانتهاء ، التالي -> التالي جاهز. عند إدخال تكوين Java Bean Service Axis2 ، نختار إنشاء خدمات افتراضية. xml ، كما هو موضح في الشكل أدناه:
(8) عند وصولك إلى مربع حوار بدء تشغيل الخادم ، يوجد زر "START Server" (كما هو موضح أدناه). انقر فوقه لبدء خادم Tomcat.
(9) بعد انتظار بدء التشغيل ، انقر فوق "التالي -> التالي" ، وسيتم كل شيء افتراضيًا ، وأخيراً ، انقر فوق "إنهاء". أخيرًا ، تظهر الواجهة التالية: (مستكشف خدمة الويب) ، حيث يمكننا اختبار خدمات الويب الخاصة بنا. (إذا قمت بفتحه مع متصفح ، استخدم العنوان التالي: http://127.0.0.1:19189/wse/wsexplorer/wsexplorer.jsp؟org.eclipse.wst.ws.explorer=3). كما هو مبين في الشكل أدناه:
ملاحظة: فتح مستكشف خدمة الويب في المتصفح (أحيانًا يتم إغلاق مستكشف WebService في Eclipse ، والذي يمكن فتحه بهذه الطريقة)
أول عنوان تسجيل الدخول: http://127.0.0.1:19189/wse/wsexplorer/wsexplorer.jsp. ثم حدد علامة التبويب "خدمة" خدمة الويب "في الزاوية اليمنى العليا من صفحة الويب. ثم أدخل عنوان WSDL: http: // localhost: 8080/webservicetest1/services/calculateservice؟ wsdl. عنوان WSDL هذا هو WSDL الذي أصدرناه للتو الخدمة. انقر فوق GO ، كما هو موضح في الشكل التالي:
ثم يمكنك رؤية الواجهة التالية:
(10) الاختبار بسيط نسبيا. على سبيل المثال ، نختار عملية "Plus" (يجب أن تكون compalateservicesoap11binding). يظهر الشكل التالي. أدخل 1 في مربع الإدخال من x ، أدخل 2 في مربع الإدخال من Y ، وانقر فوق "GO" ، وسيتم عرض النتيجة 3.0 في شريط الحالة. اختبارات الطرق الأخرى متشابهة. وتظهر النتائج في الشكل أعلاه.
1.5. يقوم عميل Complateservice باستدعاء البرنامج
لقد حددنا طرق الإضافة والطرح والضرب والقسمة ونشرت هذه الأساليب كخدمات. الآن كل ما نحتاج إلى فعله هو استدعاء هذه الخدمات. برنامج استدعاء العميل كما هو موضح في الكود التالي: calculateservicetest.java
حزمة edu.sjtu.webservice.test ؛ استيراد javax.xml.namespace.qname ؛ استيراد org.apache.axis2.axfault ؛ استيراد org.apache.axis2.addressing.endpointreference ؛ استيراد org.apache.axis2.client.options ؛ استيراد org.apache.axis2.rpc.client.rpcserviceClient ؛ الفئة العامة حساب { / ** * param args * throws axisfault * / public static void main (string [] args) يلقي Axisfault {// todo method method method // call webservice باستخدام طريقة rpcserviceClient serviceClient = new rpcserviceClient () ؛ خيارات الخيارات = serviceClient.getOptions () ؛ // حدد عنوان URL للاتصال بـ WebService EndPoinTreference TargetEpr = New EndPoinTreference ("http: // localhost: 8080/webservicetest1/services/calculateservice") ؛ Options.Setto (TargetEpr) ؛ // حدد طريقة ومساحة ملف WSDL في الكمبيوتر المراد استدعاؤها: edu.sjtu.webservice. QName opaddentry = QName جديد ("http://webservice.sjtu.edu" ، "plus") ؛ // addqname opaddentryminus = new qname ("http://webservice.sjtu.edu QName ("http://webservice.sjtu.edu" ، "multiply") ؛ // اضرب QName opaddentryDivide = QName جديد ("http://webservice.sjtu.edu" ، "Divide") ؛ // divide // تحديد القيم المعلمة plus اثنان ، nam ، nam adder و adder] OpAddentryArgs = كائن جديد [] {1،2} ؛ // حدد نوع البيانات لقيمة الإرجاع لفئة الفئة Plus []] = فئة جديدة [] {float.class} ؛ // استدعاء طريقة Plus وإخراج قيمة الإرجاع لنظام method.out.println (serviceClient.invokeBlocking (Opaddentry ، Opaddentryargs ، Classes) [0]) ؛ System.out.println (ServiceClient.invokeBlocking (OpaddentryMinus ، Opaddentryargs ، classes) [0]) ؛ System.out.println (ServiceClient.invokeBlocking (OpaddentryMultiply ، Opaddentryargs ، classes) [0]) ؛ System.out.println (ServiceClient.invokeBlocking (OpaddentryDivide ، Opaddentryargs ، Classes) [0]) ؛ }}نتائج التشغيل:
3.0
-1.0
2.0
0.5
2. مثال
2. الخدمات
(1) تحديد طريقة الخدمة أولاً ، الرمز كما يلي:
حزمة edu.sjtu.webservice ؛ الفئة العامة HelloService {public string salehellonew () {return "hello" ؛ } السلسلة العامة sealhellotopersonnew (اسم السلسلة) {if (name == null) {name = "nope" ؛ } إرجاع "مرحبًا" + اسم ؛ } public void updatedata (String Data) {system.out.println (data + "updated.") ؛ }} (2) ارجع إلى المثال 1 لنشر هذه الطريقة كخدمة.
(3) اكتب رمز العميل للاتصال بـ WebService (المرجع الرئيسي [5])
الفرق الأكبر بين هذا المثال والأمثلة الأخرى هو هنا. هناك أمثلة أخرى تحتاج عمومًا إلى إنشاء كعب عميل بناءً على خدمة WSDL الآن ، ثم اتصل بالخدمة من خلال كعب الكعب. هذه الطريقة تبدو واحدة نسبيا. يجب أن يحتاج العميل إلى كعب كعب للوصول إلى الخدمة ، وهو أمر غير عادل للغاية. لا يستخدم العميل في هذا المثال طريقة الكعب ، ولكنه يقوم بتنفيذ طريقة استدعاء عامة ، ولا يتطلب أي كعب عميل للوصول إلى الخدمة. تحتاج فقط إلى تحديد عنوان خدمة الويب واسم العملية والمعلمة ونوع إرجاع الوظيفة. الرمز يشبه هذا:
HelloServicetest2.javapackage edu.sjtu.webservice.test ؛ استيراد javax.xml.namespace.qname ؛ استيراد org.apache.axis2.axfault ؛ استيراد org.apache.axis2.addressing.endpointreference ؛ استيراد org.apache.axis2.client.options ؛ استيراد org.apache.axis2.rpc.client.rpcserviceClient ؛ public class helloservicetest2 {private rpcserviceClient serviceClient ؛ خيارات الخيارات الخاصة ؛ EndpoinTreference الخاص Targetepr ؛ Public HelloServicEtest2 (نقطة نهاية السلسلة) يلقي Axisfault {serviceClient = جديد rpcserviceClient () ؛ الخيارات = serviceClient.getOptions () ؛ TargetePr = جديد endpointreference (نقطة النهاية) ؛ Options.Setto (TargetEpr) ؛ } الكائن العام [] InvokeOp (سلسلة TargetNamesPace ، string opname ، Object [] opargs ، class <؟> [] opreturntype) يلقي Axisfault ، classnotfoundexception {// تعيين اسم العملية qname opqname = new qname (targetNameSpace ، opname) ؛ // قم بتعيين قيمة الإرجاع // فئة <؟> [] opreturn = فئة جديدة [] {opreturntype} ؛ // المعلمات التي يجب أن يتم تمرير العملية بالفعل في المعلمات. هنا ندعو مباشرة serviceClient.invokeBlocking (OpqName ، Opargs ، OpreturnType) ؛ }/** * param args * throws axisfault * throws classnotfoundException */public static void main (string [] args) remsisfault ، classnotfoundException {// todo method method method tuto tuto strup final string final endpoinference = "http: // localhost: 8080/webserviceESESESESESESESESESESETEST1/ Final String TargetNamesPace = "http://webservice.sjtu.edu" ؛ عميل HelloServicEtest2 = جديد HelloServicET2 (EndPoinTreference) ؛ String opname = "sayhellotopersonnew" ؛ Object [] opargs = new Object [] {"أصدقائي"} ؛ الفئة <؟> [] opreturntype = فئة جديدة [] {string []. class} ؛ Object [] response = client.invokeop (TargetNamesPace ، Opname ، Opargs ، OpreturnType) ؛ System.out.println (((String []) Response [0]) [0]) ؛ }}قم بتشغيل البرنامج وانقر فوق "تشغيل AS->" تطبيق Java. يمكنك أن ترى أن إخراج منفذ وحدة التحكم هو: مرحبًا يا أصدقائي ، مما يشير إلى أن مكالمة العميل ناجحة. ينعكس الفرق الأكبر والميزة لهذا المثال في طريقة استدعاء العميل ، أو بعبارة أخرى ، طريقة بدء مكالمات الخدمة. على الرغم من أن هناك رمزًا أكثر بقليل من كعب كعب العميل ، إلا أن هذه الطريقة موحدة ولا تتطلب إنتاج رمز كعب الكعب ، الذي يحل المشكلة التي لدى العميل العديد من الفئات. إذا قام القارئ بتغليف هذه الرموز ، فأعتقد أن طريقة الاتصال بسيطة ، فما عليك سوى تمرير المعلمات ذات الصلة ، والتي توضح بشكل أفضل مزايا مكالمات الخدمة. علاوة على ذلك ، هذه الطريقة أبسط وأكثر وضوحًا ، ويمكنك معرفة المعنى المحدد في لمحة. ليست هناك حاجة لجعل بعض آليات فئة كعب.
(4) أعد كتابة رمز خدمة استدعاء العميل
(3) رمز تطبيق العميل المذكور في ما يلي معقد بعض الشيء للكتابة. يتم إعادة كتابة العميل أعلاه الاتصال ببرنامج الخدمة ، وهو أبسط بكثير. الرمز كما يلي:
HelloServicetest.javaimport javax.xml.namespace.qname ؛ استيراد org.apache.axis2.axfault ؛ استيراد org.apache.axis2.addressing.endpointreference ؛ استيراد org.apache.axis2.client.options ؛ استيراد org.apache.axis2.rpc.client.rpcserviceClient ؛ الطبقة العامة HelloServicEtest {public static void main (String args []) يلقي Axisfault {// Call WebService RPCServicEclient باستخدام RPC ServiceClient = new rpcserviceClient () ؛ خيارات الخيارات = serviceClient.getOptions () ؛ // حدد عنوان URL للاتصال بـ WebService EndPoinTreference TargetEpr = New EndPoinTreference ("http: // localhost: 8080/webservicetest1/services/helloservice") ؛ Options.Setto (TargetEpr) ؛ // حدد طريقة sayhellotoperson التي سيتم استدعاؤها ومساحة ملف WSDL QName opaddentry = QName جديد ("http://webservice.sjtu.edu" ، "sayhellotopersonnew") ؛ // حدد قيمة المعلمة لكائن طريقة sayhellotoperson [] opaddentryargs = كائن جديد [] {"xuwei"} ؛ . // استدعاء طريقة sayhellotoperson وإخراج قيمة الإرجاع لنظام method.out.println (serviceClient.invokeBlocking (opaddentry ، opaddentryargs ، classes) [0]) ؛ }}من خلال المحتوى أعلاه ، سأقدم مثالًا بسيطًا لتطوير Eclipse+WebService ، وآمل أن يكون ذلك مفيدًا للجميع!