الفرق بين هذا المثال والمقالة المرجعية هو:
1) تم تعريف Deploy.wsdd بمزيد من التفاصيل (يتم تعريف الواجهة من جانب الخادم: ICalculate):
انسخ رمز الكود كما يلي:
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/Java">
<اسم الخدمة = "حساب" المزود = "Java: RPC" style = "rpc" use = "literal">
<اسم المعلمة = "wsdlTargetNamespace" value = "http://web.webservice.CalculateService.org" />
<اسم المعلمة = "wsdlServiceElement" value = "حساب" />
<اسم المعلمة = "wsdlServicePort" value = "CalculateService" />
<اسم المعلمة = "wsdlPortType" value = "ICalculate" />
<parameter name="className" value="org.calculateservice.service.CalculateImp" />
<اسم المعلمة = "typeMappingVersion" value = "1.2" />
<اسم المعلمة = "allowedMethods" value = "إضافة فرعية" />
<اسم المعلمة = "النطاق" value = "الطلب" />
< اسم العملية = "إضافة" qname = "operNS: إضافة"
xmlns:operNS="http://web.webservice.CalculateService.org"
returnQName = "addReturn" returnType = "rtns:int" xmlns:rtns = "http://www.w3.org/2001/XMLSchema"
صابون أكشن = "">
<المعلمة qname = "x" نوع = "tns:int"
xmlns:tns="http://www.w3.org/2001/XMLSchema" />
<المعلمة qname = "y" نوع = "tns:int"
xmlns:tns="http://www.w3.org/2001/XMLSchema" />
</العملية>
< اسم العملية = "sub" qname = "operNS:sub"
xmlns:operNS="http://web.webservice.CalculateService.org"
returnQName = "subReturn" returnType = "rtns:int" xmlns:rtns = "http://www.w3.org/2001/XMLSchema"
صابون أكشن = "">
<المعلمة qname = "x" نوع = "tns:int"
xmlns:tns="http://www.w3.org/2001/XMLSchema" />
<المعلمة qname = "y" نوع = "tns:int"
xmlns:tns="http://www.w3.org/2001/XMLSchema" />
</العملية>
</الخدمة>
</النشر>
2) AxisServlet مخصص: org.calculateservice.core.AxisServlet (متوافق مع .NET وإزالة فحص SOAPACTION)؛
لم يتم نشر الكود التفصيلي هنا. إذا كنت مهتمًا، يمكنك تنزيل نموذج الكود الكامل بنفسك؛
3) طريقة الاتصال هي استخدام فئة محلية للاتصال (يبدو أن هناك ثلاث طرق للاتصال بـ WS في Java. شخصيًا، أشعر أن استخدام فئة وكيل محلي للاتصال هو الأكثر منطقية وقابلية للقراءة):
انسخ رمز الكود كما يلي:
public static void main(String[] args) يطرح ServiceException، RemoteException {
احسب احسب = جديد CalculateLocator();
نتيجة int = Calculate.getCalculateService().add(1, 2);
System.out.println("[%1 + 2 = " + result + "%]");
}
الخطوات الرئيسية للنشر/الاتصال بـ WS: 1) انسخ دليل المحور في تطبيق الويب في حزمة تثبيت axis1.4 في المورد الذي تم تنزيله إلى دليل تطبيق الويب في Tomcat؛
2) كتابة رمز تنفيذ خادم WS؛
3) اكتب ملف النشر Deploy.wsdd في دليل WEB-INF؛
4) اكتب: إنشاء البرنامج النصي server-config.bat، ثم إنشاء: server-config.wsdd، ثم نشر خدمة الويب؛
5) اكتب: البرنامج النصي wsdl2java.bat لإنشاء رمز عميل الاتصال المحلي؛
6) كتابة رمز الاختبار للاتصال بـ WS؛
مخطط هيكل الكود:
العميل: استخدم WSDL2Java لإنشاء رمز العميل المحلي بناءً على wsdl؛
النواة: AxisServlet مخصص، متوافق مع .NET ويزيل فحص SOAPACTION؛
الخدمة: كود تنفيذ خادم WS (يتم استخدام عملية حسابية بسيطة للجمع والطرح كمثال هنا)؛
الاختبار: استدعاء الخادم بناءً على فئة العميل التي تم إنشاؤها (عنوان الخادم للكود الذي تم إنشاؤه هو مضيف محلي. إذا كنت بحاجة إلى تغيير هذا العنوان إلى التكوين، فما عليك سوى تعديل تعيين المتغير CalculateService_address في فئة CalculateLocator)؛
انقر لتنزيل المثال الكامل
يحتوي المورد على نموذج التعليمات البرمجية الكاملة وملفات التثبيت axis1.4