Bu örnekte Jersey'de bir web projesinde hangi resource'ların olduğunu ekrana basacağız.
List<AbstractResource> list=new ArrayList<>();
AbstractResource resource1 = IntrospectionModeller.createResource(MyService1.class);
AbstractResource resource2 = IntrospectionModeller.createResource(MyService2.class);
list=Arrays.asList(resource1, resource2);
for (AbstractResource abstractResource : list) {
String resourcePath=abstractResource.getPath().getValue();
for (AbstractSubResourceMethod srm :abstractResource.getSubResourceMethods())
{
String uri = resourcePath + "/" + srm.getPath().getValue();
// Query Param'lar Eklenir
List<Parameter> parameters= srm.getParameters();
for (Parameter parameter : parameters) {
if(parameter.getSource()==null){
continue;
}
if(parameter.getSource().name().equals("QUERY")){
if(uri.indexOf("?")==-1){
uri+="?";
}else{
uri+="&";
}
uri+=parameter.getSourceName()+"=";
}
}
System.out.println("("+srm.getHttpMethod()+")" + uri + " [return type : " + srm.getReturnType().getName()+"]");
}
System.out.println();
}
MyService1, MyService2 şeklinde iki tane resource sınıfı var.
IntrospectionModeller.createResource(MyService.class);
ile bir Resource sınıfın modeli yüklenir. getSubResourceMethods() yöntemi ile resource sınıfındaki method'ların (sub resource) listesi alınabilir. AbstractSubResourceMethod sınıfından ise yöntemin method'u (GET, POST vb.), yöntemin dönüş tip, parametereleri alınabilir. Biz yukarıdaki örnekte sadece QueryParam tipindeki parametreleri aldık. ENTITY, MATRIX, PATH, COOKIE, HEADER, CONTEXT, FORM gibi farklı parametreler de eklenebilir. Örneği çalıştırdığımızda aşağıdaki gibi bir çıktı elde edebilir :
(GET)/category/search?q= [return type : java.lang.String]
(GET)/category/child/{categoryId} [return type : java.lang.String]
(PUT)/question//session?member_id= [return type : java.lang.String]
(PUT)/question//session/{session_id}/{question_id}/answer/{option_id} [return type : java.lang.String]