Spring Web Service
-
Upload
dasgin -
Category
Self Improvement
-
view
1.793 -
download
1
description
Transcript of Spring Web Service
![Page 1: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/1.jpg)
1/35
MUSTAFA DEMİR&
MUSTAFA DAŞGIN
Spring Web Service
![Page 2: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/2.jpg)
2/35
Biz Kimiz ?
Mustafa DEMİR ODTÜ Bilgisayar Mühendisliği Bölümü - 2005 Spring teknolojileri, JSF ve Hibernate Çevik uygulama geliştirme, TDD, Tasarım Örüntüleri http://demirm.blogspot.com [email protected]
Mustafa DAŞGIN Hacettepe Üniversitesi Bilgisayar Mühendisliği Bölümü - 2006 Spring teknolojileri, JSF ve Hibernate Refactoring, TDD, Tasarım Örüntüleri “Ucundan Java” http://mdasgin.blogspot.com [email protected]
![Page 3: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/3.jpg)
3/35
İçerik
Web Service Nedir ?WS Geliştirim YaklaşımlarıNeden Anlaşma Önce ?Neden Spring WS ?Spring WS TerimleriSpring WS MimarisiÖrnek Uygulama (Sunucu-İstemci)KaynakçaSorular
![Page 4: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/4.jpg)
4/35
Web Service Nedir ?
Bir ağ üzerinden farklı platformlara mensup makinelerin birlikte çalışabilirliğini destekleyecek şekilde tasarlanan yazılım sistemleri.
Servis ve bileşenlerin “tekrar kullanılabilirliği” Web Service vs. RPC/RMI XML
![Page 5: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/5.jpg)
5/35
WS Geliştirim Yaklaşımları
WSDL (Web Services Description Language) XML Belgesi Data Contract (XML Schema) WS’nin Konumu WS’nin Sunduğu Hizmetler (Operasyonlar)
Anlaşma Önce (Contract First)Anlaşma Sonra (Contract Last)
![Page 6: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/6.jpg)
6/35
Anlaşma Önce Yaklaşımı
WSDL belgesi baz alınır Sunucu ve istemci birbirinden bağımsız
gerçekleştirilir. Büyük projeler için idealdir.
WSDL, SOAP ve XSD ayrıntısına girilir. Öğrenim ve uygulama süresini uzatır. İş mantığı dışındaki ayrıntılarla da uğraştırır.
![Page 7: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/7.jpg)
7/35
Anlaşma Sonra Yaklaşımı
Gerçekleştirim baz alınır WSDL , SOAP ve XSD ayrıntısına girilmez. Öğrenim ve uygulama süresi kısadır. Sadece iş mantığıyla ilgilenmenizi sağlar.
Sunucu ve istemci geliştirimi birbirine bağımlıdır. Büyük Projeler için ideal değildir.
![Page 8: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/8.jpg)
8/35
Neden Anlaşma Önce ?
O/X Mapping Sorunları Davranış Farklılıkları
Java – Altsınıf XSD – Kısıtlamalar
<simpleType name="AirportCode"> <restriction base="string">
<pattern value="[A-Z][A-Z][A-Z]"/> </restriction>
</simpleType>
![Page 9: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/9.jpg)
9/35
Neden Anlaşma Önce ?
Desteklenmeyen veri tipleri Java – java.util.TreeMap .Net – System.Collections.Hashtable
XML – date tipi: 2007-04-04 Java Date ve Calendar sınıfı: 2007-04-04T00:00:00
<element name="GetFlightsRequest"> <complexType> <all>
<element name="departureDate" type="date"/> <element name="from" type="string"/>
<element name="to" type="string"/> </all> </complexType></element>
![Page 10: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/10.jpg)
10/35
Neden Anlaşma Önce ?
Döngüsel İlişkilerpublic class Flight {
private String number; private List<Passenger> passengers;
}
public class Passenger { private String name; private Flight flight;
}
<flight number="KL1117"> <passengers> <passenger> <name>Arjen Poutsma</name> <flight number="KL1117"> <passengers> <passenger> <name>Arjen Poutsma</name>
...
![Page 11: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/11.jpg)
11/35
Neden Anlaşma Önce ?
Kırılganlık Anlaşma sonra yaklaşım ile anlaşmanın uzun süre
sabit kalma garantisi yoktur. Kod değiştikçe anlaşma da değişir. Kullanılan Web Service mimarisinde değişikliğe gidilmesi
üretilen anlaşmayı da değiştirir.
Sunucu kodundan kaynaklı anlaşma değişikliği her defasında istemci kodlarının da değişikliğini gerektirir.
Anlaşmanın yararlı olması için uzun süre sabit kalması gerekir.
![Page 12: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/12.jpg)
12/35
Neden Anlaşma Önce ?
Performans Anlaşma sonra yaklaşımda karşıya neyin gönderileceği
belli değildir. Nesnenin ilişkili olduğu bir çok nesne XML’e dönüştürülüp gönderilebilir ve bu esnada performans ve cevap süreleri etkilenir.
Anlaşmanın belli olduğu durumda XML’de neyin karşıya gönderileceği açıkça bellidir.
Tekrar Kullanılabilirlik XSD bilgisini ayrı bir dosyada tanımlayarak tekrar
kullanılabilirliğini sağlanabilir.
![Page 13: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/13.jpg)
13/35
Neden Spring WS ?
Anlaşma önce yaklaşımın eksikliklerini kapatır. WSDL ve SOA ayrıntılarıyla uğraştırmaz. Sadece XSD
şeması
Öğrenim ve uygulama süresi çok kısadır Spring mantığını bilen geliştiriciler için.
İş mantığı dışındaki ayrıntıların çoğunu üstlenir.
Anlaşma ve gerçekleştirim arasındaki bağımlılığı azaltır.
![Page 14: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/14.jpg)
14/35
Neden Spring WS ?
Gelen XML mesajı, içeriğine göre herhangi bir nesneye mapping yapılabilir.
XML mesajı çeşitli XML API’leri kullanılarak işlenebilir. (DOM, SAX, StAX, JDOM, dom4j, XOM)
O/X Mapping modülü sayesinde çeşitli çatılar ile uyumlu çalışır. (JAXB 1 ve 2, Castor, XMLBeans, JiBX, and XStream)
SOAP mesajlarının şifrelenmesi için WS-Security desteği sağlar.
Spring Security(Acegi Security) ile bütünleşik çalışabilir böylece varsa Acegi ayarları SOAP servisleri için kullanılabilir.
![Page 15: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/15.jpg)
15/35
İçerik
Web Service Nedir ?WS Geliştirim YaklaşımlarıNeden Anlaşma Önce ?Neden Spring WS ?Spring WS TerimleriSpring WS MimarisiÖrnek Uygulama (Sunucu-İstemci)KaynakçaSorular
![Page 16: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/16.jpg)
16/35
Spring WS Terimleri
WebServiceMessage Platform bağımsız XML mesajlarını ifade eder. Web mesajlarındaki payload kısmına erişimi sağlar
SoapMessage SOAP için gerekli operasyonları içeren arayüzdür.
SOAP Envelope SOAP Action SOAP Header etc..
![Page 17: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/17.jpg)
17/35
Spring WS Terimleri
MessageFactory Sınıfları Web servis mesajları oluşturmayı sağlarlar. Farklı kaynaklardan (input streams) web servis
mesajları oluşturmaya yardımcı olurlar.
Gerçekleştirimleri:
SaajSoapMessageFactory (SOAP with Attachments API for Java) JEE 1.4 ün parçası– uygulama sunucuları tarafından en çok
desteklenen tür DOM API sini kullanır – SOAP mesajları bellekte tutulur.
Büyük mesajlar için performanslı değildir.
![Page 18: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/18.jpg)
18/35
Spring WS Terimleri
MessageFactory Sınıfları AxiomSoapMessageFactory
Axis 2 Object Model kullanır. STAX (Streaming API for XML) üzerine kuruludur. Büyük mesajlar için uygundur.
![Page 19: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/19.jpg)
19/35
Veri Alış-Verişi
HTTP Transport Yaygın şekilde kullanılmakta Servlet aracılığı ile yapılmakta
<web-app>
<servlet> <servlet-name>spring-ws</servlet-name> <servlet-class> org.springframework.ws.transport.http.MessageDispatcherServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet>
<servlet-mapping> <servlet-name>spring-ws</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping>
</web-app>
![Page 20: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/20.jpg)
20/35
Veri Alış-Verişi
HTTP Transport ... Otomatik WSDL Üretimi
WsdlDefinition bean tanımları taranır. Bean id si ile dışarı açılır (expose)
<bean id="orders" class="org.springframework.ws.wsdl.wsdl11.SimpleWsdl11Definition"> <constructor-arg value="/WEB-INF/wsdl/Orders.wsdl"/> </bean>
http://localhost:8080/spring-ws/orders.wsdl
![Page 21: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/21.jpg)
21/35
Veri Alış-Verişi
Spring MVC - DispatcherServletJMS TransportEmail TransportEmbedded HTTP Server Transport
Örnek uygulama da kullanılacak.
![Page 22: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/22.jpg)
22/35
Spring WS Mimarisi
![Page 23: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/23.jpg)
23/35
Spring WS Mimarisi
Sequence Diagram Spring Referans dokümanından alınmıştır.
![Page 24: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/24.jpg)
24/35
Endpoints
Web servis mesajlarının iletildiği noktalardır.İş katmanı ile web servis arasındaki iletişimi
sağlarİş mantığı sonrası web servis cevabı
oluşturulur ve dönülür.PayloadEndpoint arayüzünden
gerçekleştirilir.public interface PayloadEndpoint {
/** * Invokes an operation. */ Source invoke(Source request) throws Exception;
}
![Page 25: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/25.jpg)
25/35
Endpoints ...
MessageEndpoint Arayüzü Mesajlar dışında message context e de ihtiyaç
duyulması SOAP Header eklemek Mesaj içerisinden attachment almak vs..
Endpoint interceptor ler kullanılarak da yapılabilir.
![Page 26: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/26.jpg)
26/35
Endpoints ...
AbstractDomPayloadEndpoint W3C DOM API kullanılır.
AbstractJDomPayloadEndpoint – JDOM API AbstractXomPayloadEndpoint – XOM API
package sunum; public class SampleEndpoint extends AbstractDomPayloadEndpoint { protected Element invokeInternal(Element requestElement,
Document document) throws Exception { String requestText = requestElement.getTextContent();
System.out.println("Request text: " + requestText); Element responseElement = document.createElementNS("http://samples",
"response"); responseElement.setTextContent(“someResponseText"); return responseElement;
} }
![Page 27: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/27.jpg)
27/35
Endpoints ...
AbstractMarshallingPayloadEndpoint Java nesnelerine çevrilmiş xml mesajları kullanılır.
package sunum;
public class MarshallingOrderEndpoint extends AbstractMarshallingPayloadEndpoint{
protected Object invokeInternal(Object request) throws Exception { //do some job
} }
![Page 28: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/28.jpg)
28/35
Endpoints ...
Annotated Endpoints @Endpoint annotation ile kullanılır. Tek endpoint sınıfında birden fazla istem ele alınabilir.
@PayloadRoot annotation ı ile sağlanır.package sunum;
@Endpoint public class AnnotationOrderEndpoint {
@PayloadRoot(localPart = "orderRequest", namespace = "http://samples")
public Order getOrder(OrderRequest orderRequest) { // get order
} @PayloadRoot(localPart = "order", namespace = "http://samples") public void order(Order order) {
// Create some order}
}
![Page 29: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/29.jpg)
29/35
Endpoint Mappings
Gelen mesajların Endpoint lere iletilmesini sağlar. PayloadRootQNameEndpointMapping
Gelen XML mesajlarına göre yapılır.
<bean id="endpointMapping" class="org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping"> <property name="mappings">
<props> <prop key="{http://samples}orderRequest">getOrderEndpoint</prop> </props>
</property> </bean><bean id="getOrderEndpoint" class=“somepackage.GetOrderEndPoint" />
<?xml version="1.0" encoding="UTF-8"?><orderRequest xmlns="http://samples"> </orderRequest>
![Page 30: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/30.jpg)
30/35
Endpoint Mappings ...
SoapActionEndpointMapping SOAP Action header a göre yapılır.
MethodEndpointMapping (@EndPoint) PayloadRootAnnotationMethodEndpointMapping
(@PayloadRoot) Gelen XML mesajı
SoapActionAnnotationMethodEndpointMapping (@SoapAction) SOAP Action Header
![Page 31: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/31.jpg)
31/35
İçerik
Web Service Nedir ?WS Geliştirim YaklaşımlarıNeden Anlaşma Önce ?Neden Spring WS ?Spring WS TerimleriSpring WS MimarisiÖrnek Uygulama (Sunucu-İstemci)KaynakçaSorular
![Page 32: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/32.jpg)
32/35
Örnek Uygulama
Data Contract Hazırlanması (XML Şema)Sunucu Geliştirimi
Annotation tabanlıWSDL Üretilmesiİstemci Geliştirimi
![Page 33: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/33.jpg)
33/35
Spring WS Mimarisi
![Page 34: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/34.jpg)
34/35
Kaynakça
Spring Web Services Project Page http://static.springsource.org/spring-ws/sites/1.5/ http://static.springsource.org/spring-ws/sites/1.5/refer
ence/html/index.html
SOA: Principles of Service Design Thomas Erl, Prentice Hall
![Page 35: Spring Web Service](https://reader033.fdocument.pub/reader033/viewer/2022061618/5562fb31d8b42a62598b4aa0/html5/thumbnails/35.jpg)
35/35
TEŞEKKÜRLER
Sorular..