نسخه جدید پلاتفرم جاوا، Standard Edition (Java SE) نسخه 6.0، که تحت عنوان Mustang نیز شناخته میشود، توسعه و استفاده از وب سرویسها را بسیار ساده میکند. توانایی متاداده (فقط کافیست عبارت @WebService را تایپ کنید تقریبا کار تمام است) را در اختیار کلاسهای ساده جاوا قرار میدهد، که این امر آنها را قادر به گسترش یافتن به صورت وب سرویس مینماید. همچنین API جاوا برای وب سرویسهای XML را در اختیار استفاده کنندگان از این سرویسها قرار میدهد. این مقاله یک رویکرد کاربردی را برای گسترش وب سرویسهای مبتنی بر متاداده و سپس استفاده از آنها با به کارگیری JAX-WS در پیش میگیرد.
اگر شما در جریان چیزی که Sun Microsystems برای نسخه جدید جاوا مهیا کرده است نبودهاید، این یک ندای بیدارباش است: پس از ماهها اکنون Sun نسخههای اولیه باینریها، Javadoc ها، و سورس کدها را برای پلاتفرم جاوا، Standard Edition (Java SE) نسخه 6.0، که تحت عنوان Mustang نیز شناخته میشود، مهیا کرده است. و هنوز برای پیوستن به این قافله که با سرعت رو به جلو پیش میرود دیر نشده است.
در اینجا یک پرسش آشکار برای افراد شکاک مطرح میشود، "چرا باید به این ویرایش فکر کنم؟". جاوا SE 6 در بر دارنده پیشرفتهای جامعی است، از فراهم شدن دسترسی برنامهنویس به کامپایلر جاوا، تا کامپوننتهای system-tray و splash-screen، تا ترکیب زبانهای اسکریپتی با سورس کد جاوای شما (با پشتیبانی خارج از چارچوب JavaScript)، تا یک ظاهر شیک و جذاب برای Swing، تا امضاهای دیجیتالی XML، تا Smart Card I/O API، تا پیشرفتهای JMX monitor threading، تا توضیحات وب سرویسها برای فراهم کنندگان سرویس و دسترسی تسهیل شده مشتری – اینها تنها بخشی از ویژگیهای جدیدی است که ارائه گردیدهاند. (وب سایت java.net هر گونه اطلاعات در مورد این نسخه جدید که خواهان کسب آن هستید را در اختیارتان قرار میدهد.)
در این مقاله، ما بر روی پیشرفتهای حاصل شده در ویژگی متادادهی وب سرویسها و API جاوا برای وب سرویسهای XML (JAX-WS) نسخه 2.0 در جاوا SE 6 تمرکز میکنیم که توسعه و استفاده از وب سرویسها را کاملا آسان میسازد. با استفاده از این ویژگیهای جدید، ما یک وب سرویس را صرفا با استفاده از توضیحات (annotationها) از یک کلاس ساده جاوا به وجود میآوریم؛ سپس، این سرویس را با استفاده از JAX-WS 2.0 به کار میبریم. ما حتی یک اداره کننده را به این سرویس میافزاییم که فراخوانی سرویس را دریافت کرده و پیغامهای SOAP را به System.out میفرستد. در واقع، این ویژگیها برای بازارگرمی به عنوان دانلود قابل دسترس بودهاند که Java Specification Request 181 (Web Services Metadata) و JSR 224 (JAX-WS) را شکل میدادند. یکپارچه بودن این ویژگیها با جاوای استاندارد نقش آنها را پر رنگتر از پیش میسازد؛ به زودی پشتیبانی گسترده در IDE ها را شاهد خواهید بود.
JSR 181 و JSR 224 همچنین بخشی از جاوا EE5 میباشند، که این امکان را برای فروشندگان برنامههای کاربردی فراهم میآورند تا پلاتفرمهای میزبانی را برای وب سرویسهای مبتنی بر مشخصات استاندارد تامین نمایند. در حالت مطلوب، چنین کارکردی این امکان را برای برنامههای کاربردی نیمه تمام وب سرویس صرفا گسترش یافته در Java SE 6 Java Runtime Environment فراهم میآورد تا با استفاده از سرورهای برنامههای کاربردی که همان مشخصهها را پشتیبانی میکنند بدون تغییر در کد پایه هم سطح deploymentهای حجم کاری زیاد گردند.
وب سرویس Mustang ما: سرور و کلاینت
پیش از آغاز کار، فایل فشردهی همراه این مقاله را از آدرس http://www.javaworld.com/javaworld/jw-07-2006/jw-0703-mustang_p.html#resources#resources دانلود کنید. فایل مزبور شامل این چهار فایل است (فایلهای jar تنها برای تسهیل در کار میباشند):
• mustangwsPERSIAN FORUM NETWORK LINK ERROR - z حاوی سورس کد برنامه سرور وب سرویس این مقاله، فایل ساخت، و فایل اسکریپت wsgen است
• mustangwsclientPERSIAN FORUM NETWORK LINK ERROR - z حاوی سورس کد برنامه کلاینت، فایل ساخت، و فایل اسکریپت wsimport است
• mustangws.jar حاوی برنامه کامپایل شده برای سرور ما است
• mustangwsclient.jar حاوی برنامه کامپایل شده برای کلاینت ماست
پس از آن که فایلها را از حالت فشرده خارج ساختید، دو فولدر خواهید داشت، mustangws و mustangwsclient، که هر کدام متناظر با یک برنامه سرور و کلاینت هستند. هر دو پروژه دارای فولدر src مشابه هستند که حاوی فایلهای سورس جاوا و تحت آن build.xml متعلق به Apache Ant میباشند. در آنجا همچنین فایلهای اضافی wsgenMustang.bat و wsimportMustang.bat قرار دارند که حاوی دستورات کنسول برای تولید artifactها و stubهای وب سرویس هستند.
فایل build.xml متعلق به Apache Ant برای هر دو برنامه درون فولدر ریشه mustangws و mustangwsclient قرار دارد. این فایل دارای اعمال مشابه init، compile، dist، clean و run میباشد.
فولدر ریشه برای سرور وب سرویس ما حاوی یک فولدر به نام wsdl است، که برای ذخیرهسازی فایل WSDL (Web Services Description Language) تولید شده از سوی wsgen به کار برده خواهد شد.
متادادههای وب سرویسها
مشخصه Web Services Metadata از توضیحات (که متاداده نیز نامیده میشوند) استفاده میکند، که در جاوا SE 5 معرفی گردیدند. آن دسته از خوانندگانی که با این مفهوم نا آشنا هستند توجه داشته باشند که توضیحات (annotationها) برچسبهایی هستند که میتوانند در سورس کد مورد استفاده قرار گیرند؛ مثلا، تعاریف کلاس، توابع، پارامترهای تابع، یا مقادیر بازگشتی تابع. این توضیحات امریهها (directive) یا اشاراتی (hint) به کامپایلرها، JVM ها، و سرورهای برنامههای کاربردی هستند که نحوه رفتار با کد توضیحنویسی شده را برای آنها تعیین مینمایند. توضیحات با یک علامت at (@) آغاز میشوند و متن توضیح پس از آن قرار میگیرد. برای مثال، توضیح @Deprecated اعمال شده بر روی یک تعریف تابع، یک هشدار را در طی کامپایل کد با استفاده از تابعی که قرار است از خروجی دریافت گردد تولید مینماید. در حالی که توضیح @Deprecated به یک توضیح @Deprecated Javadoc شبیه است، نکته قابل توجه این است که توضیحات اکنون به ساختارهای درجه یک جاوا تبدیل شدهاند.
هنگامی که توضیحات متاداده وب سرویسها برای تعاریف کلاس و توابع در سورس کد جاوا اعمال میشوند، یک وب سرویس قابل گسترش تولید میشود. ویژگی Web Services Metadata پس از یک حالت توسعه "آغاز با جاوا" دنبال میشود، یعنی شما ابتدا یک کلاس و توابع جاوا را تعریف میکنید، و سپس توضیحات Web Services Metadata را بر آنها اعمال مینمایید. برای توسعه دهندگان جاوا، نسبت به آغاز با WSDL و ایجاد کلاسهای جاوای متناظر، این یک راه طبیعیتر برای ایجاد وب سرویسها است. این توضیحات اشاراتی برای موتورهای زمان اجرای وبسرویس-فعالکننده هستند که نحوه تبدیل یک کلاس جاوا و توابع آن به یک وب سرویس و عملیاتهای وب سرویس را به آنها نشان میدهند. جاوا SE 6 به همراه چنین موتوری ارائه میشود، اما از آنجایی که Web Services Metadata همچنین بخشی از جاوا EE 5 است، شما فروشندگان بیشماری را خواهید دید که سرورهای برنامههای کاربردیای را فراهم میآورند که این توضیحات را پشتیبانی میکنند.
سرور وب سرویس Mustang ما
بدون مقدمه، با بررسی دقیقتر بخش سرور وب سرویس Mustang خود، نگاهی به Web Services Metadata در عمل میاندازیم. به فولدر mustangws/src/com/techyatra/hellows بروید. شما این فایلها را خواهید دید:
HelloServer •
Bootstrap •
TraceHandler •
HelloException •
Person •
فایل HelloServer را بگشایید؛ آن حاوی یک کلاس جاوا است که توسط توضیحات Web Services Metadata به عنوان یک وب سرویس معرفی شده است. آن bean پیادهسازی سرویس است:
package com.techyatra.hellows;
...
@WebService(name="HelloServer", targetNamespace="http://mustangws.techyatra.com/", serviceName="HelloService")
@SOAPBinding(style=SOAPBinding.Style.RPC)
public class HelloServer
{
...
@WebMethod(operationName="hello", action="urn:hello")
public @WebResult(partName="result")String ping(@WebParam (partName="person", mode=Mode.IN, targetNamespace="http://mustangws.techyatra.com/") Person person) throws HelloException
{
if (person == null)
{
System.out.println("function: hello(null)... throwing exception");
throw new HelloException("0001", "Person is null");
}
else
{
System.out.println("function: hello(person.getTitle() + person.getName())");
return "Hello. " + person.getTitle() + person.getName() + "!";
}
}
}
در قطعه کد قبلی، توضیح @WebService کلاس MustangServer را به عنوان پیادهسازی کننده یک وب سرویس معرفی مینماید، در حالی که @WebMethod اقدام به شناسایی ping به عنوان یک عملیات وب سرویس مینماید. ping کاری بیش از بازگرداندن یک پیغام انجام نمیدهد.