<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8581647651155012352</id><updated>2012-01-17T23:00:12.714+02:00</updated><category term='JBoss'/><category term='lego'/><category term='vfs'/><category term='MySQL'/><category term='RobotBasic'/><category term='java'/><category term='xsd'/><category term='robotics'/><category term='REST'/><category term='Seam'/><category term='JPA 2'/><category term='Veritabanı'/><category term='SFTP'/><category term='schema'/><category term='GlassFish'/><category term='OCPJP'/><category term='JAX-RS'/><category term='spring-ws'/><category term='SCJP'/><category term='TOAD'/><category term='Gson'/><category term='EJB'/><category term='download'/><category term='compability'/><category term='commons'/><category term='nxt'/><category term='EclipseLink'/><category term='Maven'/><category term='spring'/><category term='DB'/><category term='ORM'/><category term='mindstorm'/><category term='microsoft'/><category term='ResultSet'/><category term='Quest'/><category term='JSON'/><category term='Android'/><category term='JEE'/><category term='Jersey'/><title type='text'>Emrah KOCAMAN</title><subtitle type='html'>Say NO! to overengineered flexibility.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://emrahkocaman.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581647651155012352/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://emrahkocaman.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Emrah KOCAMAN</name><uri>http://www.blogger.com/profile/02255228002317362652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>15</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8581647651155012352.post-1598339143577824123</id><published>2011-08-14T16:25:00.002+03:00</published><updated>2011-08-14T16:40:28.656+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSON'/><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><category scheme='http://www.blogger.com/atom/ns#' term='Gson'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>RESTful Web Servis Client–Android</title><content type='html'>&lt;p align="left"&gt;Geçen haftaki &lt;a href="http://emrahkocaman.blogspot.com/2011/08/hzl-bir-baslangc-restful-web-servisler.html"&gt;yazımda&lt;/a&gt; Jersey kullanarak JSON üreten oldukça basit bir RESTful Web servis hazırlamıştık. Bu hafta bu web servisi kullanacak Android uygulamasını yazacağız.&lt;/p&gt;&lt;p align="left"&gt;Kısaca hatırlamak gerekirse geçen haftaki web servisimiz çıktı olarak aşağıdaki sınıfın JSON karşılığını üretiyordu.&lt;/p&gt;&lt;h5&gt;RSOutputDTO.java&lt;/h5&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 594px; padding-right: 5px; height: 392px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;package&lt;/span&gt; com.blogspot.emrahkocaman.restfulws.json;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; RSOutputDTO {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	&lt;span style="color: #0000ff"&gt;private&lt;/span&gt; String userName;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	&lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; userAge;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; setUserName(String userName) {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;		&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.userName = userName;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	}&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; String getUserName() {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;		&lt;span style="color: #0000ff"&gt;return&lt;/span&gt; userName;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	}&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; setUserAge(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; userAge) {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;		&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.userAge = userAge;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	}&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; getUserAge() {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;		&lt;span style="color: #0000ff"&gt;return&lt;/span&gt; userAge;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	}&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Sadece userName ve userAge alanlarına sahip olan sınıfımızın örnek JSON karşılığı ise&lt;strong&gt; &lt;/strong&gt;aşağıdaki satırdan ibaret.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;{"userName":"Kamil","userAge":30} &lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Projemizin tek amacı bu web servisi çağırmak, dönen JSON string’ini parse ederek ekranda göstermekten ibaret olacak.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;İşe önce &lt;a href="http://developer.android.com/sdk/eclipse-adt.html"&gt;ADT plugin&lt;/a&gt;’i kurulmuş bir &lt;a href="http://www.eclipse.org/downloads/"&gt;Eclipse&lt;/a&gt;’te Android projesi oluşturarak başlıyoruz. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;File –&amp;gt; New –&amp;gt; Android Project menüsüni kullanarak bir Android projesi oluşturuyoruz. &lt;/p&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-qcD_6stcpfE/TkfOYf33kII/AAAAAAAAAFE/voLVUiHHYII/s1600/1.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="400" width="244" src="http://2.bp.blogspot.com/-qcD_6stcpfE/TkfOYf33kII/AAAAAAAAAFE/voLVUiHHYII/s400/1.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Daha sonra ADT plugin’i yardımı ile web servisten dönen bilgilerin gösterileceği basit bir arayüz hazırlıyoruz.&lt;/p&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-ebKLycm2P44/TkfOm1g9OUI/AAAAAAAAAFM/3EhJeQK1ItE/s1600/2.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="310" width="400" src="http://2.bp.blogspot.com/-ebKLycm2P44/TkfOm1g9OUI/AAAAAAAAAFM/3EhJeQK1ItE/s400/2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h4&gt;main.xml&lt;/h4&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 580px; padding-right: 5px; height: 579px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;?&lt;/span&gt;xml version="1.0" encoding="utf-8"&lt;span style="color: #0000ff"&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;LinearLayout&lt;/span&gt; &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;android&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"http://schemas.android.com/apk/res/android"&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;orientation&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"vertical"&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;layout_width&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"fill_parent"&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;layout_height&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"fill_parent"&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;RelativeLayout&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;id&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"@+id/relativeLayout1"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;layout_height&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"fill_parent"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;layout_width&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"fill_parent"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;layout_marginTop&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"10dip"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;EditText&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;layout_toRightOf&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"@+id/textView1"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;layout_height&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"wrap_content"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;layout_width&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"fill_parent"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;id&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"@+id/txtUserName"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;requestFocus&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;requestFocus&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;EditText&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;EditText&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;layout_height&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"wrap_content"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;layout_below&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"@+id/txtUserName"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;layout_width&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"wrap_content"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;layout_alignLeft&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"@+id/txtUserName"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;layout_alignRight&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"@+id/txtUserName"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;id&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"@+id/txtUserAge"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;EditText&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Button&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;text&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"WS Çağır"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;id&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"@+id/btnCall"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;layout_height&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"wrap_content"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;layout_width&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"wrap_content"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;layout_below&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"@+id/txtUserAge"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;layout_alignLeft&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"@+id/txtUserAge"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;layout_alignRight&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"@+id/txtUserAge"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Button&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;TextView&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;text&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Kullanıcı Adı"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;paddingRight&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"10dip"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;layout_height&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"wrap_content"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;id&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"@+id/textView1"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;layout_width&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"wrap_content"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;layout_alignParentLeft&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"true"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;paddingTop&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"10dip"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;paddingBottom&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"10dip"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;TextView&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;TextView&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;text&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Kullanıcı Yaşı"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;layout_height&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"wrap_content"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;id&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"@+id/textView2"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;layout_width&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"wrap_content"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;layout_below&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"@+id/textView1"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;layout_alignLeft&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"@+id/textView1"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;layout_alignRight&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"@+id/textView1"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;paddingTop&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"10dip"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;TextView&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;RelativeLayout&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;LinearLayout&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;p&gt;Arayüzü hazırladığımıza göre web servis çağırmak için hazırız. RESTful web servislerin HTTP protokolü ile (GET, PUT, POST vb…) çalıştığından bahsetmiştik. Yani RESTful bir web servis çağırmak için ihtiyacımız olan tek şey bir http istemcisi ve bu istemciyi Android kendi bünyesinde barındırıyor (org.apache.http.impl.client.DefaultHttpClient) bu sayede 3.parti bir kütüphaneye gerek kalmadan HTTP istekleri yapmamız mümkün. &lt;/p&gt;&lt;p&gt;Bundan sonrasını kod üzerinde anlatarak devam edeyim.&lt;/p&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 580px; padding-right: 5px; height: 1073px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;package&lt;/span&gt; com.blogspot.emrahkocaman;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; java.io.BufferedReader;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; java.io.IOException;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; java.io.InputStream;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; java.io.InputStreamReader;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; org.apache.http.HttpEntity;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; org.apache.http.HttpResponse;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; org.apache.http.StatusLine;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; org.apache.http.client.methods.HttpGet;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; org.apache.http.impl.client.DefaultHttpClient;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; org.json.JSONException;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; org.json.JSONObject;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; android.app.Activity;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; android.os.Bundle;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; android.util.Log;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; android.view.View;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; android.view.View.OnClickListener;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; android.widget.Button;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; android.widget.Toast;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; RestClientActivity &lt;span style="color: #0000ff"&gt;extends&lt;/span&gt; Activity {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	&lt;span style="color: #008000"&gt;/** Called when the activity is first created. */&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	@Override&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; onCreate(Bundle savedInstanceState) {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;super&lt;/span&gt;.onCreate(savedInstanceState);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	setContentView(R.layout.main);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	Button btnCallWS = (Button) findViewById(R.id.btnCall);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	btnCallWS.setOnClickListener(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; OnClickListener() {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;			@Override&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; onClick(View arg0) {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #008000"&gt;//HTTP protokolüne ulaşmak için kullanılan sınıf&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	 DefaultHttpClient httpclient = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; DefaultHttpClient();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	 &lt;span style="color: #008000"&gt;//Hazırladığımız web srvis GET isteklerine cevap veriyordu&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	 HttpGet httpget = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; HttpGet(&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	 "&lt;span style="color: #8b0000"&gt;http://192.168.37.1:8080/restfulwssample/rest/examples/getUserInfo&lt;/span&gt;");&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	&lt;span style="color: #008000"&gt;//IP olarak bilgisayarınızın local ip'sini vermeniz gerekiyor. &lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #008000"&gt;//Aksi halde android uygulaması kendi &lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	&lt;span style="color: #008000"&gt;//localhost'una ulaşmaya çalışacaktır.&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	HttpResponse response;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	&lt;span style="color: #0000ff"&gt;try&lt;/span&gt; {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	&lt;span style="color: #008000"&gt;//İsteği gönder&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	  response = httpclient.execute(httpget);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	  StatusLine requestSuccess = response.getStatusLine();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	&lt;span style="color: #008000"&gt;//İstek başarılı&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (requestSuccess.getStatusCode() == 200) {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	  HttpEntity entity = response.getEntity();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	  &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (entity != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;) {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	   InputStream instream = entity.getContent();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	   &lt;span style="color: #008000"&gt;//Stream olarak dönen cevabı anlaşılır bir hale getirmemiz gerekiyor&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;String requestResult = convertStreamToString(instream);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;try&lt;/span&gt; {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	   &lt;span style="color: #008000"&gt;//Android kendi içerisinde JSON stack'ini barındırıyor.&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #008000"&gt;//Gelen string'i JSON objesine dönüştürüyoruz&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	   JSONObject jsonResult = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; JSONObject(requestResult);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	   Toast.makeText(RestClientActivity.&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;, jsonResult.toString(), Toast.LENGTH_LONG).show();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;} &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (JSONException e) {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	    Toast.makeText(RestClientActivity.&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;, "&lt;span style="color: #8b0000"&gt;JSON Exception&lt;/span&gt;", Toast.LENGTH_SHORT).show();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	   }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;instream.close();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	}&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	}&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	} &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (Exception ex) {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	Log.e("&lt;span style="color: #8b0000"&gt;REST_ERR&lt;/span&gt;", ex.getMessage());&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	Toast.makeText(RestClientActivity.&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;, "&lt;span style="color: #8b0000"&gt;Houston we have a problem&lt;/span&gt;", Toast.LENGTH_SHORT).show();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;			&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	}&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	}&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	&lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; String convertStreamToString(InputStream is) {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;		BufferedReader reader = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; BufferedReader(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; InputStreamReader(is));&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;		StringBuilder sb = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; StringBuilder();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;		String line = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;		&lt;span style="color: #0000ff"&gt;try&lt;/span&gt; {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;			&lt;span style="color: #0000ff"&gt;while&lt;/span&gt; ((line = reader.readLine()) != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;) {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;				sb.append(line + "&lt;span style="color: #8b0000"&gt;\n&lt;/span&gt;");&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;			}&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;		} &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (IOException e) {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;			e.printStackTrace();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;		} &lt;span style="color: #0000ff"&gt;finally&lt;/span&gt; {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;			&lt;span style="color: #0000ff"&gt;try&lt;/span&gt; {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;				is.close();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;			} &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (IOException e) {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;				e.printStackTrace();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;			}&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;		}&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;		&lt;span style="color: #0000ff"&gt;return&lt;/span&gt; sb.toString();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;	}&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;}&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Uygulamayı çalıştırıp “WS Çağır” butonuna bastığımızda bize ulaşan JSON nesnesini görmeliyiz.&lt;/p&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-24NFHYISihI/TkfPATHjW7I/AAAAAAAAAFU/cq2y2rj99q8/s1600/3.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="400" width="273" src="http://2.bp.blogspot.com/-24NFHYISihI/TkfPATHjW7I/AAAAAAAAAFU/cq2y2rj99q8/s400/3.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Bize ulaşan JSON nesnesini parse ederek içinde “Kullanıcı Adı” ve “Kullanıcı Yaşı” bilgilerini çıkarmamız gerekiyor. Android içerisinde bulunan JSON stack’i bu işlemi yapmak mümkün. &lt;/p&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 585px; padding-right: 5px; height: 79px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;userName.setText(jsonResult.getString("&lt;span style="color: #8b0000"&gt;userName&lt;/span&gt;"));&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;userAge.setText(jsonResult.getString("&lt;span style="color: #8b0000"&gt;userAge&lt;/span&gt;"));&lt;/pre&gt;&lt;/pre&gt;&lt;p&gt;Örneğimizdeki response’da sadece iki alan olduğu için zorlanmadık ama gerçek hayatta web servisler bu kadar basit değil tabiki. Çok fazla alan içeren JSON nesnelerini bu şekilde parse etmek hem hataya açık hemde çok zahmetli bir hal alacaktır. Bu sebeple JSON nesnelerini bizim içip parse edip istediğimiz nesnelere dönüştürecek kütüphaneler kullanabiliriz. Bu için tavsiyem &lt;a href="http://jackson.codehaus.org/"&gt;Jackson&lt;/a&gt; ve &lt;a href="http://code.google.com/p/google-gson/"&gt;Gson&lt;/a&gt; kütüphaneleri.&amp;nbsp; &lt;/p&gt;&lt;p&gt;Bunları arasındaki seçim konusunda ise tavsiyem, öncelik hız ise Jackson, öncelik uygulama boyutu ise (mobil uygulamaların boyutları büyük olduğunda fazlaca eleştiriliyorlar) GSON kullanmanız. &lt;/p&gt;&lt;p&gt;Şimdi örneğimize Gson’uda ekleyerek projeyi tamamlayalım.&lt;/p&gt;&lt;p&gt;Öncelik Gson kütüphanesi &lt;a href="http://code.google.com/p/google-gson/"&gt;http://code.google.com/p/google-gson/&lt;/a&gt; adresinden indiriyor ve projemizin classpath’ine ekliyoruz..&lt;/p&gt;&lt;p&gt;Hatırlayacağımız üzere dönen JSON nesnesi server tarafında RSOutputDTO.java sınıfına karşılık geliyor. Aynı sınıfı Android projemizede kopyalarak ilerliyoruz.&lt;/p&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-LmK-lTkihng/TkfPJ7f2bgI/AAAAAAAAAFc/-qbHjM6xE0w/s1600/4.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="271" width="279" src="http://3.bp.blogspot.com/-LmK-lTkihng/TkfPJ7f2bgI/AAAAAAAAAFc/-qbHjM6xE0w/s400/4.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Gson sınıfı yardımıyla dönen JSON nesnesini RSOutputDTO nesnesine dönüştürerek örneği tamamlıyoruz.&lt;/p&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 574px; padding-right: 5px; height: 143px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;Gson gson = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; GsonBuilder().create();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;RSOutputDTO result = gson.fromJson(jsonResult.toString(), RSOutputDTO.&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;userName.setText(result.getUserName());&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;userAge.setText(Integer.toString(result.getUserAge()));&lt;/pre&gt;&lt;/pre&gt;&lt;p&gt;Herkese kolay gelsin.&lt;/p&gt;&lt;p&gt;Eclipse projesi : &lt;a title="http://db.tt/NoHiJ30" href="http://db.tt/NoHiJ30"&gt;http://db.tt/NoHiJ30&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8581647651155012352-1598339143577824123?l=emrahkocaman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emrahkocaman.blogspot.com/feeds/1598339143577824123/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://emrahkocaman.blogspot.com/2011/08/restful-web-servis-clientandroid.html#comment-form' title='1 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581647651155012352/posts/default/1598339143577824123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581647651155012352/posts/default/1598339143577824123'/><link rel='alternate' type='text/html' href='http://emrahkocaman.blogspot.com/2011/08/restful-web-servis-clientandroid.html' title='RESTful Web Servis Client–Android'/><author><name>Emrah KOCAMAN</name><uri>http://www.blogger.com/profile/02255228002317362652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-qcD_6stcpfE/TkfOYf33kII/AAAAAAAAAFE/voLVUiHHYII/s72-c/1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581647651155012352.post-4178448593391185145</id><published>2011-08-07T18:55:00.002+03:00</published><updated>2011-08-07T19:25:15.473+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSON'/><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><category scheme='http://www.blogger.com/atom/ns#' term='Jersey'/><category scheme='http://www.blogger.com/atom/ns#' term='JAX-RS'/><title type='text'>Hızlı Bir Başlangıç - RESTful Web Servisler (JAX-RS)</title><content type='html'>&lt;p&gt;Önce biraz teori;&lt;br /&gt;Kısaca REST,&amp;nbsp; tüm bilgilerin kendilerine has birer adrese yani URI (Uniform Resource Idetifier) ‘ye sahip olmasını öngören mimari yaklaşımdır. (Web üzerindeki linkleri buna örnek olarak verebiliriz).&lt;br /&gt;RESTful Web servisler ise REST mimarisini temel alarak geliştirilen web servislerdir yani SOAP yaklaşımı ile web’den uzaklaşan web servislerin tekrar web ile buluşmasıdır. RESTful tasarlanan web servisler web üzerindeki linklere dönüşmüşlerdir ve client ile server arasındaki iletişim stateless bir iletişim protokolü (genellikle HTTP) üzerinden sağlanır.&lt;br /&gt;RESTful Web servislerin Java dünyasındaki standartları JAX-RS spesifikasyonu ile çizilmiştir. &lt;br /&gt;Bu kadar teoriden sonra RESTful Web servislerin nasıl çalıştığını bir örnek üzerinden inceleyelim.&lt;br /&gt;Not: Örnek için geliştirme ortamı olarak &lt;a href="http://www.eclipse.org/downloads/"&gt;Eclipse&lt;/a&gt; (mümkünse Maven plugin’i kurulmuş) ile devam edeceğim. Maven kullanmak istemeyenler gerekli kütüphaneleri kendileri eklemek durumunda.&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;1) Proje oluşturulması&lt;/h2&gt;&lt;p&gt;Öncelikle işe bir maven web projesi oluşturarak başlıyoruz. Projemizin adı “restfulwssample” olsun.&lt;br /&gt;Bunun için File –&amp;gt; New –&amp;gt; Others –&amp;gt; Maven Project yolunu izliyoruz. Bu aşamada Maven kullanmak istemiyorsanız yada daha sonra aktif hale getirmek isterseniz “Dynamic Web Project” seçeneği ile ilerleyebilirsiniz.&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-MTGBU3zfaHg/Tj67WRGYIXI/AAAAAAAAADk/FYo6k7Q07ZM/s1600/image_thumb1.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="234" width="320" src="http://2.bp.blogspot.com/-MTGBU3zfaHg/Tj67WRGYIXI/AAAAAAAAADk/FYo6k7Q07ZM/s320/image_thumb1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Sonraki ekranda “Maven Project” seçeneği ile devam ediyoruz.&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-CXBmRnnYwNg/Tj67v_gwcbI/AAAAAAAAADs/ccoor6JDAp8/s1600/image2.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="305" width="320" src="http://4.bp.blogspot.com/-CXBmRnnYwNg/Tj67v_gwcbI/AAAAAAAAADs/ccoor6JDAp8/s320/image2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Sonrasında “Next” tuşlarıyla ilerleyip archetype seçim ekranı geldiğinde “maven-archetype-webapp” seçeneği ile ilerliyoruz.&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-_8BhzTlfVV8/Tj6717hYqxI/AAAAAAAAAD0/gKebtQNuENo/s1600/image3.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="244" width="320" src="http://4.bp.blogspot.com/-_8BhzTlfVV8/Tj6717hYqxI/AAAAAAAAAD0/gKebtQNuENo/s320/image3.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Sonraki ekrandaki bilgiler tamamen size kalmış, bu bilgileride doldurduktan sonra “Finish” butonu ile web projemizin taslağını oluşturmuş oluyoruz.&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-TXF1fspKNtM/Tj679ALja8I/AAAAAAAAAD8/h72nW-9chXc/s1600/image4.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="244" width="320" src="http://4.bp.blogspot.com/-TXF1fspKNtM/Tj679ALja8I/AAAAAAAAAD8/h72nW-9chXc/s320/image4.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Projemizin aşağıdaki gibi görünmesi gerekiyor.&lt;br /&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Vg7FMRDPhik/Tj68CSMdzwI/AAAAAAAAAEE/xZqaNKOS54A/s1600/image5.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="264" width="320" src="http://3.bp.blogspot.com/-Vg7FMRDPhik/Tj68CSMdzwI/AAAAAAAAAEE/xZqaNKOS54A/s320/image5.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Projemiz hazır. RESTful web servisler hazırlamamız için önmüzdeki tek engel RESTful Web servis için kullanılacak kütüphaneyi bulmamız. Ben bu örnekte &lt;a href="http://jersey.java.net/"&gt;Jersey&lt;/a&gt; kütüphanesi kullanacağım. JAX-RS spesifikasyonu için referans implementasyon olmasının yanı sıra production ortamlarında da kullanılabilecek olgunluğa sahip olduğu için Jersey’i tercih ettim. Projemizde Jersey kullanabilmek için pom.xml’e aşağıdaki satırları eklememiz yeterli olacaktır.&lt;br /&gt;&lt;/p&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 586px; padding-right: 5px; height: 245px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;repositories&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;repository&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;maven2-repository.java.net&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Java.net Repository for Maven&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;url&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;http://download.java.net/maven/2/&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;url&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;layout&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;default&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;layout&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;repository&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt; &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;repository&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;maven-repository.java.net&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Java.net Maven 1 Repository (legacy)&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;url&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;http://download.java.net/maven/1&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;url&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;layout&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;legacy&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;layout&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;repository&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;repositories&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;dependencies&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;dependency&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;groupId&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;com.sun.jersey&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;groupId&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;artifactId&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;jersey-server&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;artifactId&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;version&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;1.6&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;version&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;dependency&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;dependency&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;groupId&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;com.sun.jersey&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;groupId&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;artifactId&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;jersey-json&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;artifactId&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;version&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;1.6&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;version&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;dependency&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;dependencies&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;Not: Jersey kullanarak text/html, xml, json gibi farklı yöntemler kullanarak haberleşen web servisler tasarlanması mümkün. Ben örnekte JSON kullanacağım için onunla ilgili dependency’i ekledim. Detalı bilgi için &lt;a href="http://jersey.java.net/nonav/documentation/latest/user-guide.html"&gt;http://jersey.java.net/nonav/documentation/latest/user-guide.html&lt;/a&gt; adresine göz atmanızda fayda var.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;2) Biraz kod görelim&lt;/h2&gt;&lt;br /&gt;Örneğimiz için iki sınıf kullacağız. Bunlardan biri RESTful web servisi barındıran sınıf (RSWebServices.java) diğeri ise bu servisin çıktısını temsil eden veri transfer sınıfı (RSOutputDTO.java)&lt;br /&gt;&lt;br /&gt;Sınıfları aşağıdaki paket yapısında oluşturalım.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-eH4-N-564Xg/Tj68MmYHIRI/AAAAAAAAAEM/t-L1EIUHa-g/s1600/image6.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="284" width="320" src="http://2.bp.blogspot.com/-eH4-N-564Xg/Tj68MmYHIRI/AAAAAAAAAEM/t-L1EIUHa-g/s320/image6.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;RSOutputDTO.java&lt;/h5&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 587px; padding-right: 5px; height: 466px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;package&lt;/span&gt; com.blogspot.emrahkocaman.restfulws.json;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; RSOutputDTO {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;private&lt;/span&gt; String userName;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;private&lt;/span&gt; &lt;span style="color: blue"&gt;int&lt;/span&gt; userAge;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; setUserName(String userName) {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;.userName = userName;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; String getUserName() {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;return&lt;/span&gt; userName;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; setUserAge(&lt;span style="color: blue"&gt;int&lt;/span&gt; userAge) {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;this&lt;/span&gt;.userAge = userAge;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;int&lt;/span&gt; getUserAge() {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;return&lt;/span&gt; userAge;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;Bu sınıf web servisimizin üreteceği çıktıyı temsil eden basit bir java sınıfı namı diğer POJO.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;RSWebServices.java&lt;/h5&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 604px; padding-right: 5px; height: 514px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;package&lt;/span&gt; com.blogspot.emrahkocaman.restfulws.ws;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;import&lt;/span&gt; javax.ws.rs.GET;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;import&lt;/span&gt; javax.ws.rs.Path;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;import&lt;/span&gt; javax.ws.rs.Produces;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;import&lt;/span&gt; javax.ws.rs.core.MediaType;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;import&lt;/span&gt; com.blogspot.emrahkocaman.restfulws.json.RSOutputDTO;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;@Path("&lt;span style="color: darkred"&gt;/examples&lt;/span&gt;")&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; RSWebServices {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;@GET&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;@Path("&lt;span style="color: darkred"&gt;/getUserInfo&lt;/span&gt;")&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;@Produces(MediaType.APPLICATION_JSON)&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; RSOutputDTO getUserInfo() {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;RSOutputDTO out = &lt;span style="color: blue"&gt;new&lt;/span&gt; RSOutputDTO();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;out.setUserAge(30);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;out.setUserName("&lt;span style="color: darkred"&gt;Kamil&lt;/span&gt;");&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;return&lt;/span&gt; out;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;}&lt;/pre&gt;&lt;br /&gt;Web servisimiz bu sınıftan ibaret. SOAP mimarisindekinin aksine xml konfigürasyonları ve xsd’ler ile boğuşmak zorunda değiliz. Doğrudan hedefe yapılan bir atış.&lt;br /&gt;&lt;br /&gt;@Path: Sınıf tanımının üzerindeki annotation, web servise ulaşacağımız kök tanımı. Method üzerindeki ise methoda ulaşacağımız tanım. Yani web servis adresimiz &lt;a href="http://server:port/examples/getUserInfo"&gt;http://server:port/examples/getUserInfo&lt;/a&gt; gibi bir adres olacak. &lt;br /&gt;&lt;br /&gt;@GET: RESTful web servisler HTTP protokülü üzerinden haberleşirler sonuç olarak HTTP operasyonlarına karşılık gelecek annotationlar ile kullanılırlar (&lt;a href="http://jsr311.java.net/nonav/releases/1.1/javax/ws/rs/GET.html"&gt;@GET&lt;/a&gt;, &lt;a href="http://jsr311.java.net/nonav/releases/1.1/javax/ws/rs/PUT.html"&gt;@PUT&lt;/a&gt;, &lt;a href="http://jsr311.java.net/nonav/releases/1.1/javax/ws/rs/POST.html"&gt;@POST&lt;/a&gt;, &lt;a href="http://jsr311.java.net/nonav/releases/1.1/javax/ws/rs/DELETE.html"&gt;@DELETE&lt;/a&gt; and &lt;a href="http://jsr311.java.net/nonav/releases/1.1/javax/ws/rs/HEAD.html"&gt;@HEAD&lt;/a&gt; gibi). Bizim servisimizin GET isteklerine cevap vereceğini işaretliyoruz.&lt;br /&gt;&lt;br /&gt;@Produces: RESTful web servisin çıktısının hangi türde olacağı bu annotation ile belirtilir. Biz örneğimizde JSON kullanıyoruz. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;3) Son rötüşlar&lt;/h4&gt;&lt;br /&gt;RESTful web servisimizi dünyaya açmanın zamanı geldi. Öncelikle Jersey servletini ayağa kaldırmamız gerekiyor.&lt;br /&gt;&lt;br /&gt;Bunun için web.xml’e aşağıdaki satırları ekyelim.&lt;br /&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 594px; padding-right: 5px; height: 480px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;?&lt;/span&gt;xml version="1.0" encoding="UTF-8"&lt;span style="color: blue"&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;web&lt;/span&gt;-&lt;span style="color: red"&gt;app&lt;/span&gt; &lt;span style="color: red"&gt;xmlns&lt;/span&gt;:&lt;span style="color: red"&gt;xsi&lt;/span&gt;=&lt;span style="color: blue"&gt;"http://www.w3.org/2001/XMLSchema-instance"&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: red"&gt;xmlns&lt;/span&gt;=&lt;span style="color: blue"&gt;"http://java.sun.com/xml/ns/javaee"&lt;/span&gt; &lt;span style="color: red"&gt;xmlns&lt;/span&gt;:&lt;span style="color: red"&gt;web&lt;/span&gt;=&lt;span style="color: blue"&gt;"http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: red"&gt;xsi&lt;/span&gt;:&lt;span style="color: red"&gt;schemaLocation&lt;/span&gt;=&lt;span style="color: blue"&gt;"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: red"&gt;id&lt;/span&gt;=&lt;span style="color: blue"&gt;"WebApp_ID"&lt;/span&gt; &lt;span style="color: red"&gt;version&lt;/span&gt;=&lt;span style="color: blue"&gt;"2.5"&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;display&lt;/span&gt;-&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;restfulwssample&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;display&lt;/span&gt;-name&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;servlet&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;servlet&lt;/span&gt;-&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Jersey Web Application&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;servlet&lt;/span&gt;-name&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;servlet&lt;/span&gt;-&lt;span style="color: red"&gt;class&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;com.sun.jersey.spi.container.servlet.ServletContainer&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;servlet&lt;/span&gt;-class&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;init&lt;/span&gt;-&lt;span style="color: red"&gt;param&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;param&lt;/span&gt;-&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;com.sun.jersey.config.property.packages&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;param&lt;/span&gt;-name&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;param&lt;/span&gt;-&lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;com.blogspot.emrahkocaman.restfulws.ws&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;param&lt;/span&gt;-value&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;init&lt;/span&gt;-param&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;init&lt;/span&gt;-&lt;span style="color: red"&gt;param&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;param&lt;/span&gt;-&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;com.sun.jersey.api.json.POJOMappingFeature&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;param&lt;/span&gt;-name&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;param&lt;/span&gt;-&lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;true&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;param&lt;/span&gt;-value&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;init&lt;/span&gt;-param&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;load&lt;/span&gt;-&lt;span style="color: red"&gt;on&lt;/span&gt;-&lt;span style="color: red"&gt;startup&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;1&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;load&lt;/span&gt;-on-startup&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;servlet&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;servlet&lt;/span&gt;-&lt;span style="color: red"&gt;mapping&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;servlet&lt;/span&gt;-&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Jersey Web Application&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;servlet&lt;/span&gt;-name&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;url&lt;/span&gt;-&lt;span style="color: red"&gt;pattern&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;/rest/*&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;url&lt;/span&gt;-pattern&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;servlet&lt;/span&gt;-mapping&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;web&lt;/span&gt;-app&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;Servlet’in aldığı parametrelerden com.sun.jersey.config.property.packages parametresi hangi paketin altındaki sınıfların web servis olarak açılacağını belirtiyor.&lt;br /&gt;&lt;br /&gt;com.sun.jersey.api.json.POJOMappingFeature parametresini “true” olarak set ederek ise POJO’larımız &lt;a href="http://jackson.codehaus.org/"&gt;jackson&lt;/a&gt; kütüphanesi kullanılarak Jersey tarafından otomatik olarak JSON’a dönüştürülüyor.&lt;br /&gt;&lt;br /&gt;Web projemizi sunucumuza deploy ettikten sonra,&lt;br /&gt;&lt;br /&gt;&lt;a title="http://localhost:8080/restfulwssample/rest/examples/getUserInfo" href="http://localhost:8080/restfulwssample/rest/examples/getUserInfo"&gt;http://localhost:8080/restfulwssample/rest/examples/getUserInfo&lt;/a&gt; adresini browser’a girdiğimiz zaman restful web servisimize ulaşmış olacağız. Bize dönen JSON nesnesini bir text editör ile açtığımızda içeriğinin aşağıdaki gibi olması gerekiyor.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;{"userName":"Kamil","userAge":30}&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Bundan sonra RESTful ile yapabilecekleriniz size kalmış. Ama bence web servis yazmak hiç bu kadar kolay olmamıştı.&lt;br /&gt;&lt;br /&gt;Bir sonraki yazımda hazırladığımız RESTful web servis için bir Android istemci yazıyor olacağız.&lt;br /&gt;&lt;br /&gt;Herkese iyi çalışmalar.&lt;br /&gt;&lt;br /&gt;Eclipse Projesi : &lt;a title="http://db.tt/PCS4UrX" href="http://db.tt/PCS4UrX"&gt;http://db.tt/PCS4UrX&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8581647651155012352-4178448593391185145?l=emrahkocaman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emrahkocaman.blogspot.com/feeds/4178448593391185145/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://emrahkocaman.blogspot.com/2011/08/hzl-bir-baslangc-restful-web-servisler.html#comment-form' title='2 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581647651155012352/posts/default/4178448593391185145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581647651155012352/posts/default/4178448593391185145'/><link rel='alternate' type='text/html' href='http://emrahkocaman.blogspot.com/2011/08/hzl-bir-baslangc-restful-web-servisler.html' title='Hızlı Bir Başlangıç - RESTful Web Servisler (JAX-RS)'/><author><name>Emrah KOCAMAN</name><uri>http://www.blogger.com/profile/02255228002317362652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-MTGBU3zfaHg/Tj67WRGYIXI/AAAAAAAAADk/FYo6k7Q07ZM/s72-c/image_thumb1.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581647651155012352.post-7055120252739776887</id><published>2011-01-16T20:34:00.003+02:00</published><updated>2011-01-16T20:46:47.228+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GlassFish'/><category scheme='http://www.blogger.com/atom/ns#' term='EJB'/><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><title type='text'>GlassFish Maven Repository</title><content type='html'>EJB 3.1 ile uğraşırken implementasyon olarak glassfish'i seçeyim dedim. (Bu aralar referans implementasyonlara sardım).&lt;br /&gt;&lt;br /&gt;Tam ilgili dependency'yi eklemiştim ki tahmin ettiğim şey yine başıma geldi ilgili artifact merkezi maven repository'sinde yine yoktu. Bana da java.net maven repository'sini listeye eklemek düştü.&lt;br /&gt;&lt;br /&gt;Not : java.net repository'si her ne kadar öğrenme sürecinde yada ev kullanımı için yeterli olsada profesyonel hayatta kullanmak uygun değil çünkü her an kullandığınız artifact kaldırılabilir. Bunun için "Nexus" veya muadili bir repository yöneticisi ile bağımlı olduğunuz kütüphanleri cache'lemeniz gerekiyor.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;GlassFish EJB 3.1 Artifact&lt;/b&gt;&lt;br /&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;groupId&amp;gt;org.glassfish&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;artifactId&amp;gt;javax.ejb&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;version&amp;gt;3.1-b37&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Java.Net GlassFish Maven Repository&lt;/b&gt;&lt;br /&gt;&amp;lt;repository&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;id&amp;gt;glassfish&amp;lt;/id&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;name&amp;gt;Glassfish Maven Repo&amp;lt;/name&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;url&amp;gt;http://download.java.net/maven/glassfish&amp;lt;/url&amp;gt;&lt;br /&gt;&amp;lt;/repository&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8581647651155012352-7055120252739776887?l=emrahkocaman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emrahkocaman.blogspot.com/feeds/7055120252739776887/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://emrahkocaman.blogspot.com/2011/01/glassfish-maven-repository.html#comment-form' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581647651155012352/posts/default/7055120252739776887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581647651155012352/posts/default/7055120252739776887'/><link rel='alternate' type='text/html' href='http://emrahkocaman.blogspot.com/2011/01/glassfish-maven-repository.html' title='GlassFish Maven Repository'/><author><name>Emrah KOCAMAN</name><uri>http://www.blogger.com/profile/02255228002317362652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581647651155012352.post-344888538002853239</id><published>2011-01-09T19:20:00.004+02:00</published><updated>2011-01-16T20:46:03.168+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><category scheme='http://www.blogger.com/atom/ns#' term='JPA 2'/><category scheme='http://www.blogger.com/atom/ns#' term='EclipseLink'/><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><category scheme='http://www.blogger.com/atom/ns#' term='ORM'/><title type='text'>EclipseLink Maven Repository</title><content type='html'>Küçük Bir Not:&lt;br /&gt;&lt;br /&gt;JPA 2.0'ın referans implementasyonu olan EclipseLink 2.0 henüz merkezi maven repository'sinde bulunmuyor bu yüzden projenizde kullanmak istediğinizde "Artifact"in bulunamadığına dair bir hata ile karşılaşıyorsunuz.&lt;br /&gt;&lt;br /&gt;Aslında bu sadece EclipseLink'le ilgili bir problem değil, maven'in merkezi kütüphanesinin oldukça geç güncellendiği bir gerçek. &lt;br /&gt;&lt;br /&gt;Çözümü ise aşağıdaki şekilde EclipseLink repository'sini pom'unuza eklemekten geçiyor ve sonrasında EclipseLink 2.0 artifactlerini ekleyebilirsiniz.&lt;br /&gt;&lt;repositories&gt;&lt;repository&gt;&lt;url&gt;&lt;/url&gt;&lt;/repository&gt;&lt;/repositories&gt;&lt;br /&gt;&lt;repositories&gt;&lt;b&gt;EclipseLink Maven Repository&lt;/b&gt;&lt;/repositories&gt;&lt;br /&gt;&amp;lt;repositories&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;repository&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;id&amp;gt;EclipseLink Repo&amp;lt;/id&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;url&amp;gt;http://www.eclipse.org/downloads/download.php?r=1&amp;amp;nf=1&amp;amp;file=/rt/eclipselink/maven.repo&amp;lt;/url&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/repository&amp;gt;&lt;br /&gt;&amp;lt;/repositories&amp;gt; &lt;br /&gt;&lt;br /&gt;&lt;b&gt;EclipseLink JPA 2 API Artifact&lt;/b&gt;&lt;br /&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;org.eclipse.persistence&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;javax.persistence&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;2.0.0&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;lt;/dependency&amp;gt;&lt;b&gt; &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;EclipseLink JPA 2 Implementation&lt;/b&gt;&lt;br /&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;groupId&amp;gt;org.eclipse.persistence&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;artifactId&amp;gt;eclipselink&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;version&amp;gt;2.0.0&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;lt;/dependency&amp;gt;&lt;b&gt; &lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8581647651155012352-344888538002853239?l=emrahkocaman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emrahkocaman.blogspot.com/feeds/344888538002853239/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://emrahkocaman.blogspot.com/2011/01/eclipse-link-maven-repository.html#comment-form' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581647651155012352/posts/default/344888538002853239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581647651155012352/posts/default/344888538002853239'/><link rel='alternate' type='text/html' href='http://emrahkocaman.blogspot.com/2011/01/eclipse-link-maven-repository.html' title='EclipseLink Maven Repository'/><author><name>Emrah KOCAMAN</name><uri>http://www.blogger.com/profile/02255228002317362652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581647651155012352.post-7518292721071291978</id><published>2010-09-27T21:32:00.000+03:00</published><updated>2010-09-27T21:32:42.650+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SCJP'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='OCPJP'/><title type='text'>Yet another OCPJP</title><content type='html'>Eski adıyla Sun Certified Java Programmer (SCJP) olarak bilinen yeni adıyla Oracle Certified Professional Java Programmer (OCPJP) sertifika sınavını geçmenin vermiş olduğu iç huzur ile ve sizlerden gelen yoğun istek üzerine OCPJP tecrübelerimi bir yazıyla özetlemek istedim.&lt;br /&gt;&lt;br /&gt;Her şeyden önce sınav 60 sorudan oluşuyor ve başarılı olmak için 60 sorunun %58'ini yani 35 soruyu doğru olarak yanıtlamanız gerekiyor. Oran az gibi görünsede soruların ne kadar yanıltıcı olduğunu ve sınavda başarısız olanların sayısının hiç te azımsanamayacağını düşününce neden bu kadar düşük bir oran seçildiğini anlayacaksınız.&lt;br /&gt;&lt;br /&gt;Sınava kayıt olmak, sınava gireceğiniz yeri ve tarihi seçmek için &lt;a href="http://www.register.prometric.com/Index.asp"&gt;http://www.register.prometric.com/Index.asp&lt;/a&gt;&lt;br /&gt;adresini kullanmanız gerekiyor. Sitenin kullanımı oldukça kolay, kayıt aşamasında bir sorun yaşayacağınızı düşünmüyorum. Burada önemli olan iletişim bilgilerinizi doğru olarak girmek elbette, özelliklede sertifikasyon sonrası materyalleri alabilmek için tabiki.&amp;nbsp; 300$ olan sınav ücretini ise yine Prometric'in sayfası üzerinden kredi kartınız ile ödeyebilirsiniz. (Benimkini şirketim karşıladığı için şanslıydım elbette)&lt;br /&gt;&lt;br /&gt;Sınava hazırlanırken okuduğum tek kitap sınavın geliştiricilerinin hazırladığı&lt;br /&gt;&lt;a href="http://www.amazon.com/SCJP-Certified-Programmer-Java-310-065/dp/0071591060/ref=sr_1_1?s=gateway&amp;amp;ie=UTF8&amp;amp;qid=1285610888&amp;amp;sr=8-1#reader_0071591060"&gt;SCJP Sun Certified Programmer for Java 6 Exam&lt;/a&gt; isimli kitap oldu.&lt;br /&gt;&lt;br /&gt;Nacizhane tavsiyem&amp;nbsp; kitabı çok uzun bir aralığa yaymadan örneğin maksimum bir ay içinde okumanız sonraki bir yada maksimum iki hafta içinde örnek soru çözmeniz ve akabinde sınava girmeniz yönünde olacak. &lt;br /&gt;&lt;br /&gt;Sınavdaki soru türleri kitaptaki ile neredeyse bire bir aynı ama kitaptaki sorulara göre biraz daha kolay olduğunu söyleyebilirim.&lt;br /&gt;&lt;br /&gt;Kitaptaki örnek soruların dışnda tam bir sınav deneyimi yaşamak için&lt;br /&gt;&lt;a href="http://osborne.onlineexpert.com/elearning/"&gt;http://osborne.onlineexpert.com/elearning/&lt;/a&gt;&lt;br /&gt;sitesine ücretsiz kayıt olduktan sonra "Free Master Exam" linki üzerinden ücretsiz olarak 3 master sınav içeren programı indirebilirsiniz. Sınav sonucunda hatalı sorularınızı açıklamalı cevapları ile birlikte rapor olarak alabilmenizede olanak sağyalan bu program sınavda sürprizlerle karşılaşma olasığınızı oldukça düşürecektir.&lt;br /&gt;&lt;br /&gt;Tavsiye edebileceğim bir diğer önemli kaynak ise yine ücretsiz olan&lt;br /&gt;&lt;a href="http://scjptest.com/"&gt;http://scjptest.com/&lt;/a&gt;. Buradaki sorularla bire bir aynı olan iki sorunun sınavda karşıma çıktığını özellikle belirtmek isterim.&lt;br /&gt;&lt;br /&gt;Son olarak tavsiye edebileceğim diğer bir ücretsiz kaynak ise &lt;a href="http://examlab.tk/"&gt;http://examlab.tk/&lt;/a&gt; . Buradaki sınav programınıda indirerek kullanmanız mümkün.&lt;br /&gt;&lt;b&gt;Küçük bir not :&lt;/b&gt; Windows 7 üzerinde "Yönetici olarak çalıştır" seçeneğini kullanmanız şiddetle tavsiye ediler, sınavın ortasında aniden kapanabiliyor.&lt;br /&gt;&lt;br /&gt;Özet&amp;nbsp; olarak sınavı geçmek için kitabı baştan sona (tek bir satır bile atlamadan) okumak, kitaptaki örnek soruları çözmek yeterli olacaktır. Yüksek not almak içinse tabiki yukardaki örnek sınavları çözmeniz çok önemli.&lt;br /&gt;&lt;br /&gt;Son olarak sınav süresi 180 dakika ve fazlasıyla yeterli. &lt;br /&gt;&lt;br /&gt;Hepinize başarılar.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8581647651155012352-7518292721071291978?l=emrahkocaman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emrahkocaman.blogspot.com/feeds/7518292721071291978/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://emrahkocaman.blogspot.com/2010/09/yet-another-ocpjp.html#comment-form' title='5 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581647651155012352/posts/default/7518292721071291978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581647651155012352/posts/default/7518292721071291978'/><link rel='alternate' type='text/html' href='http://emrahkocaman.blogspot.com/2010/09/yet-another-ocpjp.html' title='Yet another OCPJP'/><author><name>Emrah KOCAMAN</name><uri>http://www.blogger.com/profile/02255228002317362652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581647651155012352.post-7043542639727301909</id><published>2010-08-13T21:51:00.000+03:00</published><updated>2010-08-13T21:51:11.084+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xsd'/><category scheme='http://www.blogger.com/atom/ns#' term='schema'/><category scheme='http://www.blogger.com/atom/ns#' term='spring-ws'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><title type='text'>Schema name conflict in collection</title><content type='html'>Bugün Spring WS(web servis) ile uğraşırken başlıktaki hata ile karşılaştım. Hatanın tam metni şöyle;&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="background-color: #6fa8dc; color: black;"&gt;org.springframework.xml.xsd.commons.CommonsXsdSchemaException: Schema [ServletContext resource [/WEB-INF/schemas/ext_schema.xsd]] could not be loaded; nested exception is org.apache.ws.commons.schema.XmlSchemaException: Schema name conflict in collection. Namespace: urn:com.company.test&lt;/blockquote&gt;&lt;br /&gt;Hata ilk bakışta xsd(xml schema definition) dosyamızdaki namespace ile ilgili görünsede hatanın asıl sebebi çok daha farklı ve basit. &lt;br /&gt;&lt;br /&gt;Spring WS xsd dosyalarımızı yüklerken konfigürasyon dosyasında belirtilen sıra ile yüklüyor ve eğer yüklemeye çalıştığı schema, henüz yüklenmemiş bir schema'yı import ediyorsa yükleme işlemi böyle bir hata ile sonlanıyor.&lt;br /&gt;&lt;br /&gt;Bu yüzden konfigürasyon dosyanızda import edilen bir schema'nın, import eden schema'dan önce tanımlanmasına dikkat etmeniz gerekiyor.&lt;br /&gt;&lt;br /&gt;i.e.&lt;br /&gt;&lt;blockquote&gt;&lt;value&gt;classpath:/com/company/test/Base.xsd&lt;/value&gt;&lt;br /&gt;&lt;value&gt;classpath:/com/company/test/ImportsBase.xsd&lt;/value&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8581647651155012352-7043542639727301909?l=emrahkocaman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emrahkocaman.blogspot.com/feeds/7043542639727301909/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://emrahkocaman.blogspot.com/2010/08/schema-name-conflict-in-collection.html#comment-form' title='2 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581647651155012352/posts/default/7043542639727301909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581647651155012352/posts/default/7043542639727301909'/><link rel='alternate' type='text/html' href='http://emrahkocaman.blogspot.com/2010/08/schema-name-conflict-in-collection.html' title='Schema name conflict in collection'/><author><name>Emrah KOCAMAN</name><uri>http://www.blogger.com/profile/02255228002317362652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581647651155012352.post-2130569373638041361</id><published>2009-10-27T22:20:00.005+02:00</published><updated>2009-10-27T23:17:52.075+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DB'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='ResultSet'/><title type='text'>Java ResultSet'te neden satır sayısı bilgisi yok?</title><content type='html'>Merhabalar,&lt;br /&gt;&lt;br /&gt;Bir çok yerde de tartışma konusu olduğu üzere &lt;a href="http://java.sun.com/javase/6/docs/api/java/sql/ResultSet.html"&gt;java.sql.ResultSet&lt;/a&gt; sınıfı bünyesinde doğrudan satır sayısına ulaşabileceğimiz bir method barındırmıyor sebebi ise ;&lt;br /&gt;&lt;br /&gt;100bin kayıt içeren bir tablo düşünün. Bu tabloya hiç bir kriteri olmayan bir sorgu gönderdiğinizde dönecek 100bin kayıtı RAM'de tutmak çokta akıl karı bir iş olmasa gerek ayrıca network'te yük oluşturduğunuzuda unutmayın. Bu yüzden bu kayıtlar belli gruplar halinde getirilirler (fetch) yani ResultSet objemizin kayıtların sayısı hakkında bir fikri yoktur. Veritabanı editörlerinde de bunu fark etmişsinizdir. Tablolardaki veriler siz tabloyu scroll ettikçe fetch edilirler. Tüm veriyi aynı anda getirmek performans darboğazları yaratabileceği gibi çoğu zamanda (%99) gereksizdir.&lt;br /&gt;&lt;br /&gt;Satır sayısı bilgisinin gerekliliğine gelince. Bugüne kadar yazdığım hiçbir programda bu bilgiye ihtiyacım olmadı desem yalan söylemiş sayılmam ama bu bilgi benim için elzem diyorsanız gezilebilir (Scrollable) ResultSet kullanarak bu bilgiyi elde edebilirsiniz. Scrollable olmayan durumlarda ise &lt;a href="http://en.wikipedia.org/wiki/Cursor_%28databases%29"&gt;Cursor&lt;/a&gt; tek yönlü olacağından ResultSet'te gezinmeye başladığınızda [myRS.next()] bir önceki kayıta dönmeniz mümkün olmayacaktır. ResultSet'ten satır sayısını bulabileceğimiz bir örnekle konuyu kapatalım,&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR _READ_ONLY);&lt;br /&gt;&lt;br /&gt;ResultSet rs = stmt.executeQuery(query);&lt;br /&gt;&lt;br /&gt;int probablyUselessRecordCount = 0;&lt;br /&gt;if (rs != null) {       &lt;br /&gt;    &lt;blockquote&gt;rs.last();   // cursor'u sona ilerlet&lt;br /&gt;    probablyUselessRecordCount = rs.getRow(); //satır sayısını al&lt;br /&gt;    rs.beforeFirst();// ResultSet'te gezinmek için cursor'u başa al&lt;/blockquote&gt;&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8581647651155012352-2130569373638041361?l=emrahkocaman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emrahkocaman.blogspot.com/feeds/2130569373638041361/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://emrahkocaman.blogspot.com/2009/10/java-resultsette-neden-satr-says.html#comment-form' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581647651155012352/posts/default/2130569373638041361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581647651155012352/posts/default/2130569373638041361'/><link rel='alternate' type='text/html' href='http://emrahkocaman.blogspot.com/2009/10/java-resultsette-neden-satr-says.html' title='Java ResultSet&apos;te neden satır sayısı bilgisi yok?'/><author><name>Emrah KOCAMAN</name><uri>http://www.blogger.com/profile/02255228002317362652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581647651155012352.post-1307437274920665832</id><published>2009-08-05T20:58:00.003+03:00</published><updated>2009-08-05T23:06:32.312+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vfs'/><category scheme='http://www.blogger.com/atom/ns#' term='commons'/><category scheme='http://www.blogger.com/atom/ns#' term='SFTP'/><title type='text'>Could not find files...</title><content type='html'>Bir önceki yazımdakine benzer bir kodu PROD. ortamında kullanılırken şöyle bir hatayla karşılaştım.&lt;br /&gt;&lt;br /&gt;Could not files in sftp://SFTP_SERVER_PATH&lt;br /&gt;&lt;br /&gt;İlgili sunucuda dosya bulunmasına rağmen ve daha yarım saat önce bu sunucudan download işlemi yapabilirken bir anda bu hata mesajı ile karşılaştım. Konuyu biraz araştırdığımda, sorunun beklenmedik bir biçimde sonlanan SFTP sunucularına tekrar bağlantı sağlanmaya çalışıldığında oluştuğunu gördüm.&lt;br /&gt;&lt;br /&gt;commons-vfs geliştiricilerine bug olarak iletilen bu sorunun geçici çözümü ise &lt;br /&gt;&lt;br /&gt;public static DefaultFileSystemManager fsManager = null; &lt;br /&gt;&lt;br /&gt;satırını aşağıdaki gibi değiştirmek,&lt;br /&gt;&lt;br /&gt;public StandartFileSystemManager fsManager = new StandartFileSystemManager();&lt;br /&gt;&lt;br /&gt;try {&lt;br /&gt;   fsManager.init();&lt;br /&gt;} finally {&lt;br /&gt;   fsManager.close;&lt;br /&gt;   fsManager = null; //mark for garbage collection&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;İyi çalışmalar...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8581647651155012352-1307437274920665832?l=emrahkocaman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emrahkocaman.blogspot.com/feeds/1307437274920665832/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://emrahkocaman.blogspot.com/2009/08/could-not-find-files.html#comment-form' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581647651155012352/posts/default/1307437274920665832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581647651155012352/posts/default/1307437274920665832'/><link rel='alternate' type='text/html' href='http://emrahkocaman.blogspot.com/2009/08/could-not-find-files.html' title='Could not find files...'/><author><name>Emrah KOCAMAN</name><uri>http://www.blogger.com/profile/02255228002317362652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581647651155012352.post-2411406393961090337</id><published>2009-06-16T22:36:00.003+03:00</published><updated>2009-06-16T23:26:07.438+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='download'/><category scheme='http://www.blogger.com/atom/ns#' term='vfs'/><category scheme='http://www.blogger.com/atom/ns#' term='commons'/><category scheme='http://www.blogger.com/atom/ns#' term='SFTP'/><title type='text'>SFTP sunucudan dosya indirme</title><content type='html'>Merhabalar,&lt;br /&gt;&lt;br /&gt;Kullandığımız sistemlerin dış sistemlerle iletişimi elbette çok büyük önem taşıyor. Tabiki iletişim sistemler arası iletişim stored procedure'lardan web servislere farklı teknolojileri kapsıyor. Ben bugün farklı bir sistemden SFTP protokolünü kullanarak dosya indirme işlemini nasıl gerçekleştireceğimiz konusunda bir örnek vermek istiyorum.&lt;br /&gt;&lt;br /&gt;Örneğimizde kullanacağımız kütüphane commons-vfs-1.0. Commons VFS (Virtual File System), adında anlaşılacağı gibi bir dosya sistemi yöneticisi FTP,SFTP, HTTP,HTTPS, RAM, MIME gibi çok farklı dosya sistemlerini desteklemekte. Fakat birazdan örneklendireceğimiz SFTP protokolü için jsch-0.1.41 kütüphanesine ihtiyaç duyuyor.&lt;br /&gt;Ayrıca aşağıdaki örnekte bağlantı cümlesindeki SFTP kelimesini FTP ile değiştirmeniz FTP sunucudan dosya almanız için yeterli.&lt;br /&gt;&lt;br /&gt;Commons VFS kütüphanesi kullanırken dikkat edilmesi gereken en kritik nokta DefaultFileSystemManager'ın tekrar kullanılmayacağından emin olunmadığı sürece kapatılmaması. Çünkü DefaultFileSystemManager'ın kapatılması durumunda JVM yada uygulama sunucu tekrar başlatılana kadar kullanılamaz hale geliyor. Ayrıca bir JVM sadece bir DefaultFileSystemManager içerebileceğinden static olarak kullanmakta fayda var.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;import java.io.BufferedInputStream;&lt;br /&gt;import java.io.File;&lt;br /&gt;import java.io.FileOutputStream;&lt;br /&gt;&lt;br /&gt;import org.apache.commons.io.FileUtils;  //from commons-io&lt;br /&gt;import org.apache.commons.net.ftp.FTPClient;&lt;br /&gt;import org.apache.commons.vfs.CacheStrategy;&lt;br /&gt;import org.apache.commons.vfs.FileObject;&lt;br /&gt;import org.apache.commons.vfs.FileSystemOptions;&lt;br /&gt;import org.apache.commons.vfs.Selectors;&lt;br /&gt;import org.apache.commons.vfs.VFS;&lt;br /&gt;import org.apache.commons.vfs.impl.DefaultFileSystemManager;&lt;br /&gt;import org.apache.commons.vfs.provider.sftp.SftpFileSystemConfigBuilder;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class FileDownloader {&lt;br /&gt;	&lt;br /&gt;        //Should be static and should not be forced to close.&lt;br /&gt;	public static DefaultFileSystemManager fsManager = null;  &lt;br /&gt;	&lt;br /&gt;	static {&lt;br /&gt;		try {&lt;br /&gt;			&lt;br /&gt;			fsManager = (DefaultFileSystemManager) VFS.getManager();&lt;br /&gt;                        //Refer to API for further info&lt;br /&gt;			fsManager.setCacheStrategy(CacheStrategy.ON_RESOLVE);      &lt;br /&gt;		} catch(Exception ex) {&lt;br /&gt;			System.out.println(ex.getMessage());&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;	 &lt;br /&gt;	 public static void downloadUsingSFTP() throws Exception {&lt;br /&gt;		 &lt;br /&gt;		 String destinationFolder = "YOUR_DESTINATION_FOLDER";&lt;br /&gt;		 String userName = "USER_NAME";&lt;br /&gt;		 String pass = "PASSWORD";&lt;br /&gt;		 String serverIP  = "SERVER_IP";&lt;br /&gt;		 String serverPath = "DEST_FOLDER"; //Relative to user root directory&lt;br /&gt;		 try {&lt;br /&gt;			 &lt;br /&gt;			FileSystemOptions fsOptions = new FileSystemOptions();&lt;br /&gt;//we wont check any keys		    SftpFileSystemConfigBuilder.getInstance().setStrictHostKeyChecking(fsOptions, "no"); &lt;br /&gt;&lt;br /&gt; //Set user dir as root		    SftpFileSystemConfigBuilder.getInstance().setUserDirIsRoot(fsOptions, true); &lt;br /&gt;		    StringBuffer uri = new StringBuffer();&lt;br /&gt;		    uri.append("sftp://" + userName + ":" + pass + "@" + serverIP + "/" + serverPath);&lt;br /&gt;			&lt;br /&gt;		    System.out.println("Connection string : " + uri.toString());&lt;br /&gt;		    FileObject fo = fsManager.resolveFile(uri.toString(), fsOptions); &lt;br /&gt;	    	FileObject[] foArray = fo.findFiles(Selectors.SELECT_FILES); //Just list files under destFolder. check api for other options&lt;br /&gt;	    	&lt;br /&gt;	    	if(foArray == null || foArray.length == 0) {&lt;br /&gt;	    		throw new Exception("No files to download.");&lt;br /&gt;	    	}&lt;br /&gt;	    	&lt;br /&gt;	    	logger.info("Number of files listed : " + foArray.length);&lt;br /&gt;	    	String[] files = new String[foArray.length]; &lt;br /&gt;	    	&lt;br /&gt;	    	for( int i = 0; i &lt; foArray.length; i++ ) {&lt;br /&gt;	    		files[i] = FilenameUtils.getName(foArray[i].getName().getPath());&lt;br /&gt;	    	}&lt;br /&gt;	  &lt;br /&gt;	    	File folder = new File(destinationFolder);&lt;br /&gt;	    	logger.info("Create directory... - &gt; " + destinationFolder);&lt;br /&gt;	    	FileUtils.forceMkdir(folder);&lt;br /&gt;	    	for( int i=0; i&lt;files.length; i++ )&lt;br /&gt;	    	{&lt;br /&gt;	    		try {&lt;br /&gt;	    			String dataFileName = destinationFolder + "/" + files[i];&lt;br /&gt;	    			File file = new File(dataFileName);&lt;br /&gt;	    			file.createNewFile();&lt;br /&gt;	    			logger.info("Retrieving file -&gt; " + files[i]);&lt;br /&gt;	    			FileOutputStream fos = new FileOutputStream( file );&lt;br /&gt;	    			BufferedInputStream is = new BufferedInputStream(foArray[i].getContent().getInputStream());&lt;br /&gt;	    			int content;&lt;br /&gt;	    			// do copying&lt;br /&gt;	    			while ((content = is.read()) != -1) {&lt;br /&gt;	    			   fos.write(content);&lt;br /&gt;	    			}&lt;br /&gt;	    				&lt;br /&gt;	    			is.close();&lt;br /&gt;	    			fos.close();&lt;br /&gt;	    		}&lt;br /&gt;	    		}catch (Exception ex) {&lt;br /&gt;	    			throw new Exception(ex.getMessage());&lt;br /&gt;	    		}&lt;br /&gt;	    		&lt;br /&gt;	    		&lt;br /&gt;	    	}&lt;br /&gt;	    	try {&lt;br /&gt;	    		fsManager.freeUnusedResources();&lt;br /&gt;	    	} catch (Exception ex) {&lt;br /&gt;	    		//Your logic goes here&lt;br /&gt;	    	}&lt;br /&gt;		}catch( Throwable e ) {&lt;br /&gt;		     e.printStackTrace();&lt;br /&gt;		     throw new Exception(e.getMessage());&lt;br /&gt;		} &lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;	public static void main(String args[]) {&lt;br /&gt;		downloadUsingSFTP();&lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8581647651155012352-2411406393961090337?l=emrahkocaman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emrahkocaman.blogspot.com/feeds/2411406393961090337/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://emrahkocaman.blogspot.com/2009/06/sftp-sunucudan-dosya-indirme.html#comment-form' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581647651155012352/posts/default/2411406393961090337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581647651155012352/posts/default/2411406393961090337'/><link rel='alternate' type='text/html' href='http://emrahkocaman.blogspot.com/2009/06/sftp-sunucudan-dosya-indirme.html' title='SFTP sunucudan dosya indirme'/><author><name>Emrah KOCAMAN</name><uri>http://www.blogger.com/profile/02255228002317362652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581647651155012352.post-1285787841186622108</id><published>2009-03-22T19:32:00.006+02:00</published><updated>2009-03-22T20:08:20.402+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='compability'/><title type='text'>Java 5 özelliklerini Java 1.4'te kullanabilseydik keşke?</title><content type='html'>&lt;/br&gt;&lt;br /&gt;Java 5'le hayatımıza giren yenilikler (ki benim favorim @Annotations) çığır açan yeniliklerdi şüphesiz. Çok yaygın olarak kullanılan Java 1.4'ten Java 5'e geçiş tabiki kolay olmuyor ve Java 1.4 büyük ölçekli projelerde hala en çok tercih edilen SDK olma ünvanını koruyor.&lt;br /&gt;&lt;br /&gt;Peki benim gibi Java 1.4 ortamında proje geliştirmek zorunda kalanlar Annotations, Autoboxing/unboxing, gelişmiş Generic'ler ve gelişmiş "for" döngüleri gibi nimetlerden faydalanamayacak mı? Elbette faydalanacak nasıl mı buyurun buradan devam edin&lt;br /&gt;&lt;a href="http://retrotranslator.sourceforge.net/"&gt;&lt;span style="font-weight:bold;"&gt;Retrotranslator&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/br&gt;&lt;br /&gt;&lt;/br&gt;&lt;br /&gt;&lt;/br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8581647651155012352-1285787841186622108?l=emrahkocaman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emrahkocaman.blogspot.com/feeds/1285787841186622108/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://emrahkocaman.blogspot.com/2009/03/java-5-ozelliklerini-java-14te.html#comment-form' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581647651155012352/posts/default/1285787841186622108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581647651155012352/posts/default/1285787841186622108'/><link rel='alternate' type='text/html' href='http://emrahkocaman.blogspot.com/2009/03/java-5-ozelliklerini-java-14te.html' title='Java 5 özelliklerini Java 1.4&apos;te kullanabilseydik keşke?'/><author><name>Emrah KOCAMAN</name><uri>http://www.blogger.com/profile/02255228002317362652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581647651155012352.post-6712484857073668311</id><published>2009-03-04T21:55:00.004+02:00</published><updated>2010-07-20T15:18:57.662+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Seam'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><title type='text'>JBoss Seam?</title><content type='html'>Merhabalar,,,,&lt;br /&gt;&lt;br /&gt;Java dünyasında olupta JBoss adını duymayan yoktur sanırım. (Onlarda şimdi duydular).&lt;br /&gt;Bu yazımda Enterprise Java dünyasında her zaman büyük boşlukları dolduran JBoss grubunun Seam isimli yeni framework'ünden bahsetmek istiyorum.&lt;br /&gt;&lt;br /&gt;Java platformunda yazılım geliştiren insanların en çok entegre bir platform bulamamasından yakındığına şahit oldum bu zamana kadar.(ki bende onlardan biriyim) Seam işte bu noktada devreye giriyor ve başarılı bir entegrasyon platformu olarak karşımıza çıkıyor. &lt;br /&gt;&lt;br /&gt;Seam aslında Spring, Hibernate, JSF, EJB, AJAX gibi tanıdık teknolojilerinin artı yönlerinin toplanarak oluşturulan bir platform. Örneğin persistance konusunda Hibernate model olarak alınmışki, Seam'i geliştiren ekibin fikir babasının Hibernate ekibininde beyini olduğunuda dikkate alırsak Seam persistance konusunda başarılı olacak gibi görünüyor. &lt;br /&gt;&lt;br /&gt;Ayrıca JBoss tools ile Eclipse gerçekten entegre bir geliştirme ortamına dönüşüyor ve Seam ile uğraşmak zevkli bir hale dönüşüyor. Özellikle Seam'in CRUD generator aracını kullanarak dakikalar içinde CRUD (Create,Read,Update,Delete) işlevlerine sahip temel bir web uygulamasına sahip olabilirsiniz.&lt;br /&gt;&lt;br /&gt;Seam ile Spring'le kabus haline dönüşen XML konfigürasyonlarını minimum seviyeye indirebilir ve annotation dünyasına ufak adımlar atmaya başlayabilirsiniz.&lt;br /&gt;&lt;br /&gt;Seam'de göze çarpan başka neler var : &lt;br /&gt;&lt;br /&gt;Drools : Rol tabanlı otorizasyon (authorization yani :))&lt;br /&gt;Built-in Captcha : Web uygulamanıza girişte ek güvenliği kolayca sağlayabilmek için&lt;br /&gt;ICEfaces, iText, JFreechart vs.vs.vs. gibi Java dünyasının popüler oyuncularıyla entegrasyon... (O kadar şey yazdım merak edip araştırırsınız heralde :))&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Tabiki bu kadar farklı teknolojiyi bünyesinde barındırması hazım zorluğunuda beraberinde getiriyor. Yani yukarda bahsettiğim teknoloji konularına hakim değilseniz Seam'i kullanabilmek için 40 fırın ekmek yemeniz gerekecek...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Seam her ne kadar gelecek vaad etsede yüksek öğrenme eğrisiyle popüler olması oldukça zaman alacak gibi görünüyor.&lt;br /&gt;&lt;br /&gt;Son bir not : Seam tabiki sadece JBOSS AS ile değil WebSphere, WebLogic gibi uygulama sunucularındada sorunsuz çalıştığını iddia ediyor ben denemedim ama :)&lt;br /&gt;ha birde JDK 1.6 ile test edilmemiş sonuç ne olur bilemem...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8581647651155012352-6712484857073668311?l=emrahkocaman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emrahkocaman.blogspot.com/feeds/6712484857073668311/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://emrahkocaman.blogspot.com/2009/03/jboss-seam.html#comment-form' title='1 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581647651155012352/posts/default/6712484857073668311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581647651155012352/posts/default/6712484857073668311'/><link rel='alternate' type='text/html' href='http://emrahkocaman.blogspot.com/2009/03/jboss-seam.html' title='JBoss Seam?'/><author><name>Emrah KOCAMAN</name><uri>http://www.blogger.com/profile/02255228002317362652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581647651155012352.post-4100036443246582775</id><published>2009-02-22T16:18:00.006+02:00</published><updated>2009-03-04T21:50:21.615+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='robotics'/><category scheme='http://www.blogger.com/atom/ns#' term='RobotBasic'/><title type='text'>Robot Programmer's Bonanza!</title><content type='html'>Tekrar Merhabalar,&lt;br /&gt;&lt;br /&gt;Bu yazımda ilginç,basit ve bir o kadarda yetenekli bir robot programlama ortamından bahsetmek isiyorum. &lt;robotbasic&gt;&lt;br /&gt;&lt;br /&gt;RobotBASIC robotunuzun çalışma algoritmalarını yazabileceğiniz ve algoritmanızın sonucunu ekranınızda simule edebilen bir programlama dili. RobotBASIC sadece bir robotu simule etmekten ileri gidiyor ve yazılan programının hiç bir değişiklik yapılmadan yada çok küçük değişikliklerle gerçek robotlarda kullanılmasına olanak sağlıyor.&lt;br /&gt;&lt;br /&gt;RobotBASIC ile yazılan programlar birçok küçük ve ucuz robotlar la uyumlu olduğu gibi LegoMindstorms gibi kompleks ve yetenekli robot serileri ilede çalışabiliyor.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Örneğin;&lt;br /&gt;&lt;br /&gt;rLocate 100,100&lt;br /&gt;rTurn 90&lt;br /&gt;rForward 300&lt;br /&gt;rTurn 45&lt;br /&gt;rForward 50&lt;br /&gt;rTurn −90&lt;br /&gt;rForward −200&lt;br /&gt;End&lt;br /&gt;&lt;br /&gt;yukardaki kod bloğu ile robotunuzu hareket ettirebilir ve simulasyon ekranından sonuçları takip edebilirsiniz yalnız simulasyon ekranı diyince çokta fazla birşey beklemeyin çünkü oldukça ilkel.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_9lCyRN-RgcQ/SaFhyqHO25I/AAAAAAAAABA/QBUc4TT7hbA/s1600-h/untitled.GIF"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 160px;" src="http://4.bp.blogspot.com/_9lCyRN-RgcQ/SaFhyqHO25I/AAAAAAAAABA/QBUc4TT7hbA/s320/untitled.GIF" border="0" alt=""id="BLOGGER_PHOTO_ID_5305629358945131410" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;bu ekran görüntüsünde ortadaki daire robotumuzu temsil ediyor mesela :)&lt;br /&gt;&lt;br /&gt;Pekala Microsoft Robotics gibi müthiş bir simulasyon ortamı dururken neden bunu kullanalım diye bir soru gelebilir aklınıza? Cevabı ise basit benim o ortamı kaldırabilecek bir bilgisayarım yok :))) &lt;br /&gt;&lt;br /&gt;Microsoft Robotics'i tam verimle kullanabilmeniz için Physics desteğine sahip güncel bir ekran kartına ve en az çift çekirdekli bir işlemciye ihtiyacınız olacak yoksa robotunuzun bir adım attığını bile görebilmek dakikalar alabilir.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;RobotBASIC ile ilgili daha fazla bilgi için http://www.robotbasic.org/ adresini kontrol etmeden geçmeyin.&lt;br /&gt;&lt;br /&gt;Görüşmek üzere&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8581647651155012352-4100036443246582775?l=emrahkocaman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emrahkocaman.blogspot.com/feeds/4100036443246582775/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://emrahkocaman.blogspot.com/2009/02/robot-programmers-bonanza.html#comment-form' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581647651155012352/posts/default/4100036443246582775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581647651155012352/posts/default/4100036443246582775'/><link rel='alternate' type='text/html' href='http://emrahkocaman.blogspot.com/2009/02/robot-programmers-bonanza.html' title='Robot Programmer&apos;s Bonanza!'/><author><name>Emrah KOCAMAN</name><uri>http://www.blogger.com/profile/02255228002317362652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_9lCyRN-RgcQ/SaFhyqHO25I/AAAAAAAAABA/QBUc4TT7hbA/s72-c/untitled.GIF' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581647651155012352.post-6183805306831151678</id><published>2009-02-14T16:09:00.002+02:00</published><updated>2009-02-14T16:28:44.459+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='DB'/><category scheme='http://www.blogger.com/atom/ns#' term='Veritabanı'/><category scheme='http://www.blogger.com/atom/ns#' term='TOAD'/><category scheme='http://www.blogger.com/atom/ns#' term='Quest'/><title type='text'>Toad ve MySQL başarısı</title><content type='html'>Merhabalar,&lt;br /&gt;&lt;br /&gt;Kuşkusuz &lt;a href="http://www.mysql.com/"&gt;MySQL&lt;/a&gt; en popüler açık kaynak kodlu veri tabanı yazılımlarının başında geliyor. Sun Microsystems'ın desteğiyle sürekli ve yüksek bir ivmeyle geliştirilmeye devam eden bu veritabanını yeni kullanmaya başlayacaklar için en korkutucu durum tabiki yönetim kısmı.&lt;br /&gt;Hele birde Microsoft yazılım geliştirme araçlarının süslü dünyasında MySQL dünyasına adım atıyorsanız kullanım bir çok açık kaynak kodlu yazılımda olduğu gibi MySQL içinde kabus halini alabilir.&lt;br /&gt;&lt;br /&gt;MySQL'i beraberinde gelen komut satırı istemcisiyle kullanmaktan sıkıldığınızda karşınıza bir çok ücretsiz alternatif yazılım çıkacaktır ama bu işi en iyi başaran firmalardan biri olan Quest, Oracle ve SQL Server için hazırladığı Toad veritabanı yönetim aracınının ücretsiz bir versiyonu olan  &lt;a href="http://www.toadsoft.com/toadmysql/Overview.htm"&gt;Toad for MySQL&lt;/a&gt; 'le MySQL veritabanı yönetimini çocuk oyuncağı haline getirmiş durumda.&lt;br /&gt;&lt;br /&gt;Yazılım ER-diagram, Query-builder, Knowledge Expert, kod tamamlama ve formatlama özelliğine sahip editörü ile paralı araçlara ihtiyacımız olmadığını tekrar gözler önüne sermiş durumda.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8581647651155012352-6183805306831151678?l=emrahkocaman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emrahkocaman.blogspot.com/feeds/6183805306831151678/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://emrahkocaman.blogspot.com/2009/02/toad-ve-mysql-basars.html#comment-form' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581647651155012352/posts/default/6183805306831151678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581647651155012352/posts/default/6183805306831151678'/><link rel='alternate' type='text/html' href='http://emrahkocaman.blogspot.com/2009/02/toad-ve-mysql-basars.html' title='Toad ve MySQL başarısı'/><author><name>Emrah KOCAMAN</name><uri>http://www.blogger.com/profile/02255228002317362652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581647651155012352.post-3934385029830715470</id><published>2008-12-19T20:35:00.006+02:00</published><updated>2008-12-19T20:59:44.636+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lego'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='mindstorm'/><category scheme='http://www.blogger.com/atom/ns#' term='robotics'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='nxt'/><title type='text'>Lego MindStorms NXT</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_9lCyRN-RgcQ/SUvrr9vsPwI/AAAAAAAAAA4/QaA9zcjWMOk/s1600-h/41wQw7YDvOL__SL500_AA280_.jpg"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 280px; DISPLAY: block; HEIGHT: 280px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5281574128563535618" border="0" alt="" src="http://1.bp.blogspot.com/_9lCyRN-RgcQ/SUvrr9vsPwI/AAAAAAAAAA4/QaA9zcjWMOk/s320/41wQw7YDvOL__SL500_AA280_.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Robotiğin günümüzde geldiği yer ve kazandığı önem ortada. İnsanların show'larda ve TV'de görüp hayretler içerisinde izlediği robotlardan birisi sizin robotunuz olsun istemezmisiniz?&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Lego MindStorms NXT bizleri robotik dünyayı yüzeysel de olsa keşfetmeye çağırıyor. 578 parçadan oluşan marifetli ufaklık USB ve Bluetooth aracılığıyla programlanıp yönetilebiliyor. &lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Ultrasonik gözleriyle görebilen, ses sensörleriyle duyabilen, dokunma sensörleriyle hisseden robotumuza hareket kabiliyetini ise 3 adet servo motor sağlıyor. &lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Aslında bu bir lego oyuncağı yani parçalarına ayırıp istediğimiz robotu dizayn etmek bizlere düşüyor.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.robotthoughts.com/?s=lego"&gt;http://www.robotthoughts.com/?s=lego&lt;/a&gt; bu adreste bu minik devin neler yaptığını görebilirsiniz.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;İyi güzel hoşta bu oyuncağa bu hareketleri nasıl yaptıracaz?&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Çözümü basit çok az programlama geçmişiniz varsa java tabanlı lejOS yada Microsoft Robotics Studio bu iş için biçilmiş kaftan. Hatta visual programming language diye tabir edilen diller sayesinde hiç programlama bilgisine sahip olmadan günümüzün yazılım mühendisi katili sürükle-bırak tarzında küçük bloklarla sizde robotunuzu programlamaya başlayabilirsiniz.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Setin fiyatı amazon.com'da 199$ gibi bir fiyattan satılırken her zamanki gibi ülkemizde resmi olmayan yollarla ve  650-850 YTL arasında değişen fahiş fiyatlarla satılıyor.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Bu kadar para veremem diyorsanız ücretsiz olarak dağıtılan MS robotics studio fazlasıyla işinizi görecektir.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8581647651155012352-3934385029830715470?l=emrahkocaman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emrahkocaman.blogspot.com/feeds/3934385029830715470/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://emrahkocaman.blogspot.com/2008/12/lego-mindstorms-nxt.html#comment-form' title='3 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581647651155012352/posts/default/3934385029830715470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581647651155012352/posts/default/3934385029830715470'/><link rel='alternate' type='text/html' href='http://emrahkocaman.blogspot.com/2008/12/lego-mindstorms-nxt.html' title='Lego MindStorms NXT'/><author><name>Emrah KOCAMAN</name><uri>http://www.blogger.com/profile/02255228002317362652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_9lCyRN-RgcQ/SUvrr9vsPwI/AAAAAAAAAA4/QaA9zcjWMOk/s72-c/41wQw7YDvOL__SL500_AA280_.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8581647651155012352.post-2719839154475959757</id><published>2008-12-19T20:25:00.002+02:00</published><updated>2008-12-19T20:30:51.405+02:00</updated><title type='text'>İlk yazı</title><content type='html'>Merhaba,&lt;br /&gt;&lt;br /&gt;Bu ilk yazımda bu günce'de neler olacak neler olmayacak bahsetmek istiyorum.&lt;br /&gt;Aslında bilişim sektörü ağırlıklı bir günce tutmak istiyorum fakat canım herhangi bir şeye sıkılır içimi dökmek isterim yazarım buraya hiç affetmem. Yani konularla ilgili kurallarım yok aklıma gelen herşey olacak burda.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8581647651155012352-2719839154475959757?l=emrahkocaman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://emrahkocaman.blogspot.com/feeds/2719839154475959757/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://emrahkocaman.blogspot.com/2008/12/ilk-yaz.html#comment-form' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8581647651155012352/posts/default/2719839154475959757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8581647651155012352/posts/default/2719839154475959757'/><link rel='alternate' type='text/html' href='http://emrahkocaman.blogspot.com/2008/12/ilk-yaz.html' title='İlk yazı'/><author><name>Emrah KOCAMAN</name><uri>http://www.blogger.com/profile/02255228002317362652</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
