{"id":31277,"date":"2025-10-08T05:41:11","date_gmt":"2025-10-08T02:41:11","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=31277"},"modified":"2025-10-08T05:41:11","modified_gmt":"2025-10-08T02:41:11","slug":"axis2-web-servisleri-egitimi-soap-tabanli-servis-gelistirme-ve-dagitma","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/axis2-web-servisleri-egitimi-soap-tabanli-servis-gelistirme-ve-dagitma\/","title":{"rendered":"Axis2 Web Servisleri E\u011fitimi: SOAP Tabanl\u0131 Servis Geli\u015ftirme ve Da\u011f\u0131tma"},"content":{"rendered":"<p><body><\/p>\n<h2>Axis2 Web Servisleri E\u011fitimi: SOAP Tabanl\u0131 Servis Geli\u015ftirme ve Da\u011f\u0131tma<\/h2>\n<h3>Giri\u015f<\/h3>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn ba\u011flant\u0131l\u0131 d\u00fcnyas\u0131nda, farkl\u0131 sistemlerin ve uygulamalar\u0131n birbirleriyle sorunsuz bir \u015fekilde ileti\u015fim kurmas\u0131 hayati \u00f6nem ta\u015f\u0131maktad\u0131r. Bu ihtiyac\u0131 kar\u015f\u0131lamak \u00fczere geli\u015ftirilen teknolojilerden biri de &#8220;Web Servisleri&#8221;dir. Web servisleri, a\u011f \u00fczerinden eri\u015filebilen ve belirli bir i\u015flevi yerine getiren, genellikle XML tabanl\u0131 mesajla\u015fma protokolleri (en yayg\u0131n olarak SOAP) kullanarak \u00e7al\u0131\u015fan yaz\u0131l\u0131m bile\u015fenleridir. Bu servisler, platformdan ba\u011f\u0131ms\u0131z olmalar\u0131 sayesinde heterojen sistemler aras\u0131nda entegrasyonu m\u00fcmk\u00fcn k\u0131lar. \u00d6rne\u011fin, bir Java uygulamas\u0131 bir .NET servisiyle veya bir Python uygulamas\u0131 bir PHP servisiyle kolayca ileti\u015fim kurabilir.<\/p>\n<p>Apache Axis2, bu t\u00fcr Web servislerini geli\u015ftirmek, da\u011f\u0131tmak ve kullanmak i\u00e7in kullan\u0131lan pop\u00fcler, a\u00e7\u0131k kaynakl\u0131 bir SOAP motorudur. SOAP (Simple Object Access Protocol), XML tabanl\u0131, hafif ve standart bir protokold\u00fcr ve mesajlar\u0131 a\u011f \u00fczerinden de\u011fi\u015f toku\u015f etmek i\u00e7in kullan\u0131l\u0131r. Axis2, SOAP 1.1 ve SOAP 1.2 standartlar\u0131n\u0131 desteklerken, ayn\u0131 zamanda hem senkron hem de asenkron mesajla\u015fma yetenekleri sunar. Geli\u015ftiricilere hem sunucu taraf\u0131nda servis olu\u015fturma hem de istemci taraf\u0131nda bu servislere eri\u015fim i\u00e7in g\u00fc\u00e7l\u00fc ara\u00e7lar sa\u011flar.<\/p>\n<p>Bu kapsaml\u0131 e\u011fitimde, Apache Axis2 kullanarak SOAP tabanl\u0131 Web servisleri geli\u015ftirmenin ve da\u011f\u0131tman\u0131n t\u00fcm ad\u0131mlar\u0131n\u0131 ayr\u0131nt\u0131l\u0131 olarak inceleyece\u011fiz. Temel Web servis kavramlar\u0131ndan ba\u015flayarak, geli\u015ftirme ortam\u0131n\u0131n haz\u0131rlanmas\u0131na, servis geli\u015ftirme yakla\u015f\u0131mlar\u0131na (bottom-up ve top-down), istemci geli\u015ftirme s\u00fcre\u00e7lerine ve geli\u015fmi\u015f konulara kadar geni\u015f bir yelpazede bilgi sunaca\u011f\u0131z. Amac\u0131m\u0131z, bu makaleyi okuyan herkesin Axis2 ile Web servisleri olu\u015fturma ve y\u00f6netme konusunda sa\u011flam bir temel edinmesini sa\u011flamakt\u0131r.<\/p>\n<h3>Web Servislerinin Temelleri<\/h3>\n<p>Web servisleri, da\u011f\u0131t\u0131k sistem mimarisinin temel ta\u015flar\u0131ndan biridir. \u0130ki ana bile\u015feni vard\u0131r: servis sa\u011flay\u0131c\u0131 (service provider) ve servis t\u00fcketicisi (service consumer). Servis sa\u011flay\u0131c\u0131, belirli bir i\u015flevselli\u011fi sunar ve bu i\u015flevselli\u011fin nas\u0131l kullan\u0131laca\u011f\u0131n\u0131 a\u00e7\u0131klayan bir tan\u0131m yay\u0131mlar. Servis t\u00fcketicisi ise bu tan\u0131m\u0131 kullanarak servise eri\u015fir ve i\u015flevselli\u011fini kullan\u0131r. Bu etkile\u015fimde \u00fc\u00e7 temel teknoloji kullan\u0131l\u0131r: SOAP, WSDL ve XML Schema.<\/p>\n<h4>SOAP (Simple Object Access Protocol)<\/h4>\n<p>SOAP, Web servisleri aras\u0131nda yap\u0131land\u0131r\u0131lm\u0131\u015f bilgiyi de\u011fi\u015f toku\u015f etmek i\u00e7in kullan\u0131lan XML tabanl\u0131 bir mesajla\u015fma protokol\u00fcd\u00fcr. Genellikle HTTP, SMTP veya JMS gibi ta\u015f\u0131ma protokolleri \u00fczerinde \u00e7al\u0131\u015f\u0131r. SOAP mesajlar\u0131, bir zarf (envelope), bir ba\u015fl\u0131k (header) ve bir g\u00f6vde (body) olmak \u00fczere \u00fc\u00e7 ana b\u00f6l\u00fcmden olu\u015fur.<\/p>\n<ul>\n<li><b>Zarf (Envelope):<\/b> Bir SOAP mesaj\u0131n\u0131n k\u00f6k \u00f6\u011fesidir ve mesaj\u0131n bir SOAP mesaj\u0131 oldu\u011funu tan\u0131mlar.<\/li>\n<li><b>Ba\u015fl\u0131k (Header):<\/b> \u0130ste\u011fe ba\u011fl\u0131d\u0131r ve g\u00fcvenlik, i\u015flem y\u00f6netimi, y\u00f6nlendirme gibi uygulama \u00f6zelinde bilgileri i\u00e7erir.<\/li>\n<li><b>G\u00f6vde (Body):<\/b> Servisin \u00e7a\u011f\u0131rd\u0131\u011f\u0131 metodun parametreleri veya metodun d\u00f6nd\u00fcrd\u00fc\u011f\u00fc de\u011fer gibi as\u0131l mesaj i\u00e7eri\u011fini bar\u0131nd\u0131r\u0131r.<\/li>\n<li><b>Hata (Fault):<\/b> Bir hata olu\u015ftu\u011funda, hata bilgilerini i\u00e7eren iste\u011fe ba\u011fl\u0131 bir b\u00f6l\u00fcmd\u00fcr.<\/li>\n<\/ul>\n<p>SOAP&#8217;\u0131n en \u00f6nemli \u00f6zelliklerinden biri, platform ve dil ba\u011f\u0131ms\u0131zl\u0131\u011f\u0131d\u0131r. Bu sayede farkl\u0131 teknolojilerle yaz\u0131lm\u0131\u015f uygulamalar bile SOAP mesajlar\u0131 arac\u0131l\u0131\u011f\u0131yla sorunsuz bir \u015fekilde ileti\u015fim kurabilir.<\/p>\n<h4>WSDL (Web Services Description Language)<\/h4>\n<p>WSDL, bir Web servisinin nas\u0131l kullan\u0131laca\u011f\u0131n\u0131 tan\u0131mlayan XML tabanl\u0131 bir dildir. Servisin sundu\u011fu operasyonlar\u0131, bu operasyonlar\u0131n bekledi\u011fi parametreleri, d\u00f6nd\u00fcrd\u00fc\u011f\u00fc de\u011ferleri ve servisin nerede bulundu\u011funu (endpoint URL) a\u00e7\u0131klar. Bir WSDL belgesi, servis t\u00fcketicilerinin servise nas\u0131l ba\u011flanacaklar\u0131n\u0131 ve hangi mesaj formatlar\u0131n\u0131 kullanacaklar\u0131n\u0131 otomatik olarak anlamalar\u0131n\u0131 sa\u011flar.<br \/>\nWSDL belgesinin ana bile\u015fenleri \u015funlard\u0131r:<\/p>\n<ul>\n<li><b>Types:<\/b> Servis taraf\u0131ndan kullan\u0131lan veri tiplerini (XML Schema kullanarak) tan\u0131mlar.<\/li>\n<li><b>Message:<\/b> Servis operasyonlar\u0131n\u0131n giri\u015f ve \u00e7\u0131k\u0131\u015f parametrelerini tan\u0131mlar.<\/li>\n<li><b>PortType (Interface):<\/b> Servisin sundu\u011fu operasyonlar\u0131 ve bu operasyonlar\u0131n mesajlar\u0131n\u0131 (input\/output) tan\u0131mlar.<\/li>\n<li><b>Binding:<\/b> Operasyonlar\u0131n nas\u0131l ta\u015f\u0131naca\u011f\u0131n\u0131 (\u00f6rne\u011fin SOAP 1.1 HTTP) ve mesajlar\u0131n hangi formatta olaca\u011f\u0131n\u0131 belirtir.<\/li>\n<li><b>Service:<\/b> Servisin a\u011fdaki adresini (endpoint URL) ve hangi portlar\u0131 sundu\u011funu tan\u0131mlar.<\/li>\n<\/ul>\n<p>WSDL, servis ke\u015ffi ve otomatik istemci kodu \u00fcretimi i\u00e7in kritik bir rol oynar.<\/p>\n<h4>XML Schema<\/h4>\n<p>XML Schema, XML belgelerinin yap\u0131s\u0131n\u0131 ve veri tiplerini tan\u0131mlamak i\u00e7in kullan\u0131lan bir dildir. WSDL belgelerinde &#8220;Types&#8221; b\u00f6l\u00fcm\u00fcnde Web servislerinin kulland\u0131\u011f\u0131 karma\u015f\u0131k veri tiplerini tan\u0131mlamak i\u00e7in kullan\u0131l\u0131r. Bu, mesajlar\u0131n do\u011fru formatta g\u00f6nderilmesini ve al\u0131nmas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>Apache Axis2&#8217;ye Giri\u015f<\/h3>\n<p>Apache Axis2, SOAP tabanl\u0131 Web servisleri i\u00e7in g\u00fc\u00e7l\u00fc ve esnek bir motor sa\u011flayan, Apache Yaz\u0131l\u0131m Vakf\u0131 taraf\u0131ndan geli\u015ftirilen a\u00e7\u0131k kaynakl\u0131 bir projedir. Axis2, orijinal Apache Axis projesinin yeniden tasarlanm\u0131\u015f ve geli\u015ftirilmi\u015f bir versiyonudur. Axis2, daha mod\u00fcler, performansl\u0131 ve geni\u015fletilebilir bir mimariye sahiptir.<\/p>\n<h4>Axis1 vs. Axis2<\/h4>\n<p>Axis1, Web servisleri teknolojisinin ilk nesillerinden biriydi. Ancak baz\u0131 mimari k\u0131s\u0131tlamalar\u0131 ve performans sorunlar\u0131 vard\u0131. Axis2, bu sorunlar\u0131 gidermek ve modern Web servisleri ihtiya\u00e7lar\u0131n\u0131 kar\u015f\u0131lamak \u00fczere s\u0131f\u0131rdan tasarlanm\u0131\u015ft\u0131r. Temel farklar \u015funlard\u0131r:<\/p>\n<ul>\n<li><b>Mimari:<\/b> Axis2, daha mod\u00fcler ve geni\u015fletilebilir bir mimariye sahiptir. Mesaj ak\u0131\u015f\u0131n\u0131 (message flow) y\u00f6neten &#8220;fazlar&#8221; (phases) ve &#8220;i\u015fleyiciler&#8221; (handlers) kavramlar\u0131n\u0131 kullan\u0131r.<\/li>\n<li><b>Performans:<\/b> Axis2, daha iyi performans ve daha d\u00fc\u015f\u00fck bellek t\u00fcketimi sunar.<\/li>\n<li><b>Asenkron Destek:<\/b> Axis2, hem senkron hem de asenkron mesajla\u015fmay\u0131 do\u011fal olarak destekler.<\/li>\n<li><b>Data Binding:<\/b> Axis2, AXIOM (Axis Object Model), ADB (Axis Data Binding), JAXB ve XMLBeans gibi \u00e7e\u015fitli veri ba\u011flama mekanizmalar\u0131n\u0131 destekler.<\/li>\n<li><b>Mod\u00fcller:<\/b> Axis2, WS-Security, WS-ReliableMessaging gibi geli\u015fmi\u015f Web servisleri standartlar\u0131n\u0131 mod\u00fcller arac\u0131l\u0131\u011f\u0131yla kolayca entegre etme imkan\u0131 sunar.<\/li>\n<\/ul>\n<h4>Axis2&#8217;nin Mimarisi<\/h4>\n<p>Axis2&#8217;nin mimarisi, mesajlar\u0131n i\u015flenmesini sa\u011flayan bir dizi bile\u015fenden olu\u015fur. En \u00f6nemli kavramlar \u015funlard\u0131r:<\/p>\n<ul>\n<li><b>Mesaj Ak\u0131\u015f\u0131 (Message Flow):<\/b> Bir SOAP mesaj\u0131 Axis2&#8217;ye ula\u015ft\u0131\u011f\u0131nda veya Axis2&#8217;den ayr\u0131ld\u0131\u011f\u0131nda, belirli bir s\u0131rayla i\u015flenir. Bu ak\u0131\u015f, &#8220;fazlar&#8221; ve &#8220;i\u015fleyiciler&#8221; taraf\u0131ndan y\u00f6netilir.<\/li>\n<li><b>Fazlar (Phases):<\/b> Mesaj ak\u0131\u015f\u0131, mant\u0131ksal olarak ayr\u0131lm\u0131\u015f fazlara b\u00f6l\u00fcnm\u00fc\u015ft\u00fcr (\u00f6rne\u011fin, InPhase, DispatchPhase, OutPhase). Her faz\u0131n belirli bir sorumlulu\u011fu vard\u0131r.<\/li>\n<li><b>\u0130\u015fleyiciler (Handlers):<\/b> Her faz i\u00e7inde bir veya daha fazla i\u015fleyici bulunabilir. \u0130\u015fleyiciler, belirli g\u00f6revleri yerine getiren (\u00f6rne\u011fin, g\u00fcvenlik kontrol\u00fc, loglama, mesaj d\u00f6n\u00fc\u015ft\u00fcrme) kod par\u00e7alar\u0131d\u0131r. Bu mod\u00fcler yap\u0131, Axis2&#8217;yi son derece esnek ve geni\u015fletilebilir k\u0131lar.<\/li>\n<li><b>Mod\u00fcller (Modules):<\/b> Mod\u00fcller, birden fazla i\u015fleyiciyi ve fazlar\u0131 bir araya getiren daha y\u00fcksek seviyeli bile\u015fenlerdir. WS-Security gibi standartlar\u0131 uygulamak i\u00e7in kullan\u0131l\u0131rlar.<\/li>\n<\/ul>\n<h4>Axis2&#8217;nin Avantajlar\u0131<\/h4>\n<ul>\n<li><b>Esneklik ve Geni\u015fletilebilirlik:<\/b> Mod\u00fcler mimarisi sayesinde kolayca geni\u015fletilebilir ve \u00f6zelle\u015ftirilebilir.<\/li>\n<li><b>Performans:<\/b> Verimli mesaj i\u015fleme ve bellek y\u00f6netimi sunar.<\/li>\n<li><b>Standart Deste\u011fi:<\/b> SOAP 1.1, SOAP 1.2, WSDL 1.1, WSDL 2.0, MTOM\/XOP gibi bir\u00e7ok Web servis standard\u0131n\u0131 destekler. Ayr\u0131ca WS-Security, WS-ReliableMessaging gibi geli\u015fmi\u015f standartlar i\u00e7in mod\u00fcller sunar.<\/li>\n<li><b>\u00c7oklu Data Binding Se\u00e7enekleri:<\/b> Geli\u015ftiricilere veri ba\u011flama i\u00e7in birden fazla se\u00e7enek sunar (ADB, JAXB, XMLBeans).<\/li>\n<li><b>Kod \u00dcretimi:<\/b> WSDL&#8217;den Java koduna (top-down) ve Java&#8217;dan WSDL&#8217;e (bottom-up) kod \u00fcretimi i\u00e7in g\u00fc\u00e7l\u00fc ara\u00e7lara sahiptir.<\/li>\n<\/ul>\n<h3>Geli\u015ftirme Ortam\u0131n\u0131n Haz\u0131rlanmas\u0131<\/h3>\n<p>Axis2 ile Web servisleri geli\u015ftirmeye ba\u015flamadan \u00f6nce, gerekli yaz\u0131l\u0131mlar\u0131 kurarak geli\u015ftirme ortam\u0131n\u0131z\u0131 haz\u0131rlaman\u0131z gerekir.<\/p>\n<h4>1. Java Development Kit (JDK) Kurulumu<\/h4>\n<p>Axis2, Java tabanl\u0131 bir framework oldu\u011fu i\u00e7in sisteminizde bir JDK kurulu olmas\u0131 zorunludur. Oracle JDK veya OpenJDK&#8217;n\u0131n en son stabil s\u00fcr\u00fcm\u00fcn\u00fc indirip kurun. Kurulumdan sonra <code>JAVA_HOME<\/code> ortam de\u011fi\u015fkenini ayarlad\u0131\u011f\u0131n\u0131zdan ve <code>java -version<\/code> komutunu \u00e7al\u0131\u015ft\u0131rarak kurulumu do\u011frulad\u0131\u011f\u0131n\u0131zdan emin olun.<\/p>\n<h4>2. Apache Tomcat Kurulumu<\/h4>\n<p>Axis2 Web servislerini bir Servlet konteynerinde \u00e7al\u0131\u015ft\u0131rman\u0131z gerekecektir. Apache Tomcat, bu ama\u00e7 i\u00e7in en yayg\u0131n kullan\u0131lan ve hafif bir se\u00e7enektir.<\/p>\n<ol>\n<li>Apache Tomcat web sitesinden en son stabil s\u00fcr\u00fcm\u00fcn\u00fc indirin.<\/li>\n<li>\u0130ndirilen zip\/tar.gz dosyas\u0131n\u0131 istedi\u011finiz bir dizine \u00e7\u0131kar\u0131n (\u00f6rne\u011fin, <code>C:\\apache-tomcat-9.0.x<\/code> veya <code>\/opt\/apache-tomcat-9.0.x<\/code>).<\/li>\n<li>Tomcat&#8217;i ba\u015flatmak i\u00e7in <code>bin<\/code> dizinindeki <code>startup.bat<\/code> (Windows) veya <code>startup.sh<\/code> (Linux\/macOS) dosyas\u0131n\u0131 \u00e7al\u0131\u015ft\u0131r\u0131n.<\/li>\n<li>Taray\u0131c\u0131n\u0131zda <code>http:\/\/localhost:8080<\/code> adresine giderek Tomcat&#8217;in \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 do\u011frulay\u0131n.<\/li>\n<\/ol>\n<h4>3. Axis2 Binary Da\u011f\u0131t\u0131m\u0131n\u0131n \u0130ndirilmesi ve Kurulumu<\/h4>\n<p>Axis2&#8217;nin Web servislerini \u00e7al\u0131\u015ft\u0131rmak i\u00e7in <code>axis2.war<\/code> dosyas\u0131na ihtiyac\u0131n\u0131z var.<\/p>\n<ol>\n<li>Apache Axis2 web sitesinden (http:\/\/axis.apache.org\/axis2\/java\/core\/) &#8220;Standard Binary Distribution&#8221; s\u00fcr\u00fcm\u00fcn\u00fc indirin.<\/li>\n<li>\u0130ndirilen zip dosyas\u0131n\u0131 istedi\u011finiz bir dizine \u00e7\u0131kar\u0131n (\u00f6rne\u011fin, <code>C:\\axis2-1.x.x<\/code> veya <code>\/opt\/axis2-1.x.x<\/code>). Bu dizin, <code>AXIS2_HOME<\/code> olarak an\u0131lacakt\u0131r.<\/li>\n<li>\u00c7\u0131kar\u0131lan dizin i\u00e7indeki <code>webapps<\/code> klas\u00f6r\u00fcnden <code>axis2.war<\/code> dosyas\u0131n\u0131 bulun.<\/li>\n<li>Bu <code>axis2.war<\/code> dosyas\u0131n\u0131 Tomcat&#8217;in <code>webapps<\/code> dizinine kopyalay\u0131n. Tomcat otomatik olarak bu dosyay\u0131 da\u011f\u0131tacak ve bir <code>axis2<\/code> klas\u00f6r\u00fc olu\u015fturacakt\u0131r.<\/li>\n<li>Tomcat&#8217;i yeniden ba\u015flat\u0131n.<\/li>\n<li>Taray\u0131c\u0131n\u0131zda <code>http:\/\/localhost:8080\/axis2<\/code> adresine giderek Axis2&#8217;nin ba\u015far\u0131yla da\u011f\u0131t\u0131ld\u0131\u011f\u0131n\u0131 do\u011frulay\u0131n. Y\u00f6netim konsolunu g\u00f6rmelisiniz.<\/li>\n<\/ol>\n<h4>4. IDE (Eclipse\/IntelliJ IDEA) Kurulumu ve Yap\u0131land\u0131rmas\u0131<\/h4>\n<p>Modern bir IDE kullanmak geli\u015ftirme s\u00fcrecini b\u00fcy\u00fck \u00f6l\u00e7\u00fcde kolayla\u015ft\u0131racakt\u0131r. Eclipse veya IntelliJ IDEA gibi pop\u00fcler IDE&#8217;lerden birini kurun.<br \/>\nProjenizi olu\u015ftururken, Axis2 k\u00fct\u00fcphanelerini (indirdi\u011finiz Axis2 da\u011f\u0131t\u0131m\u0131n\u0131n <code>lib<\/code> klas\u00f6r\u00fcndeki JAR dosyalar\u0131) projenizin s\u0131n\u0131f yoluna (classpath) eklemeniz gerekecektir. Maven veya Gradle gibi bir yap\u0131land\u0131rma arac\u0131 kullan\u0131yorsan\u0131z, <code>pom.xml<\/code> veya <code>build.gradle<\/code> dosyan\u0131za Axis2 ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 ekleyebilirsiniz.<\/p>\n<h3>Servis Geli\u015ftirme Yakla\u015f\u0131mlar\u0131<\/h3>\n<p>Axis2 ile Web servisleri geli\u015ftirmenin iki ana yakla\u015f\u0131m\u0131 vard\u0131r: Bottom-Up (a\u015fa\u011f\u0131dan yukar\u0131ya) ve Top-Down (yukar\u0131dan a\u015fa\u011f\u0131ya). Her iki yakla\u015f\u0131m\u0131n da kendine \u00f6zg\u00fc kullan\u0131m durumlar\u0131 ve avantajlar\u0131 vard\u0131r.<\/p>\n<h4>1. Bottom-Up Yakla\u015f\u0131m\u0131 (Java&#8217;dan WSDL&#8217;e)<\/h4>\n<p>Bu yakla\u015f\u0131mda, \u00f6nce Web servisinin i\u015f mant\u0131\u011f\u0131n\u0131 i\u00e7eren Java kodunu yazars\u0131n\u0131z. Daha sonra Axis2 ara\u00e7lar\u0131n\u0131 kullanarak bu Java kodundan otomatik olarak WSDL dosyas\u0131n\u0131 ve gerekli da\u011f\u0131t\u0131m dosyalar\u0131n\u0131 (AAR) olu\u015fturursunuz. Bu yakla\u015f\u0131m, mevcut Java s\u0131n\u0131flar\u0131n\u0131 Web servisi olarak a\u00e7mak veya h\u0131zl\u0131 prototipleme yapmak i\u00e7in idealdir.<\/p>\n<h5>a. Servis S\u0131n\u0131f\u0131 Yazma<\/h5>\n<p>Basit bir Java s\u0131n\u0131f\u0131 olu\u015ftural\u0131m. Bu s\u0131n\u0131f, Web servisimizin operasyonlar\u0131n\u0131 i\u00e7erecektir.<\/p>\n<pre><code class=\"language-java\">\/\/ src\/main\/java\/com\/example\/services\/CalculatorService.java\npackage com.example.services;\n\npublic class CalculatorService {\n\n    public int add(int a, int b) {\n        return a + b;\n    }\n\n    public int subtract(int a, int b) {\n        return a - b;\n    }\n\n    public String sayHello(String name) {\n        return \"Hello, \" + name + \"!\";\n    }\n}<\/code><\/pre>\n<p>Bu s\u0131n\u0131f\u0131n herhangi bir \u00f6zel aray\u00fcze ihtiyac\u0131 yoktur, sadece public metotlara sahip olmas\u0131 yeterlidir.<\/p>\n<h5>b. <code>services.xml<\/code> Dosyas\u0131 Olu\u015fturma<\/h5>\n<p>Axis2, bir Java s\u0131n\u0131f\u0131n\u0131 nas\u0131l bir Web servisi olarak da\u011f\u0131taca\u011f\u0131n\u0131 <code>services.xml<\/code> ad\u0131nda bir yap\u0131land\u0131rma dosyas\u0131 arac\u0131l\u0131\u011f\u0131yla \u00f6\u011frenir. Bu dosya, servisin ad\u0131n\u0131, s\u0131n\u0131f\u0131n\u0131 ve hangi operasyonlar\u0131n d\u0131\u015far\u0131ya a\u00e7\u0131laca\u011f\u0131n\u0131 tan\u0131mlar.<\/p>\n<pre><code class=\"language-xml\"><!-- src\/main\/resources\/META-INF\/services.xml -->\n<serviceGroup>\n    <service name=\"CalculatorService\" scope=\"application\">\n        <description>\n            Basit bir hesap makinesi servisi\n        <\/description>\n        <messageReceivers>\n            <messageReceiver mep=\"http:\/\/www.w3.org\/2004\/08\/wsdl\/in-only\"\n                             class=\"org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver\"\/>\n            <messageReceiver mep=\"http:\/\/www.w3.org\/2004\/08\/wsdl\/in-out\"\n                             class=\"org.apache.axis2.rpc.receivers.RPCMessageReceiver\"\/>\n        <\/messageRecevers>\n        <parameter name=\"ServiceClass\">com.example.services.CalculatorService<\/parameter>\n    <\/service>\n<\/serviceGroup><\/code><\/pre>\n<ul>\n<li><code>serviceGroup<\/code>: Bir veya daha fazla servisi i\u00e7erebilir.<\/li>\n<li><code>service<\/code>: Servisin ad\u0131n\u0131 ve kapsam\u0131n\u0131 (scope) tan\u0131mlar. <code>application<\/code> kapsam\u0131, servisin t\u00fcm uygulama \u00f6mr\u00fc boyunca tek bir \u00f6rne\u011finin olaca\u011f\u0131 anlam\u0131na gelir.<\/li>\n<li><code>messageReceivers<\/code>: Gelen mesajlar\u0131 i\u015flemek i\u00e7in kullan\u0131lan al\u0131c\u0131lar\u0131 tan\u0131mlar. <code>RPCMessageReceiver<\/code>, Java metotlar\u0131n\u0131 SOAP operasyonlar\u0131yla e\u015fle\u015ftirmek i\u00e7in kullan\u0131l\u0131r.<\/li>\n<li><code>parameter name=\"ServiceClass\"<\/code>: Servisin Java s\u0131n\u0131f\u0131n\u0131n tam nitelikli ad\u0131n\u0131 belirtir.<\/li>\n<\/ul>\n<h5>c. Axis2 AAR (Axis Archive) Olu\u015fturma<\/h5>\n<p>Web servisinizi da\u011f\u0131tmak i\u00e7in, Java s\u0131n\u0131f\u0131n\u0131z\u0131 ve <code>services.xml<\/code> dosyan\u0131z\u0131 i\u00e7eren bir Axis Archive (AAR) dosyas\u0131 olu\u015fturman\u0131z gerekir. Bir AAR dosyas\u0131 asl\u0131nda bir ZIP dosyas\u0131d\u0131r ve \u015fu yap\u0131y\u0131 takip etmelidir:<\/p>\n<pre><code class=\"language-\">myService.aar\n  |- META-INF\/\n  |  |- services.xml\n  |- com\/\n  |  |- example\/\n  |     |- services\/\n  |        |- CalculatorService.class<\/code><\/pre>\n<p>Bu yap\u0131y\u0131 manuel olarak veya Maven\/Ant gibi bir yap\u0131 arac\u0131yla olu\u015fturabilirsiniz. Maven kullan\u0131yorsan\u0131z, <code>pom.xml<\/code> dosyan\u0131za <code>maven-jar-plugin<\/code> ve <code>maven-antrun-plugin<\/code> gibi eklentiler ekleyerek AAR dosyas\u0131n\u0131 paketleyebilirsiniz.<\/p>\n<h5>d. AAR Dosyas\u0131n\u0131 Da\u011f\u0131tma<\/h5>\n<p>Olu\u015fturdu\u011funuz <code>CalculatorService.aar<\/code> dosyas\u0131n\u0131 Axis2&#8217;nin da\u011f\u0131t\u0131m dizinine kopyalaman\u0131z yeterlidir. Bu dizin genellikle Tomcat&#8217;in <code>webapps\/axis2\/WEB-INF\/services<\/code> klas\u00f6r\u00fcd\u00fcr. AAR dosyas\u0131n\u0131 bu klas\u00f6re kopyalad\u0131ktan sonra, Axis2 otomatik olarak servisi tan\u0131yacak ve da\u011f\u0131tacakt\u0131r. Tomcat&#8217;i yeniden ba\u015flatmak genellikle gerekmez, ancak sorun ya\u015farsan\u0131z yeniden ba\u015flatmak iyi bir \u00e7\u00f6z\u00fcmd\u00fcr.<\/p>\n<h5>e. Servisin Test Edilmesi<\/h5>\n<p>Servis da\u011f\u0131t\u0131ld\u0131ktan sonra, taray\u0131c\u0131n\u0131zdan <code>http:\/\/localhost:8080\/axis2\/services\/CalculatorService?wsdl<\/code> adresine giderek servisin WSDL&#8217;ini g\u00f6r\u00fcnt\u00fcleyebilirsiniz. Bu, servisin ba\u015far\u0131yla da\u011f\u0131t\u0131ld\u0131\u011f\u0131n\u0131 g\u00f6sterir. Ayr\u0131ca, Axis2 Y\u00f6netim Konsolu (<code>http:\/\/localhost:8080\/axis2\/axis2-admin<\/code>) \u00fczerinden &#8220;Deployed Services&#8221; b\u00f6l\u00fcm\u00fcnde servisinizi g\u00f6rebilirsiniz.<\/p>\n<h4>2. Top-Down Yakla\u015f\u0131m\u0131 (WSDL&#8217;den Java&#8217;ya)<\/h4>\n<p>Bu yakla\u015f\u0131mda, \u00f6nce bir WSDL dosyas\u0131 tan\u0131mlars\u0131n\u0131z veya mevcut bir WSDL dosyas\u0131n\u0131 kullan\u0131rs\u0131n\u0131z. Daha sonra Axis2&#8217;nin <code>WSDL2Java<\/code> arac\u0131n\u0131 kullanarak bu WSDL dosyas\u0131ndan Java aray\u00fczleri, veri s\u0131n\u0131flar\u0131 ve servis iskeletleri (skeleton) olu\u015fturursunuz. Bu yakla\u015f\u0131m, mevcut bir Web servisi tan\u0131m\u0131na (WSDL) sahip oldu\u011funuzda veya servis s\u00f6zle\u015fmesini (contract-first) \u00f6nceliklendirdi\u011finizde tercih edilir.<\/p>\n<h5>a. Mevcut Bir WSDL Dosyas\u0131<\/h5>\n<p>\u00d6rnek olarak basit bir hesap makinesi servisi i\u00e7in bir WSDL dosyas\u0131 oldu\u011funu varsayal\u0131m.<\/p>\n<pre><code class=\"language-xml\"><!-- calculator.wsdl -->\n<wsdl:definitions xmlns:wsdl=\"http:\/\/schemas.xmlsoap.org\/wsdl\/\"\n                  xmlns:soap=\"http:\/\/schemas.xmlsoap.org\/wsdl\/soap\/\"\n                  xmlns:xsd=\"http:\/\/www.w3.org\/2001\/XMLSchema\"\n                  xmlns:tns=\"http:\/\/services.example.com\"\n                  targetNamespace=\"http:\/\/services.example.com\">\n    <wsdl:types>\n        <xsd:schema targetNamespace=\"http:\/\/services.example.com\">\n            <xsd:element name=\"add\">\n                <xsd:complexType>\n                    <xsd:sequence>\n                        <xsd:element name=\"a\" type=\"xsd:int\"\/>\n                        <xsd:element name=\"b\" type=\"xsd:int\"\/>\n                    <\/xsd:sequence>\n                <\/xsd:complexType>\n            <\/xsd:element>\n            <xsd:element name=\"addResponse\">\n                <xsd:complexType>\n                    <xsd:sequence>\n                        <xsd:element name=\"return\" type=\"xsd:int\"\/>\n                    <\/xsd:sequence>\n                <\/xsd:complexType>\n            <\/xsd:element>\n            <!-- Di\u011fer operasyonlar i\u00e7in benzer tan\u0131mlamalar -->\n        <\/xsd:schema>\n    <\/wsdl:types>\n    <wsdl:message name=\"addRequest\">\n        <wsdl:part name=\"parameters\" element=\"tns:add\"\/>\n    <\/wsdl:message>\n    <wsdl:message name=\"addResponse\">\n        <wsdl:part name=\"parameters\" element=\"tns:addResponse\"\/>\n    <\/wsdl:message>\n    <wsdl:portType name=\"CalculatorServicePortType\">\n        <wsdl:operation name=\"add\">\n            <wsdl:input message=\"tns:addRequest\"\/>\n            <wsdl:output message=\"tns:addResponse\"\/>\n        <\/wsdl:operation>\n        <!-- Di\u011fer operasyonlar -->\n    <\/wsdl:portType>\n    <wsdl:binding name=\"CalculatorServiceSOAPBinding\" type=\"tns:CalculatorServicePortType\">\n        <soap:binding style=\"document\" transport=\"http:\/\/schemas.xmlsoap.org\/soap\/http\"\/>\n        <wsdl:operation name=\"add\">\n            <soap:operation soapAction=\"urn:add\"\/>\n            <wsdl:input>\n                <soap:body use=\"literal\"\/>\n            <\/wsdl:input>\n            <wsdl:output>\n                <soap:body use=\"literal\"\/>\n            <\/wsdl:output>\n        <\/wsdl:operation>\n    <\/wsdl:binding>\n    <wsdl:service name=\"CalculatorService\">\n        <wsdl:port name=\"CalculatorServiceSOAPPort\" binding=\"tns:CalculatorServiceSOAPBinding\">\n            <soap:address location=\"http:\/\/localhost:8080\/axis2\/services\/CalculatorService\"\/>\n        <\/wsdl:port>\n    <\/wsdl:service>\n<\/wsdl:definitions><\/code><\/pre>\n<h5>b. Axis2&#8217;nin WSDL2Java Arac\u0131<\/h5>\n<p>Axis2 da\u011f\u0131t\u0131m\u0131n\u0131n <code>bin<\/code> dizininde <code>wsdl2java.sh<\/code> (Linux\/macOS) veya <code>wsdl2java.bat<\/code> (Windows) betikleri bulunur. Bu arac\u0131 kullanarak WSDL&#8217;den Java kodunu \u00fcretebilirsiniz.<br \/>\nKomut sat\u0131r\u0131ndan:<\/p>\n<pre><code class=\"language-bash\"># Linux\/macOS\n.\/wsdl2java.sh -uri path\/to\/calculator.wsdl -p com.example.services -d adb -s -ss -o output_directory\n\n<h2>Windows<\/h2>\nwsdl2java.bat -uri path\\to\\calculator.wsdl -p com.example.services -d adb -s -ss -o output_directory<\/code><\/pre>\n<p>Parametrelerin a\u00e7\u0131klamas\u0131:<\/p>\n<ul>\n<li><code>-uri<\/code>: WSDL dosyas\u0131n\u0131n yolu.<\/li>\n<li><code>-p<\/code>: Olu\u015fturulan s\u0131n\u0131flar\u0131n paket ad\u0131.<\/li>\n<li><code>-d adb<\/code>: Veri ba\u011flama mekanizmas\u0131 olarak Axis Data Binding (ADB) kullan. (Di\u011fer se\u00e7enekler: <code>xmlbeans<\/code>, <code>jaxb<\/code>).<\/li>\n<li><code>-s<\/code>: Senkron istemci kodu olu\u015ftur.<\/li>\n<li><code>-ss<\/code>: Servis iskeleti (skeleton) s\u0131n\u0131f\u0131 olu\u015ftur. Bu, servis implementasyonunuz i\u00e7in bir taslak sa\u011flar.<\/li>\n<li><code>-o<\/code>: Olu\u015fturulan kodun kaydedilece\u011fi \u00e7\u0131k\u0131\u015f dizini.<\/li>\n<\/ul>\n<p>Bu komut, belirtilen <code>output_directory<\/code> i\u00e7inde <code>com.example.services<\/code> paketinde <code>CalculatorServiceStub.java<\/code> (istemci i\u00e7in), <code>CalculatorServiceSkeleton.java<\/code> (servis implementasyonu i\u00e7in) ve veri s\u0131n\u0131flar\u0131n\u0131 olu\u015fturacakt\u0131r.<\/p>\n<h5>c. Olu\u015fturulan Kodun Anla\u015f\u0131lmas\u0131<\/h5>\n<ul>\n<li><code>CalculatorServiceSkeleton.java<\/code>: Bu s\u0131n\u0131f, WSDL&#8217;de tan\u0131mlanan her operasyon i\u00e7in bo\u015f metotlar i\u00e7eren bir aray\u00fcz ve soyut bir implementasyon sa\u011flar. Servis mant\u0131\u011f\u0131n\u0131z\u0131 bu iskelet s\u0131n\u0131f\u0131n\u0131 geni\u015fleterek veya implemente ederek yazacaks\u0131n\u0131z.<\/li>\n<li><code>CalculatorServiceMessageReceiverInOut.java<\/code>: Gelen SOAP mesajlar\u0131n\u0131 ilgili iskelet metoduna y\u00f6nlendiren i\u00e7 bir s\u0131n\u0131ft\u0131r.<\/li>\n<li>Veri S\u0131n\u0131flar\u0131: WSDL&#8217;deki karma\u015f\u0131k tipler (\u00f6rne\u011fin <code>add<\/code>, <code>addResponse<\/code>) i\u00e7in Java s\u0131n\u0131flar\u0131 olu\u015fturulur.<\/li>\n<\/ul>\n<h5>d. Servis \u0130skeletini Uygulama<\/h5>\n<p>Olu\u015fturulan <code>CalculatorServiceSkeleton.java<\/code> dosyas\u0131n\u0131 a\u00e7\u0131n ve bo\u015f metotlar\u0131 kendi i\u015f mant\u0131\u011f\u0131n\u0131zla doldurun.<\/p>\n<pre><code class=\"language-java\">\/\/ output_directory\/src\/com\/example\/services\/CalculatorServiceSkeleton.java (d\u00fczenlenmi\u015f hali)\npackage com.example.services;\n\nimport com.example.services.Add; \/\/ Olu\u015fturulan veri s\u0131n\u0131f\u0131\nimport com.example.services.AddResponse; \/\/ Olu\u015fturulan veri s\u0131n\u0131f\u0131\n\npublic class CalculatorServiceSkeleton {\n\n    public com.example.services.AddResponse add(com.example.services.Add addRequest) {\n        int a = addRequest.getA();\n        int b = addRequest.getB();\n        int result = a + b;\n        AddResponse response = new AddResponse();\n        response.setReturn(result);\n        return response;\n    }\n\n    \/\/ Di\u011fer operasyonlar\u0131 da benzer \u015fekilde implemente edin\n}<\/code><\/pre>\n<h5>e. AAR Olu\u015fturma ve Da\u011f\u0131tma<\/h5>\n<p>\u0130mplemente etti\u011finiz iskelet s\u0131n\u0131f\u0131n\u0131z\u0131 ve <code>WSDL2Java<\/code> taraf\u0131ndan olu\u015fturulan di\u011fer s\u0131n\u0131flar\u0131 bir araya getirerek bir AAR dosyas\u0131 olu\u015fturman\u0131z gerekir. <code>WSDL2Java<\/code> arac\u0131 genellikle <code>resources\/META-INF<\/code> alt\u0131nda otomatik olarak bir <code>services.xml<\/code> dosyas\u0131 da olu\u015fturur. E\u011fer olu\u015fturmad\u0131ysa, bottom-up yakla\u015f\u0131m\u0131nda yapt\u0131\u011f\u0131n\u0131z gibi manuel olarak olu\u015fturman\u0131z gerekir.<br \/>\nOlu\u015fturulan t\u00fcm <code>.class<\/code> dosyalar\u0131n\u0131 ve <code>services.xml<\/code> dosyas\u0131n\u0131 i\u00e7eren bir AAR dosyas\u0131 olu\u015fturun ve bunu <code>webapps\/axis2\/WEB-INF\/services<\/code> dizinine kopyalay\u0131n.<\/p>\n<h3>\u0130stemci Geli\u015ftirme<\/h3>\n<p>Bir Web servisi geli\u015ftirmenin yan\u0131 s\u0131ra, bu servise eri\u015fecek bir istemci uygulamas\u0131 geli\u015ftirmek de \u00f6nemlidir. Axis2, istemci geli\u015ftirmek i\u00e7in de g\u00fc\u00e7l\u00fc ara\u00e7lar sunar.<\/p>\n<h4>1. Axis2 \u0130stemci K\u00fct\u00fcphaneleri<\/h4>\n<p>Axis2 istemci uygulamalar\u0131, Axis2 da\u011f\u0131t\u0131m\u0131n\u0131n <code>lib<\/code> klas\u00f6r\u00fcndeki JAR dosyalar\u0131n\u0131 (\u00f6zellikle <code>axis2-kernel-x.x.x.jar<\/code>, <code>axis2-adb-x.x.x.jar<\/code> vb.) s\u0131n\u0131f yoluna eklemelidir.<\/p>\n<h4>2. WSDL2Java ile \u0130stemci Kodu Olu\u015fturma<\/h4>\n<p>Servis geli\u015ftirme b\u00f6l\u00fcm\u00fcnde oldu\u011fu gibi, <code>WSDL2Java<\/code> arac\u0131n\u0131 kullanarak WSDL&#8217;den istemci kodu (stub s\u0131n\u0131f\u0131) \u00fcretebilirsiniz. Bu, istemci taraf\u0131nda SOAP mesajlar\u0131n\u0131n olu\u015fturulmas\u0131 ve ayr\u0131\u015ft\u0131r\u0131lmas\u0131 gibi karma\u015f\u0131k g\u00f6revleri basitle\u015ftirir.<\/p>\n<pre><code class=\"language-bash\"># Sadece istemci kodu i\u00e7in -ss parametresini kullanmay\u0131n\n.\/wsdl2java.sh -uri path\/to\/calculator.wsdl -p com.example.client -d adb -s -o output_directory<\/code><\/pre>\n<p>Bu komut, <code>CalculatorServiceStub.java<\/code> adl\u0131 bir stub s\u0131n\u0131f\u0131 olu\u015fturacakt\u0131r.<\/p>\n<h4>3. Asenkron ve Senkron \u0130stemci \u00c7a\u011fr\u0131lar\u0131<\/h4>\n<p>Axis2 stub s\u0131n\u0131flar\u0131, hem senkron (blocking) hem de asenkron (non-blocking) operasyon \u00e7a\u011fr\u0131lar\u0131n\u0131 destekler.<\/p>\n<h5>a. Senkron \u0130stemci \u00c7a\u011fr\u0131s\u0131 \u00d6rne\u011fi<\/h5>\n<p>Senkron \u00e7a\u011fr\u0131lar, operasyon tamamlanana ve yan\u0131t d\u00f6nene kadar program\u0131n y\u00fcr\u00fct\u00fclmesini durdurur.<\/p>\n<pre><code class=\"language-java\">package com.example.client;\n\nimport com.example.services.CalculatorServiceStub;\nimport com.example.services.Add;\nimport com.example.services.AddResponse;\n\npublic class CalculatorClient {\n    public static void main(String[] args) {\n        try {\n            \/\/ Servis endpoint URL'si\n            String endpoint = \"http:\/\/localhost:8080\/axis2\/services\/CalculatorService\";\n            CalculatorServiceStub stub = new CalculatorServiceStub(endpoint);\n\n            \/\/ Add operasyonunu \u00e7a\u011f\u0131rma\n            Add addRequest = new Add();\n            addRequest.setA(10);\n            addRequest.setB(5);\n\n            AddResponse addResponse = stub.add(addRequest);\n            System.out.println(\"10 + 5 = \" + addResponse.getReturn());\n\n            \/\/ Di\u011fer operasyonlar\u0131 da benzer \u015fekilde \u00e7a\u011f\u0131rabilirsiniz\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n    }\n}<\/code><\/pre>\n<h5>b. Asenkron \u0130stemci \u00c7a\u011fr\u0131s\u0131 \u00d6rne\u011fi<\/h5>\n<p>Asenkron \u00e7a\u011fr\u0131lar, operasyonu ba\u015flatt\u0131ktan hemen sonra kontrol\u00fc programa geri verir ve yan\u0131t geldi\u011finde bir geri \u00e7a\u011f\u0131rma (callback) metodu arac\u0131l\u0131\u011f\u0131yla i\u015flenir.<\/p>\n<pre><code class=\"language-java\">package com.example.client;\n\nimport com.example.services.CalculatorServiceStub;\nimport com.example.services.Add;\nimport com.example.services.AddResponse;\n\npublic class CalculatorAsyncClient {\n    public static void main(String[] args) throws Exception {\n        String endpoint = \"http:\/\/localhost:8080\/axis2\/services\/CalculatorService\";\n        CalculatorServiceStub stub = new CalculatorServiceStub(endpoint);\n\n        Add addRequest = new Add();\n        addRequest.setA(20);\n        addRequest.setB(15);\n\n        \/\/ Asenkron \u00e7a\u011fr\u0131 yap ve bir geri \u00e7a\u011f\u0131rma nesnesi sa\u011fla\n        stub.startadd(addRequest, new CalculatorServiceStub.AddCallbackHandler() {\n            @Override\n            public void receiveResultadd(AddResponse result) {\n                System.out.println(\"Asenkron: 20 + 15 = \" + result.getReturn());\n            }\n\n            @Override\n            public void receiveErroradd(Exception e) {\n                System.err.println(\"Asenkron \u00e7a\u011fr\u0131 hatas\u0131: \" + e.getMessage());\n                e.printStackTrace();\n            }\n        });\n\n        System.out.println(\"Asenkron \u00e7a\u011fr\u0131 g\u00f6nderildi, program devam ediyor...\");\n\n        \/\/ Asenkron i\u015flemin tamamlanmas\u0131 i\u00e7in bir s\u00fcre bekleyelim\n        Thread.sleep(5000);\n    }\n}<\/code><\/pre>\n<p>Asenkron \u00e7a\u011fr\u0131lar, \u00f6zellikle uzun s\u00fcren operasyonlarda kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fcn donmas\u0131n\u0131 engellemek veya birden fazla operasyonu paralel olarak \u00e7a\u011f\u0131rmak i\u00e7in faydal\u0131d\u0131r.<\/p>\n<h4>4. Data Binding Mekanizmalar\u0131<\/h4>\n<p>Axis2, Java nesneleri ile XML aras\u0131nda d\u00f6n\u00fc\u015f\u00fcm yapmak i\u00e7in \u00e7e\u015fitli veri ba\u011flama mekanizmalar\u0131n\u0131 destekler:<\/p>\n<ul>\n<li><b>ADB (Axis Data Binding):<\/b> Axis2&#8217;nin varsay\u0131lan ve en h\u0131zl\u0131 veri ba\u011flama mekanizmas\u0131d\u0131r. Basit ve performantt\u0131r.<\/li>\n<li><b>XMLBeans:<\/b> XML Schema&#8217;y\u0131 Java nesnelerine d\u00f6n\u00fc\u015ft\u00fcrmek i\u00e7in g\u00fc\u00e7l\u00fc ve esnek bir se\u00e7enektir. Daha karma\u015f\u0131k XML \u015femalar\u0131 i\u00e7in uygundur.<\/li>\n<li><b>JAXB (Java Architecture for XML Binding):<\/b> Java SE&#8217;nin bir par\u00e7as\u0131 olan standart bir Java API&#8217;sidir. Geni\u015f \u00e7apta benimsenmi\u015ftir ve XML \u015fema ile Java nesneleri aras\u0131nda e\u015fleme i\u00e7in zengin \u00f6zellikler sunar.<\/li>\n<\/ul>\n<p>Se\u00e7im, projenizin gereksinimlerine, performans beklentilerine ve XML \u015fema karma\u015f\u0131kl\u0131\u011f\u0131na ba\u011fl\u0131d\u0131r.<\/p>\n<h3>Geli\u015fmi\u015f Konular ve En \u0130yi Uygulamalar<\/h3>\n<p>Axis2 sadece temel Web servislerini olu\u015fturmakla kalmaz, ayn\u0131 zamanda g\u00fcvenlik, hata y\u00f6netimi ve performans gibi geli\u015fmi\u015f konular\u0131 da ele almak i\u00e7in \u00f6zellikler sunar.<\/p>\n<h4>1. G\u00fcvenlik (Security)<\/h4>\n<p>Web servislerinin g\u00fcvenli\u011fi kritik bir konudur. Axis2, \u00e7e\u015fitli g\u00fcvenlik mekanizmalar\u0131n\u0131 destekler:<\/p>\n<ul>\n<li><b>Ta\u015f\u0131ma Seviyesi G\u00fcvenli\u011fi (Transport Level Security &#8211; HTTPS):<\/b> En temel g\u00fcvenlik katman\u0131d\u0131r. HTTP yerine HTTPS kullanarak mesajlar\u0131n a\u011f \u00fczerinden \u015fifreli bir \u015fekilde iletilmesini sa\u011flar. Tomcat gibi Servlet konteynerlerinde SSL\/TLS yap\u0131land\u0131rmas\u0131 yaparak etkinle\u015ftirilir.<\/li>\n<li><b>Mesaj Seviyesi G\u00fcvenli\u011fi (Message Level Security &#8211; WS-Security):<\/b> SOAP mesajlar\u0131n\u0131n kendisini \u015fifrelemek, imzalamak ve kimlik do\u011frulamak i\u00e7in kullan\u0131l\u0131r. Axis2, Apache Rampart mod\u00fcl\u00fc arac\u0131l\u0131\u011f\u0131yla WS-Security standard\u0131n\u0131 destekler. Rampart, XML imzalama, XML \u015fifreleme ve g\u00fcvenlik tokenlar\u0131 (\u00f6rne\u011fin UsernameToken, X.509 sertifikalar\u0131) gibi \u00f6zellikleri sunar. WS-Security, mesajlar\u0131n ara d\u00fc\u011f\u00fcmlerden ge\u00e7erken bile g\u00fcvenli\u011fini sa\u011flar.<\/li>\n<\/ul>\n<h4>2. Hata Y\u00f6netimi (Error Handling)<\/h4>\n<p>Web servislerinde hatalar\u0131n do\u011fru bir \u015fekilde iletilmesi \u00f6nemlidir. SOAP protokol\u00fc, hatalar\u0131 bildirmek i\u00e7in &#8220;SOAP Fault&#8221; mekanizmas\u0131n\u0131 tan\u0131mlar. Bir serviste bir hata olu\u015ftu\u011funda, Axis2 otomatik olarak bir SOAP Fault mesaj\u0131 olu\u015fturabilir veya siz \u00f6zel hata durumlar\u0131 i\u00e7in kendi Fault&#8217;lar\u0131n\u0131z\u0131 f\u0131rlatabilirsiniz.<br \/>\nSOAP Fault mesaj\u0131 genellikle bir <code>faultcode<\/code>, <code>faultstring<\/code>, <code>faultactor<\/code> ve <code>detail<\/code> elemanlar\u0131n\u0131 i\u00e7erir. \u0130stemci taraf\u0131nda, <code>RemoteException<\/code> veya servise \u00f6zel istisnalar arac\u0131l\u0131\u011f\u0131yla bu Fault&#8217;lar\u0131 yakalayabilirsiniz.<\/p>\n<h4>3. Performans \u0130yile\u015ftirmeleri<\/h4>\n<ul>\n<li><b>Veri Ba\u011flama Se\u00e7imi:<\/b> ADB, genellikle en h\u0131zl\u0131 veri ba\u011flama mekanizmas\u0131d\u0131r. Performans kritik uygulamalarda ADB tercih edilebilir.<\/li>\n<li><b>MTOM (Message Transmission Optimization Mechanism):<\/b> B\u00fcy\u00fck ikili verileri (resimler, dosyalar) SOAP mesaj\u0131 i\u00e7inde base64 olarak kodlamak yerine, do\u011frudan ikili formatta g\u00f6ndermek i\u00e7in MTOM kullan\u0131l\u0131r. Bu, mesaj boyutunu ve i\u015fleme s\u00fcresini \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r. Axis2, MTOM&#8217;u varsay\u0131lan olarak destekler.<\/li>\n<li><b>Mesaj Boyutu:<\/b> M\u00fcmk\u00fcn oldu\u011funca k\u00fc\u00e7\u00fck ve optimize edilmi\u015f mesajlar g\u00f6nderin. Gereksiz veri aktar\u0131m\u0131ndan ka\u00e7\u0131n\u0131n.<\/li>\n<li><b>Kaynak Havuzlama (Resource Pooling):<\/b> Veritaban\u0131 ba\u011flant\u0131lar\u0131 veya HTTP ba\u011flant\u0131lar\u0131 gibi kaynaklar\u0131 havuza almak, her istek i\u00e7in yeni kaynak olu\u015fturma maliyetini ortadan kald\u0131rarak performans\u0131 art\u0131r\u0131r.<\/li>\n<\/ul>\n<h4>4. Logging ve \u0130zleme (Logging and Monitoring)<\/h4>\n<p>Web servislerinin sorunsuz \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olmak ve hatalar\u0131 ay\u0131klamak i\u00e7in kapsaml\u0131 loglama \u00f6nemlidir. Axis2, Apache Log4j veya SLF4J\/Logback gibi pop\u00fcler Java loglama framework&#8217;leriyle kolayca entegre edilebilir.<br \/>\n<code>axis2.xml<\/code> yap\u0131land\u0131rma dosyas\u0131nda loglama seviyelerini ve \u00e7\u0131kt\u0131 hedeflerini ayarlayabilirsiniz. \u00dcretim ortamlar\u0131nda, servislerin performans\u0131n\u0131 ve kullan\u0131labilirli\u011fini izlemek i\u00e7in izleme ara\u00e7lar\u0131 kullanmak faydal\u0131d\u0131r.<\/p>\n<h4>5. Mod\u00fcller ve Handler&#8217;lar ile Geni\u015fletilebilirlik<\/h4>\n<p>Axis2&#8217;nin mod\u00fcler mimarisi, \u00e7ekirdek i\u015flevselli\u011fi de\u011fi\u015ftirmeden Web servislerinin davran\u0131\u015f\u0131n\u0131 geni\u015fletmenize olanak tan\u0131r. Kendi \u00f6zel handler&#8217;lar\u0131n\u0131z\u0131 yazarak mesaj ak\u0131\u015f\u0131n\u0131n belirli bir a\u015famas\u0131nda \u00f6zel mant\u0131k uygulayabilirsiniz. \u00d6rne\u011fin, gelen her mesaj\u0131 bir veritaban\u0131na kaydeden veya belirli bir ba\u015fl\u0131\u011f\u0131 do\u011frulayan bir handler yazabilirsiniz. Bu, \u00e7apraz kesen endi\u015feleri (cross-cutting concerns) y\u00f6netmek i\u00e7in g\u00fc\u00e7l\u00fc bir yoldur.<\/p>\n<h3>Sorun Giderme (Troubleshooting)<\/h3>\n<p>Web servisleri geli\u015ftirirken veya da\u011f\u0131t\u0131rken sorunlarla kar\u015f\u0131la\u015fmak do\u011fald\u0131r. \u0130\u015fte yayg\u0131n sorunlar ve \u00e7\u00f6z\u00fcm ipu\u00e7lar\u0131:<\/p>\n<h4>1. Yayg\u0131n Hatalar<\/h4>\n<ul>\n<li><b>Deployment Sorunlar\u0131:<\/b> AAR dosyas\u0131n\u0131n <code>WEB-INF\/services<\/code> klas\u00f6r\u00fcne do\u011fru kopyalan\u0131p kopyalanmad\u0131\u011f\u0131n\u0131 kontrol edin. <code>services.xml<\/code> dosyas\u0131ndaki s\u0131n\u0131f adlar\u0131n\u0131n ve operasyon tan\u0131mlar\u0131n\u0131n do\u011fru oldu\u011fundan emin olun. Tomcat veya uygulama sunucusunun loglar\u0131n\u0131 kontrol edin.<\/li>\n<li><b>S\u0131n\u0131f Yolu (Classpath) Sorunlar\u0131:<\/b> <code>NoClassDefFoundError<\/code> veya <code>ClassNotFoundException<\/code> gibi hatalar, gerekli JAR dosyalar\u0131n\u0131n (Axis2 k\u00fct\u00fcphaneleri veya servis s\u0131n\u0131f\u0131n\u0131z) uygulama sunucusunun veya istemcinin s\u0131n\u0131f yolunda bulunmad\u0131\u011f\u0131n\u0131 g\u00f6sterir. Maven\/Gradle kullan\u0131yorsan\u0131z ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131z\u0131n do\u011fru oldu\u011fundan, manuel olarak ekliyorsan\u0131z t\u00fcm JAR&#8217;lar\u0131n do\u011fru yerle\u015ftirildi\u011finden emin olun.<\/li>\n<li><b>XML \u015eema Do\u011frulama Hatalar\u0131:<\/b> Servis veya istemci taraf\u0131nda XML \u015fema do\u011frulama hatalar\u0131 al\u0131yorsan\u0131z, g\u00f6nderilen SOAP mesaj\u0131n\u0131n WSDL&#8217;de tan\u0131mlanan \u015femaya uygun oldu\u011fundan emin olun. <code>WSDL2Java<\/code> arac\u0131yla olu\u015fturulan veri s\u0131n\u0131flar\u0131n\u0131 kullanmak bu t\u00fcr hatalar\u0131 en aza indirir.<\/li>\n<li><b>Endpoint URL Yanl\u0131\u015fl\u0131\u011f\u0131:<\/b> \u0130stemcinin \u00e7a\u011f\u0131rd\u0131\u011f\u0131 servis endpoint URL&#8217;sinin do\u011fru oldu\u011fundan emin olun (<code>http:\/\/localhost:8080\/axis2\/services\/YourService<\/code>).<\/li>\n<\/ul>\n<h4>2. Log&#8217;lar\u0131 Kullanma<\/h4>\n<p>Axis2 ve uygulama sunucunuzun (Tomcat) log dosyalar\u0131, sorun giderme i\u00e7in en de\u011ferli bilgi kaynaklar\u0131d\u0131r.<\/p>\n<ul>\n<li><b>Tomcat Loglar\u0131:<\/b> <code>TOMCAT_HOME\/logs<\/code> dizinindeki <code>catalina.out<\/code> veya <code>localhost.<date>.log<\/code> dosyalar\u0131n\u0131 kontrol edin.<\/li>\n<li><b>Axis2 Loglar\u0131:<\/b> Axis2&#8217;nin kendi loglar\u0131 da olabilir. <code>axis2.xml<\/code> dosyas\u0131ndaki loglama yap\u0131land\u0131rmas\u0131na bak\u0131n.<\/li>\n<\/ul>\n<p>Log seviyelerini <code>DEBUG<\/code> veya <code>TRACE<\/code> olarak ayarlamak, mesaj ak\u0131\u015f\u0131n\u0131 ve dahili Axis2 i\u015flemlerini daha ayr\u0131nt\u0131l\u0131 g\u00f6rmek i\u00e7in faydal\u0131 olabilir.<\/p>\n<h4>3. Axis2 Y\u00f6netim Konsolu<\/h4>\n<p><code>http:\/\/localhost:8080\/axis2\/axis2-admin<\/code> adresindeki Axis2 Y\u00f6netim Konsolu, da\u011f\u0131t\u0131lm\u0131\u015f servisleri, mod\u00fclleri ve genel yap\u0131land\u0131rmay\u0131 kontrol etmek i\u00e7in harika bir ara\u00e7t\u0131r. Servisinizin da\u011f\u0131t\u0131l\u0131p da\u011f\u0131t\u0131lmad\u0131\u011f\u0131n\u0131, WSDL&#8217;ini ve operasyonlar\u0131n\u0131 buradan do\u011frulayabilirsiniz. Ayr\u0131ca, konsol \u00fczerinden baz\u0131 servisleri devre d\u0131\u015f\u0131 b\u0131rakabilir veya yeniden y\u00fckleyebilirsiniz.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Apache Axis2, Java tabanl\u0131 Web servisleri geli\u015ftirme ve da\u011f\u0131tma konusunda g\u00fc\u00e7l\u00fc, esnek ve kapsaml\u0131 bir framework&#8217;t\u00fcr. Bu e\u011fitimde, Web servislerinin temel kavramlar\u0131ndan ba\u015flayarak, Axis2&#8217;nin mimarisine, geli\u015ftirme ortam\u0131n\u0131n haz\u0131rlanmas\u0131na, hem bottom-up hem de top-down yakla\u015f\u0131mlar\u0131yla servis geli\u015ftirmeye, istemci olu\u015fturmaya ve geli\u015fmi\u015f konulara kadar geni\u015f bir yelpazeyi ele ald\u0131k.<\/p>\n<p>Axis2&#8217;nin mod\u00fcler yap\u0131s\u0131, farkl\u0131 veri ba\u011flama se\u00e7enekleri ve geni\u015f standart deste\u011fi, onu kurumsal d\u00fczeyde Web servisleri \u00e7\u00f6z\u00fcmleri i\u00e7in cazip bir se\u00e7enek haline getirmektedir. G\u00fcvenlik, hata y\u00f6netimi ve performans iyile\u015ftirmeleri gibi konulara dikkat ederek, sa\u011flam ve \u00f6l\u00e7eklenebilir Web servisleri olu\u015fturabilirsiniz.<\/p>\n<p>Web servisleri teknolojisi s\u00fcrekli geli\u015fmektedir. SOAP tabanl\u0131 servisler hala bir\u00e7ok kurumsal entegrasyon senaryosunda yayg\u0131n olarak kullan\u0131l\u0131rken, RESTful servisler de pop\u00fclerli\u011fini art\u0131rm\u0131\u015ft\u0131r. Axis2, temel olarak SOAP&#8217;a odaklansa da, baz\u0131 REST deste\u011fi de sunmaktad\u0131r. Bu makalede edinilen bilgiler, Web servisleri d\u00fcnyas\u0131na sa\u011flam bir giri\u015f yapman\u0131z\u0131 ve Axis2 ile kendi \u00e7\u00f6z\u00fcmlerinizi geli\u015ftirmeye ba\u015flaman\u0131z\u0131 sa\u011flayacakt\u0131r. Daha fazla bilgi ve en g\u00fcncel detaylar i\u00e7in Apache Axis2&#8217;nin resmi belgelerini ve topluluk kaynaklar\u0131n\u0131 takip etmeniz \u015fiddetle tavsiye edilir.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Axis2 Web Servisleri E\u011fitimi: SOAP Tabanl\u0131 Servis Geli\u015ftirme ve Da\u011f\u0131tma\nGiri\u015f\nG\u00fcn\u00fcm\u00fcz\u00fcn ba\u011flant\u0131l\u0131 d\u00fcnyas\u0131nda, farkl\u0131 sistemlerin ve","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-31277","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Axis2 Web Servisleri E\u011fitimi: SOAP Tabanl\u0131 Servis Geli\u015ftirme ve Da\u011f\u0131tma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/axis2-web-servisleri-egitimi-soap-tabanli-servis-gelistirme-ve-dagitma\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Axis2 Web Servisleri E\u011fitimi: SOAP Tabanl\u0131 Servis Geli\u015ftirme ve Da\u011f\u0131tma\" \/>\n<meta property=\"og:description\" content=\"Axis2 Web Servisleri E\u011fitimi: SOAP Tabanl\u0131 Servis Geli\u015ftirme ve Da\u011f\u0131tma Giri\u015f G\u00fcn\u00fcm\u00fcz\u00fcn ba\u011flant\u0131l\u0131 d\u00fcnyas\u0131nda, farkl\u0131 sistemlerin ve\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/axis2-web-servisleri-egitimi-soap-tabanli-servis-gelistirme-ve-dagitma\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-08T02:41:11+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"23 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/axis2-web-servisleri-egitimi-soap-tabanli-servis-gelistirme-ve-dagitma\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/axis2-web-servisleri-egitimi-soap-tabanli-servis-gelistirme-ve-dagitma\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Axis2 Web Servisleri E\u011fitimi: SOAP Tabanl\u0131 Servis Geli\u015ftirme ve Da\u011f\u0131tma\",\"datePublished\":\"2025-10-08T02:41:11+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/axis2-web-servisleri-egitimi-soap-tabanli-servis-gelistirme-ve-dagitma\/\"},\"wordCount\":4019,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/axis2-web-servisleri-egitimi-soap-tabanli-servis-gelistirme-ve-dagitma\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/axis2-web-servisleri-egitimi-soap-tabanli-servis-gelistirme-ve-dagitma\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/axis2-web-servisleri-egitimi-soap-tabanli-servis-gelistirme-ve-dagitma\/\",\"name\":\"Axis2 Web Servisleri E\u011fitimi: SOAP Tabanl\u0131 Servis Geli\u015ftirme ve Da\u011f\u0131tma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-08T02:41:11+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/axis2-web-servisleri-egitimi-soap-tabanli-servis-gelistirme-ve-dagitma\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/axis2-web-servisleri-egitimi-soap-tabanli-servis-gelistirme-ve-dagitma\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/axis2-web-servisleri-egitimi-soap-tabanli-servis-gelistirme-ve-dagitma\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Axis2 Web Servisleri E\u011fitimi: SOAP Tabanl\u0131 Servis Geli\u015ftirme ve Da\u011f\u0131tma\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Axis2 Web Servisleri E\u011fitimi: SOAP Tabanl\u0131 Servis Geli\u015ftirme ve Da\u011f\u0131tma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/axis2-web-servisleri-egitimi-soap-tabanli-servis-gelistirme-ve-dagitma\/","og_locale":"tr_TR","og_type":"article","og_title":"Axis2 Web Servisleri E\u011fitimi: SOAP Tabanl\u0131 Servis Geli\u015ftirme ve Da\u011f\u0131tma","og_description":"Axis2 Web Servisleri E\u011fitimi: SOAP Tabanl\u0131 Servis Geli\u015ftirme ve Da\u011f\u0131tma Giri\u015f G\u00fcn\u00fcm\u00fcz\u00fcn ba\u011flant\u0131l\u0131 d\u00fcnyas\u0131nda, farkl\u0131 sistemlerin ve","og_url":"https:\/\/fatihsoysal.com\/blog\/axis2-web-servisleri-egitimi-soap-tabanli-servis-gelistirme-ve-dagitma\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-08T02:41:11+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"23 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/axis2-web-servisleri-egitimi-soap-tabanli-servis-gelistirme-ve-dagitma\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/axis2-web-servisleri-egitimi-soap-tabanli-servis-gelistirme-ve-dagitma\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Axis2 Web Servisleri E\u011fitimi: SOAP Tabanl\u0131 Servis Geli\u015ftirme ve Da\u011f\u0131tma","datePublished":"2025-10-08T02:41:11+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/axis2-web-servisleri-egitimi-soap-tabanli-servis-gelistirme-ve-dagitma\/"},"wordCount":4019,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/axis2-web-servisleri-egitimi-soap-tabanli-servis-gelistirme-ve-dagitma\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/axis2-web-servisleri-egitimi-soap-tabanli-servis-gelistirme-ve-dagitma\/","url":"https:\/\/fatihsoysal.com\/blog\/axis2-web-servisleri-egitimi-soap-tabanli-servis-gelistirme-ve-dagitma\/","name":"Axis2 Web Servisleri E\u011fitimi: SOAP Tabanl\u0131 Servis Geli\u015ftirme ve Da\u011f\u0131tma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-08T02:41:11+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/axis2-web-servisleri-egitimi-soap-tabanli-servis-gelistirme-ve-dagitma\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/axis2-web-servisleri-egitimi-soap-tabanli-servis-gelistirme-ve-dagitma\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/axis2-web-servisleri-egitimi-soap-tabanli-servis-gelistirme-ve-dagitma\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Axis2 Web Servisleri E\u011fitimi: SOAP Tabanl\u0131 Servis Geli\u015ftirme ve Da\u011f\u0131tma"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31277","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=31277"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31277\/revisions"}],"predecessor-version":[{"id":31278,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31277\/revisions\/31278"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=31277"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=31277"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=31277"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}