CXF
يتم تنفيذ CXF على أساس XFIRE.
1) أولاً وقبل كل شيء ، لا تزال مشكلة الحزم. يمكنك تنزيل أحدث إصدار من CXF على http://cxf.apache.org/download.html. بالطبع ، أستخدم أحدث إصدار. التالي هو الهراء ، بناء مشروع ويب ووضعه في حزمة جرة. لا نختار حزم الجرة ، نضعها جميعًا.
سنرى أنه يحتوي على حزمة جرة الربيع. عندما نحتاج إلى نشر CXF كمشروع ويب ، نحتاج إلى استخدام ملف تكوين الربيع ، والذي سيتم مناقشته لاحقًا.
أو فئة الواجهة وفئة التنفيذ:
WebService public interface ireaderservice {public reader getReader (webParam (name = "name") اسم السلسلة ،@webparam (name = "password") سلسلة كلمة المرور) ؛ القائمة العامة <reader> getReaders () ؛ } WebService (EndPointInterface = "com.cxf.servlet.ireaderservice" ، serviceName = "readerservice") تنفذ readerservice الفئة العامة ، اسم السلسلة ، {password password) } القائمة العامة <reader> getReaders () {list <Derer> readerList = new ArrayList <reader> () ؛ ReaderList.add (قارئ جديد ("Shun1" ، "123")) ؛ ReaderList.add (قارئ جديد ("Shun2" ، "123")) ؛ Return ReaderList ؛ }} باستثناء إضافة التعليقات التوضيحية ، هاتان الفئتان متماثلان مثل تلك المذكورة أمس. لن أتحدث عن ذلك هنا. لتفسيرات التعليقات التوضيحية ، يمكنك إلقاء نظرة على وثائق Javaee. ولكن يجب أن يكون من السهل أن نفهم وفقًا للمعنى.
التالي هو Javabean ، أو فئة القارئ:
قارئ الطبقة العامة {Private Static Final Long SerialVersionuid = 1L ؛ اسم السلسلة الخاصة ؛ كلمة مرور السلسلة الخاصة ؛ Public Reader () {} قارئ عام (اسم السلسلة ، كلمة مرور السلسلة) {this.name = name ؛ this.password = كلمة المرور ؛ }. }} ما سبق كتب.
2) هل نريد استخدامه كمشروع ويب؟ لا تقلق ، لا تستخدمه الآن. يأتي CXF مع خدمة حاويات خفيفة الوزن ، والتي تعادل Spring نفسها التي توفر حاويات IOC. يمكننا استخدامه لاختبار ما إذا كان نشرنا ناجحًا.
لنأخذ فئة اختبار:
public static void main (string [] args) {system.out.println ("الخادم يبدأ ...") ؛ readerservice readerservice = new readerservice () ؛ Endpoint.publish ("http: // localhost: 8080/readerservice" ، readerservice) ؛ System.out.println ("تم تشغيل الخادم ...") ؛ } بسيط جدا. لا بأس في نشر العنوان مباشرة ثم تحديد الواجهة أو الفصل. أنا أستخدم الفصول هنا ، لكن حاول استخدام واجهات. بعد كل شيء ، فإن البرمجة الموجهة نحو الواجهة هي الفكرة الحقيقية الموجهة للكائن.
لنبدأ في رؤية النتائج:
نرى أنه تم الانتهاء من بدء التشغيل ، ثم ابدأ المتصفح لمعرفة ما إذا كان ناجحًا.
أدخل مباشرة http: // localhost: 8080/readerservice؟ wsdl في المتصفح ، يمكننا أن نرى:
إنه يولد ملف WSDL الذي نحتاجه ، مما يشير إلى أننا قد نشرناه بنجاح.
3) بعد النشر الناجح ، سوف نسميها. دعوتها أيضا بسيطة للغاية. إنه مشابه لـ Xfire. يمكنك الحصول على الواجهة ثم الاتصال بالطريقة مثل الفئة المحلية.
public static void main (string [] args) {jaxwsproxyfactorybean factorybean = new Jaxwsproxyfactorybean () ؛ Factorybean.SetServiceClass (ireaderservice.class) ؛ Factorybean.setaddress ("http: // localhost: 8080/readerservice") ؛ ireaderservice readerservice = (ireaderservice) factorybean.create () ؛ reader reader = readerservice.getReader ("shun" ، "123") ؛ System.out.println ("reader:"+reader) ؛ } الأمر بسيط للغاية هنا. يمكنك الحصول على فئة مصنع ، ثم قم بتعيين الواجهة والعنوان مباشرة وإنشاء للحصول على الواجهة المقابلة. مثل XFire ، تحتاج أيضًا إلى تحديد النموذج الأولي للواجهة أولاً ، وإلا فلن يكون لهذه المكالمات طريقة للبدء.
نركض للحصول على النتيجة:
لا مشكلة ، إنها تتفق مع النتائج التي توقعناها.
4) ولكن في كثير من الحالات ، لا نريد خدمة الويب الخاصة بنا وتطبيقنا لفصل خادمين ، ولكن نريد أن يكونوا في نفس الحاوية أو Tomcat أو JBoss أو غيرها ، لذلك يجب علينا نشر خدمة الويب التي أكملناها في وقت سابق عبر الويب.
لاحظ أننا بحاجة إلى استخدام ملفات تعريف الربيع هنا.
انظر أولاً إلى web.xml:
<؟ xmlns: web = "http://java.sun.com/xml/ns/javaee" XSI: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id = "webapp_id" الإصدار = "3.0" <Param-value> web-inf/beans.xml </parm-value> </suctext-param> <Stanker> <stlecter-class> org.springframework.web.context.contextloaderListener </stanterer-class> </stanker> <Srevlet-Class> org.apache.cxf.transport.servlet.cxfservlet </servlet-class> </servlet> <sterled mapping>
الأمر بسيط للغاية هنا ، فقط حدد مستمع Spring ومسار ملف التكوين المقابل ، وحدد طريقة اعتراض CXF.
بعد ذلك ، ألق نظرة على Beans.xml:
<؟ xmlns: jaxws = "http://cxf.apache.org/jaxws" http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd "> <import resource =" classpath: meta-inf/cxf/cxf.xml "/> Resource = "classpath: meta-inf/cxf/cxf-extension-soap.xml"/> <import resource = "classpath: meta-inf/cxf/cxf-servlet.xml"/> <jaxws: endpoint id = "readerservicce2" eveledor =
الأمر بسيط للغاية هنا ، فقط حدد خدمة ويب من خلال jaxws: نقطة النهاية. المنفذ هو فئة معالجة خدمة الويب ، والعنوان هو مسار الوصول الخاص به ، على غرار خدمة القراء التي كتبناها سابقًا.
في هذا الوقت ، يمكننا نشره على Tomcat ويمكن الوصول إليه مباشرة من خلال http: // localhost: 8080/cxfwebservice/webservice/readerservice2؟ wsdl.
سيسأل بعض الأصدقاء عن سبب اختلاف عنوان URL الذي زرته هذه المرة عن العنوان السابق. في الواقع ، يتم تعريف عنوان الوصول السابق من قبل أنفسنا ، ويتم تكوين عنوان خدمة الويب هنا في ملف التكوين ويتم نشره من خلال مشروع ويب. هناك حاجة إلى اسم المشروع هنا ، وقمنا بتكوين نماذج URL كخدمة ويب في CXFServlet ، وبالتالي فإن عنوان URL النهائي هو نفسه كما هو مذكور.
يمكننا أن نرى التأثير:
هذا يثبت أن نشرنا كان ناجحا.
يمكنك استخدام فئة الاختبار السابقة للاختبار مرة أخرى. لاحظ أنك تحتاج إلى تعديل العنوان إلى عنوان URL الذي ننشره.
CXF أكثر توصلاً قليلاً من XFIRE. على الرغم من أنه يضيف بعض التعليقات التوضيحية ، إلا أنها غير ضارة. إنه يركز فقط على المعلومات الموجودة في الخدمات السابقة. xml في الفصل ، وهو أكثر ملاءمة للحفاظ عليه. ومع ذلك ، لا تزال هذه مسألة رأي. بعض الأشخاص يحبون ملفات التكوين ، في حين أن الآخرين لا يفعلون ذلك. بالإضافة إلى ذلك ، فإن طريقة استدعاء CXF أكثر إيجازًا ، ولديها حجم رمز أصغر من XFIRE ، وهو تحسن كبير.
يعاني بعض الأصدقاء من بعض المشكلات أثناء عملية البناء ، لذلك يتم إعفاؤهم من الرد واحدًا تلو الآخر. تم إصدار الرمز هنا. يمكن للأصدقاء المحتاجين تنزيله.
لا يتم وضع جميع الحزم في دليل LIB ، فقط ضع جميع الحزم في CXF.
ملاحظة: IDE المستخدمة هي الفكرة ، وهيكل الملف ليس شائعًا في Eclipse. إذا كنت بحاجة إلى استخدامه ضمن Eclipse ، فيمكنك نسخ الكود والملفات مباشرة إلى المشروع الذي تم إنشاؤه حديثًا في Eclipse.
جيرسي
دعونا نلقي نظرة على استخدامه الأساسي.
دعونا نلقي نظرة على مشروع. قبل بدء المشروع ، يجب عليك تنزيل الحزمة بنفسك: https://maven.java.net/content/repositories/release/com/sun/jersey/to قم بتشغيل المثال ، تحتاج إلى تنزيل كل من الخادم والعميل. بالطبع لا أريد أن أجد الكثير ، حتى أتمكن من تنزيل هذه الحزمة Zip مباشرة. https://maven.java.net/service/local/artifact/maven/redirect؟r=releases&g=com.sun.jersey&a=jersey-archive&v=1.10&e=zip
1) فقط افعل جافابان
@xmlrootelement قارئ الطبقة العامة ينفذ قابلة للتسلسل {private static final long serialversionuid = 1L ؛ اسم السلسلة الخاصة ؛ كلمة مرور السلسلة الخاصة ؛ Public Reader () {} قارئ عام (اسم السلسلة ، كلمة مرور السلسلة) {this.name = name ؛ this.password = كلمة المرور ؛ }. }} يتم استخدام علامة هنا ، والتي تمثل النوع عند إرجاعها ، أي يمكن استخدام فئة القارئ هذه لإرجاع XML.
2) إذا كنت ترغب في استخدام فئة خدمة ، فلن تحتاج إلى واجهة مثل CXF و XFIRE في الماضي. فقط استخدم الفصل مباشرة.
path ("/readerservice/{name}/{password}") فئة عامة readerservice {getT @produces (mediaType.application_json) قارئ عام getReader (pathparam ("name") string ، @pathparam ("password") } الفراغ الثابت العام الرئيسي (سلسلة [] args) يلقي غير alustalalargumentexception ، ioException ، urisyntaxexception {httpserver server = httpserverfactory.create ("http: // localhost: 8080/") ؛ server.start () ؛ }} في هذا الوقت ، تم استخدام عدة علامات. يعتقد Path أن الأصدقاء الذين استخدموا SpringMVC يجب أن يعرفوا طريقة الكتابة هذه ، وهي مطابقة URL. إذا لم تكن واضحًا ، فيمكنك الذهاب وإلقاء نظرة أولاً. تشير علامة GET إلى أنه لا يمكن الوصول إلى هذه الطريقة إلا من خلال طريقة GET ، بينما تشير المنتجات إلى النتيجة التي تم إنشاؤها ، مما يعني أن النظام سيحيل كائن القارئ في نتيجة JSON وإعادته.
لا يهم إذا كنت لا تفهم ، يمكنك فهمه بعد فترة.
وفي هذا الوقت هناك طريقة رئيسية ، أعتقد أن هناك أسئلة كبيرة. هذه حاوية داخلية خفيفة الوزن توفرها جيرسي. يمكن استخدامه مؤقتًا بالنسبة لنا للتصحيح ، لكن من المؤكد أنه لا يمكن استخدام هذا في الاستخدام الحقيقي.
3) دعنا نكتب فئة اختبار
الفئة العامة readerClient {public static void main (string [] args) {client client = client.create () ؛ WebResource Resource = Client.Resource ("http: // localhost: 8080/readerservice/shun/123213") ؛ reader reader = resource.get (reader.class) ؛ system.out.println (reader) ؛ }} رمز بسيط للغاية ، يجب أن تفهمه. كائن عميل ، يطلب خدمة الويب ، وإرجاع مورد ، ثم يستدعي المورد مباشرة الطريقة المقابلة. بالطبع ، تتم مطابقة هذه الطريقة من خلال عنوان URL الخاص بنا.
سنقوم أولاً باختباره مع خدمة خفيفة الوزن تأتي معها. قم بتشغيل خدمة القراء مباشرة ، والتي تحتوي على طريقة رئيسية. بعد الجري ، ندير ReaderClient ويمكننا أن نرى أن النتيجة هي:
النتيجة صحيحة.
بالطبع لا نريد استخدام خدمة الوزن الخفيفة التي تأتي معها كخادم الخاص بنا. نحتاج إلى وضعه على نفس الخادم مثل مشروعنا ، مثل Tomcat ، Jboss ، إلخ.
4) بالطبع ، لا غنى عن web.xml لمشاريع الويب.
<؟ xmlns: web = "http://java.sun.com/xml/ns/javaee" XSI: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id = "webapp_id" الإصدار = "3.0" <Srevlet-class> com.sun.jersey.spi.container.servlet.servletcontainer </servlet-class> <load-on-startup> 1 </load-on-startup> </restlet> </servlet-mapping> <servlet-name> jersey web application </servlet-name> <-list-list> <lispile-file> index.jsp </ispile-file> </iswith-file-list> </bil-app>
في هذا الوقت ، سيتم اعتراض كل مسار الراحة المحدد بواسطة جيرسي.
ننتشر إلى Tomcat وبدء تشغيله ثم إعادة تشغيل readerClient. لاحظ أننا بحاجة إلى تعديل مسار المورد أولاً:
WebResource Resource = Client.Resource ("http: // localhost: 8080/jerseywebservice/rest/reatservice/shun/123213") ؛ اسم مشروعي هو JerseyWebservice ، يرجى تعديله وفقًا لاسم مشروعك.
بعد التعديل ، نعيد تشغيله ، والنتائج هي كما يلي:
تمشيا مع النتائج المذكورة أعلاه ، فهذا يعني أن تأثير النشر هو نفسه وهو صحيح أيضًا.