Kaynak Kod:
Custom Web Service in Java.zip
Uyarlama projesi içerisinde bir web service yazmak için ilk işlem olarak bir sınıf oluşturulur ve gerçekleştirlmek istenilen işlemler bu sınıf içerisinde kodlanır. Aşağıdaki örnek sınıf içerisinde malzeme browser’ına ait MMQOItemBrowser sorgusu çalıştırılarak sonuç istemciye döndürülmüştür.
package com.acme.customization;
public class CustomWebService
{
public String[] getFirstNItems(int firm, int period, String language, int rowCount)
{
try
{
IServerContext context = WebServiceHelper.getContext(firm, period, language);
IServerQueryFactory factory = context.getServerQueryFactory();
QueryParams params = new QueryParams();
QueryBusinessObjects items = new QueryBusinessObjects();
factory.first("MMQOItemBrowser", params, items, rowCount, true);
String[] results = new String[rowCount];
if(items != null && items.size() > 0)
{
for(int i = 0; i < items.size(); i++)
{
QueryBusinessObject item = (QueryBusinessObject) items.get(i)
String code = QueryUtil.getStringProp(item, "Code");
String name = QueryUtil.getStringProp(item, "Name");
String searchText = QueryUtil.getStringProp(item, "SearchText");
results[i] = "Code: " + code + " Name: " + name + " Search Text: " + searchText;
}
}
return results;
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
}
Bu adım tamamlandıktan sonra uyarlama projesi derlenir. Uyarlama projesinin bulunduğu dizinde, ..workspace/UyarlamaProjeniz/bin içerisinden web service olarak yazılmış olan sınıf (CustomWebService) ve bu sınıf içerisinde nesneleri oluşturulan ya da static metodlarına erişilen (ProjectUtil) uyarlama projesi içerisinde bulunan ve kullanılmış olan sınıfların .class uzantıları alınır. Tüm bu class’lar paket tanımındaki gibi (CustomWebService sınıfı için ../com/acme/customization) ilgili klasörler içerisine yerleştirilir. Daha sonra bu klasörlerde .aar uzantılı dosyası içerine yerleştirilir. .aar uzantılı bu dosyanın yapısı:
-META-INF
services.xml
MANIFEST.MF
Şekildedir. Yukarıdaki adımlarda .class uzantılı dosyaların yerleştirlmesi ile elde edilen diğer klasörlerde META-INF ile aynı dizinde olacak şekilde bu dosya içerisine yerleştirilir.
Bu işlemden sonra services.xml dosyasının içeriği aşağıdaki gibi değiştirilir.
<service name="CustomWebService">
<description>Description ...</description>
<parameter name="ServiceClass">com.acme.customization.CustomWebService</parameter>
<parameter name="InflowSecurity">
<action>
<items>UsernameToken</items>
<passwordCallbackClass>com.lbs.ws.LbsUserPasswordCallback</passwordCallbackClass>
</action>
</parameter>
</service>
Bu xml’de service etiketinin name özelliğine web servise verilmek istenen isim yazılır. Parameter etiketinin name özelliğine ise yazlımış olan sınıfın paket bilgisi yazılır ve diğer kısımlar olduğu gibi bırakılır. Tüm bu işlemler tamamlandıktan sonra .aar uzantılı dosyanızı adı services.xml içerisinde service etiketi ile belirlenmiş servis ismi ile aynı olacak şekilde isimlendirilmelidir.
.aar dosyası yeniden isimlendirildikten sonra uyarlama projesini altında UyarlamaProjesi/WebContentExtensionsWEB-INF/services altına yerleştirilir. Bu işlem yapıldıktan sonra proje deploy edilir. Web servisin oluşup oluşmadığını kontrol etmek için herhangi bir internet tarayıcısında aşağıdaki link çalıştırılır.