2. Biz Kimiz ? Mustafa DEMİR ODTÜ BilgisayarMühendisliğiBölümü - 2005 Spring teknolojileri, JSF ve Hibernate Çevik uygulama geliştirme, TDD, TasarımÖrüntüleri http://demirm.blogspot.com mustafademir@gmail.com Mustafa DAŞGIN HacettepeÜniversitesiBilgisayarMühendisliğiBölümü - 2006 Spring teknolojileri, JSF ve Hibernate Refactoring, TDD, TasarımÖrüntüleri “Ucundan Java” http://mdasgin.blogspot.com dasgin@gmail.com
3. İçerik Web Service Nedir ? WS GeliştirimYaklaşımları NedenAnlaşmaÖnce ? Neden Spring WS ? Spring WS Terimleri Spring WS Mimarisi ÖrnekUygulama (Sunucu-İstemci) Kaynakça Sorular
4. Web Service Nedir ? Birağüzerindenfarklıplatformlaramensupmakinelerinbirlikteçalışabilirliğinidestekleyecekşekildetasarlananyazılımsistemleri. Servisvebileşenlerin “tekrarkullanılabilirliği” Web Service vs. RPC/RMI XML
9. NedenAnlaşmaÖnce ? Desteklenmeyenveritipleri 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>
10. NedenAnlaşmaÖnce ? Döngüsel İlişkiler public 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ı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.
12. NedenAnlaş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.
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. İçerik Web Service Nedir ? WS GeliştirimYaklaşımları NedenAnlaşmaÖnce ? Neden Spring WS ? Spring WS Terimleri Spring WS Mimarisi ÖrnekUygulama (Sunucu-İstemci) Kaynakça Sorular
16. 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..
17. 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.
18. 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.
19. 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>
20. 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
21. Veri Alış-Verişi Spring MVC - DispatcherServlet JMS Transport Email Transport Embedded HTTP Server Transport Örnek uygulama da kullanılacak.
23. Spring WS Mimarisi Sequence Diagram Spring Referans dokümanından alınmıştır.
24. Endpoints Web 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 eklemek Mesaj içerisinden attachment almak vs.. Endpoint interceptor ler kullanılarak da yapılabilir.
26. 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; } }
27. 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 } }
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; @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 } }
29. Endpoint Mappings Gelen mesajların Endpoint lere iletilmesini sağlar. PayloadRootQNameEndpointMapping Gelen 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 ... SoapActionEndpointMapping SOAP Action header a göre yapılır. MethodEndpointMapping(@EndPoint) PayloadRootAnnotationMethodEndpointMapping (@PayloadRoot) Gelen XML mesajı SoapActionAnnotationMethodEndpointMapping (@SoapAction) SOAP Action Header
31. İçerik Web Service Nedir ? WS GeliştirimYaklaşımları NedenAnlaşmaÖnce ? Neden Spring WS ? Spring WS Terimleri Spring WS Mimarisi ÖrnekUygulama (Sunucu-İstemci) Kaynakça Sorular
32. ÖrnekUygulama Data Contract Hazırlanması (XML Şema) Sunucu Geliştirimi Annotation tabanlı WSDL Üretilmesi İstemci Geliştirimi
34. 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/reference/html/index.html SOA: Principles of Service Design Thomas Erl, Prentice Hall
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.