2. Biz Kimiz ?Mustafa DEMİRODTÜ BilgisayarMühendisliğiBölümü - 2005 Spring teknolojileri, JSF ve HibernateÇevik uygulama geliştirme, TDD, TasarımÖrüntülerihttp://demirm.blogspot.commustafademir@gmail.comMustafa DAŞGINHacettepeÜniversitesiBilgisayarMühendisliğiBölümü - 2006 Spring teknolojileri, JSF ve HibernateRefactoring, TDD, TasarımÖrüntüleri“Ucundan Java” http://mdasgin.blogspot.comdasgin@gmail.com
3. İçerikWeb Service Nedir ?WS GeliştirimYaklaşımlarıNedenAnlaşmaÖnce ?Neden Spring WS ?Spring WS TerimleriSpring WS MimarisiÖrnekUygulama (Sunucu-İstemci)KaynakçaSorular
4. Web Service Nedir ?Birağüzerindenfarklıplatformlaramensupmakinelerinbirlikteçalışabilirliğinidestekleyecekşekildetasarlananyazılımsistemleri.Servisvebileşenlerin “tekrarkullanılabilirliği”Web Service vs. RPC/RMIXML
7. AnlaşmaSonraYaklaşımıGerçekleştirimbazalınırWSDL , SOAP ve XSD ayrıntısınagirilmez.Öğrenimveuygulamasüresikısadır.Sadeceişmantığıylailgilenmenizisağlar.Sunucuveistemcigeliştirimibirbirinebağımlıdır.BüyükProjeleriçin ideal değildir.
9. NedenAnlaşmaÖnce ?DesteklenmeyenveritipleriJava – java.util.TreeMap.Net – System.Collections.HashtableXML – date tipi: 2007-04-04Java 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>
10. NedenAnlaş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>ArjenPoutsma</name><flight number="KL1117"><passengers> <passenger><name>ArjenPoutsma</name>...
11. NedenAnlaşmaÖnce ?KırılganlıkAnlaş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.
12. NedenAnlaşmaÖnce ?PerformansAnlaş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ılabilirlikXSD bilgisini ayrı bir dosyada tanımlayarak tekrar kullanılabilirliğini sağlanabilir.
13. 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.
14. 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.
15. İçerikWeb Service Nedir ?WS GeliştirimYaklaşımlarıNedenAnlaşmaÖnce ?Neden Spring WS ?Spring WS TerimleriSpring WS MimarisiÖrnekUygulama (Sunucu-İstemci)KaynakçaSorular
16. Spring WS TerimleriWebServiceMessagePlatform bağımsız XML mesajlarını ifade eder.Web mesajlarındaki payload kısmına erişimi sağlarSoapMessageSOAP için gerekli operasyonları içeren arayüzdür.SOAP EnvelopeSOAP ActionSOAP Headeretc..
17. Spring WS TerimleriMessageFactory 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ürDOM API sini kullanır – SOAP mesajları bellekte tutulur. Büyük mesajlar için performanslı değildir.
18. Spring WS TerimleriMessageFactory SınıflarıAxiomSoapMessageFactoryAxis 2 Object Model kullanır.STAX (Streaming API for XML) üzerine kuruludur.Büyük mesajlar için uygundur.
19. Veri Alış-VerişiHTTP TransportYaygın şekilde kullanılmaktaServlet 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>
20. Veri Alış-VerişiHTTP Transport ...Otomatik WSDL ÜretimiWsdlDefinition 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
21. Veri Alış-VerişiSpring MVC - DispatcherServletJMS TransportEmail TransportEmbedded HTTP Server TransportÖrnek uygulama da kullanılacak.
23. Spring WS Mimarisi Sequence Diagram Spring Referans dokümanından alınmıştır.
24. EndpointsWeb servismesajlarının iletildiği noktalardır.İş katmanıile web servisarasındakiiletişimisağ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; }
25. Endpoints ...MessageEndpoint ArayüzüMesajlar dışında message context e de ihtiyaç duyulmasıSOAP Header eklemekMesaj içerisinden attachment almakvs..Endpoint interceptor ler kullanılarak da yapılabilir.
26. Endpoints ...AbstractDomPayloadEndpointW3C DOM API kullanılır.AbstractJDomPayloadEndpoint – JDOM APIAbstractXomPayloadEndpoint – XOM APIpackage 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; } }
27. Endpoints ...AbstractMarshallingPayloadEndpointJava nesnelerine çevrilmiş xml mesajları kullanılır.package sunum; public class MarshallingOrderEndpoint extends AbstractMarshallingPayloadEndpoint{ protected Object invokeInternal(Object request) throws Exception { //do some job } }
28. 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; @Endpointpublic 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 }}
29. Endpoint Mappings Gelen mesajların Endpoint lere iletilmesini sağlar.PayloadRootQNameEndpointMappingGelen XML mesajlarına göre yapılır.<?xml version="1.0" encoding="UTF-8"?><orderRequestxmlns="http://samples"> </orderRequest><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" />
30. Endpoint Mappings ...SoapActionEndpointMappingSOAP Action header a göre yapılır.MethodEndpointMapping(@EndPoint)PayloadRootAnnotationMethodEndpointMapping (@PayloadRoot)Gelen XML mesajıSoapActionAnnotationMethodEndpointMapping (@SoapAction)SOAP Action Header
31. İçerikWeb Service Nedir ?WS GeliştirimYaklaşımlarıNedenAnlaşmaÖnce ?Neden Spring WS ?Spring WS TerimleriSpring WS MimarisiÖrnekUygulama (Sunucu-İstemci)KaynakçaSorular
34. KaynakçaSpring Web Services Project Pagehttp://static.springsource.org/spring-ws/sites/1.5/http://static.springsource.org/spring-ws/sites/1.5/reference/html/index.htmlSOA: Principles of Service DesignThomas Erl, Prentice Hall
#33:The most important thing when doing contract-first Web service development is to try and think in terms of XML. This means that Java-language concepts are of lesser importance.nIn Spring-WS, you will implement Endpoints to handle incoming XML messages. There are two flavors of endpoints: message endpoints and payload endpoints. Message endpoints give access to the entire XML message, including SOAP headers. Typically, the endpoint will only be interested in the payload of the message, that is the contents of the SOAP body. In that case, creating a payload endpoint makes more sense.