spring web service

35
1/35 MUSTAFA DEMİR & MUSTAFA DAŞGIN Spring Web Service

Upload: dasgin

Post on 25-May-2015

1.793 views

Category:

Self Improvement


1 download

DESCRIPTION

Anlaşma-Önce ve Anlaşma-Sonra Web Service geliştirim yöntemleri ve Başlangıç düzeyinde Spring Web Service.

TRANSCRIPT

Page 1: Spring Web Service

1/35

MUSTAFA DEMİR&

MUSTAFA DAŞGIN

Spring Web Service

Page 2: Spring Web Service

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

21/35

Veri Alış-Verişi

Spring MVC - DispatcherServletJMS TransportEmail TransportEmbedded HTTP Server Transport

Örnek uygulama da kullanılacak.

Page 22: Spring Web Service

22/35

Spring WS Mimarisi

Page 23: Spring Web Service

23/35

Spring WS Mimarisi

Sequence Diagram Spring Referans dokümanından alınmıştır.

Page 24: Spring Web Service

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

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

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

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

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

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

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

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

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

33/35

Spring WS Mimarisi

Page 34: Spring Web Service

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

35/35

TEŞEKKÜRLER

Sorular..