You are on page 1of 31

Implementacja

Proxy-WS/Client
W rolach gwnych:

Bartosz Chaber
bartosz.chaber@gmail.com

Plan prezentacji
3) Przewodnik po projekcie

1) Proxy-WS

Charakterystyka WS

Struktura

Apache Axis2

Budowanie

Data binding

Projekt komponentw

Krtki przegld kodu

2) Proxy-Client

Co w kliencie?

QtSoap

XMLBeansxx by TouK

27 padziernika 2010

Implementacja Proxy-WS/Client

2/31

Proxy-WS
Webservice

27 padziernika 2010

Implementacja Proxy-WS/Client

3/31

Charakterystyka Proxy-WS

Uycie XMLa jako uniwersalnego


sposobu przesyu danych
Skadniki webservice'u:

Implementacja w jzyku programowania

Plik XSD - definicja typw danych

Plik WSDL - definicja metod

System budowania Maven2

Podejcie bottom-up

27 padziernika 2010

Implementacja Proxy-WS/Client

4/31

Plik XSD Proxy-WS


<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://domain.rass.iem.pw.edu.pl"
targetNamespace="http://domain.rass.iem.pw.edu.pl"
elementFormDefault="qualified">
Listing. 1 Definicja pliku XSD

27 padziernika 2010

Implementacja Proxy-WS/Client

5/31

Plik XSD Proxy-WS


<xs:complexType name="ModelRequest">
<xs:sequence>
<xs:element name="id" type="xs:string"
nillable="false" />
</xs:sequence>
</xs:complexType>

<xs:complexType name="ModelsResponse">
<xs:sequence>
<xs:element name="model" type="tns:Model"
nillable="false" minOccurs="1"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:element name="ModelRequest" type="tns:ModelRequest"/>
<xs:element name="ModelsResponse" type="tns:ModelsResponse"/>

Listing. 2 Definicja typw danych


27 padziernika 2010

Implementacja Proxy-WS/Client

6/31

Plik WSDL Proxy-WS


<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions
targetNamespace="http://service.proxy.rass.iem.pw.edu.pl"
xmlns:tns="http://service.proxy.rass.iem.pw.edu.pl"
xmlns:dom="http://domain.rass.iem.pw.edu.pl"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:apachesoap="http://xml.apache.org/xml-soap"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/">

Listing. 3 Definicja pliku WSDL

27 padziernika 2010

Implementacja Proxy-WS/Client

7/31

Plik WSDL Proxy-WS


<wsdl:types>
<schema elementFormDefault="qualified"
targetNamespace="http://service.proxy.rass.iem.pw.edu.pl"
xmlns="http://www.w3.org/2001/XMLSchema">
<import namespace="http://domain.rass.iem.pw.edu.pl"
schemaLocation="../xsd/ProxyService.xsd"/>
</schema>
</wsdl:types>
<wsdl:message name="ModelRequestMessage">
<wsdl:part name="parameterselement="dom:ModelRequest"/>
</wsdl:message>
<wsdl:message name="ModelResponseMessage">
<wsdl:part name="output" ="dom:ModelResponse"/>
</wsdl:message>

Listing. 4 Zaimportowanie definicji typw danych z pliku XSD


27 padziernika 2010

Implementacja Proxy-WS/Client

8/31

Plik WSDL Proxy-WS


<wsdl:portType name="ProxyPortType">
<wsdl:operation name="model">
<wsdl:input name="ModelRequestMessage"
message="tns:ModelRequestMessage"/>
<wsdl:output name="ModelResponseMessage"
message="tns:ModelResponseMessage"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="ProxySoapBinding" type="tns:ProxyPortType">
<wsdlsoap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="model">
<wsdlsoap:operation soapAction="model"/>
<wsdl:input><wsdlsoap:body use="literal"/></wsdl:input>
<wsdl:output><wsdlsoap:body use="literal"/></wsdl:output>
</wsdl:operation>
</wsdl:binding>

Listing. 5 Zdefiniowanie typw wiadomoci oraz operacji


27 padziernika 2010

Implementacja Proxy-WS/Client

9/31

Apache Axis2 - oglnie

Napisany w Javie, posiada implementacj w C


Zawiera zestaw skryptw do
generowanie kodu
AXIOM(Axis Object Model)
Modularna budowa
(m.in. data binding)

27 padziernika 2010

Implementacja Proxy-WS/Client

10/31

Data binding
ADB

XMLBeans

Nie implementuje
penego XML Schema
Moliwa generacja
kodu Java oraz C
Domylny modu w
Axis2

27 padziernika 2010

Implementuje peen
XML Schema
Generacja kodu tylko
do Java
Istnieje implementacja
C++ firmy TouK

Implementacja Proxy-WS/Client

11/31

Data binding
ADB

XMLBeans

Nie implementuje
penego XML Schema
Moliwa generacja
kodu Java oraz C
Domylny modu w
Axis2

27 padziernika 2010

Implementuje peen
XML Schema
Generacja kodu tylko
do Java
Istnieje implementacja
C++ firmy TouK

Implementacja Proxy-WS/Client

12/31

XMLBeans przykad uycia


Przykad budowy obiektu typu Device:
DeviceResponseDocument document =
DeviceResponseDocument.Factory.newInstance();
DeviceResponse response =
document.addNewDeviceResponse();
Device device = response.addNewDevice();
device.setId("dev");
device.setName("Sample device");

27 padziernika 2010

Implementacja Proxy-WS/Client

13/31

Proxy-Client
Klient

27 padziernika 2010

Implementacja Proxy-WS/Client

14/31

Co w kliencie?

Niezaleny od Axis2

Zaimplementowany w C++/Qt

Wykorzystuje QtSoap

Data binding przy uyciu XMLBeansxx

Modularna budowa

System slotw i sygnaw


(ang. slots & signals)
System budowania oparty o pliki .pro

27 padziernika 2010

Implementacja Proxy-WS/Client

15/31

QtSoap

Darmowa biblioteka firmy Nokia do


obsugi komunikatw SOAP
W komunikacie SOAP zawarty jest XML
odpowiedzi webservice'u
<SOAP-ENV:Envelope>
<SOAP-ENV:Body>
<ModelsResponse
xmlns="http://domain.rass.iem.pw.edu.pl">
<model>
<name xsi:type="xsd:string">Przedrami</name>
<id xsi:type="xsd:string">model_prze</id>
</model>
</ModelsResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

27 padziernika 2010

Implementacja Proxy-WS/Client

16/31

XMLBeansxx by TouK

Zaimplementowane przez firm TouK


Zalenoci: boost, xerces-c, cppunit,
libxml2
API bardzo podobne do oryginalnego
XMLBeans

27 padziernika 2010

Implementacja Proxy-WS/Client

17/31

XMLBeansxx przykad uycia


Przykad tworzenia zapytania o pene dane modelu:
ModelRequestDocument document =
ModelRequestDocument::Factory::newInstance();
ModelRequest request =
ModelRequest::Factory::newInstance();
request.setId(id);
document.setModelRequest(request);

27 padziernika 2010

Implementacja Proxy-WS/Client

18/31

Przewodnik
po projekcie

27 padziernika 2010

Implementacja Proxy-WS/Client

19/31

Struktura
Struktura drzewiasta
Dwa systemy budowania: maven2 i qmake
Zawiera zewntrzne zalenoci: qtsoap, xmlbeansxx, axis2

27 padziernika 2010

Implementacja Proxy-WS/Client

20/31

Budowanie (Proxy-WS)
Potrzebne: maven2
$ svn co svn+ssh://rass.iem.pw.edu.pl/home/svn/rass
$ vim ~/.m2/settings.xml
<settings>
<mirrors>
<mirror>
<id>java.net.2</id>
<name>http://repo1.maven.org/maven2/</name>
<url>http://download.java.net/maven/2/</url>
<mirrorOf>java.net</mirrorOf>
</mirror>
</mirrors>
</settings>

27 padziernika 2010

Implementacja Proxy-WS/Client

21/31

Budowanie (Proxy-WS)
$ sh common/scripts/generate webservice
$ cd webservice
$ mvn install
$ cp target/proxy.aar ../axis2/repository/services
$ export AXIS2_HOME=../axis2
$ ${AXIS2_HOME}/bin/axis2server.sh

Webservice jest dostpny pod adresem:


http://localhost:8080/services/ProxyService
27 padziernika 2010

Implementacja Proxy-WS/Client

22/31

Budowanie (Proxy-Client)
$ sh common/scripts/generate bindings
$ cd client
$ qmake
$ make
$ ./test

Aplikacja wymaga uruchomionego Proxy-WS


pod adresem
http://localhost:8080/services/ProxyService

27 padziernika 2010

Implementacja Proxy-WS/Client

23/31

Architektura Proxy-WS/Client
Interfejsem komunikacyjnym jest SOAP.

27 padziernika 2010

Implementacja Proxy-WS/Client

24/31

Projekt Proxy-Client

27 padziernika 2010

Implementacja Proxy-WS/Client

25/31

Czemu oddzielnie WSClient?


Obliczenia przeprowadzane w chmurze

27 padziernika 2010

Implementacja Proxy-WS/Client

26/31

Krtki przegld kodu

webservice/src/pl/edu/pw/iem/rass/domain
wygenerowane klasy typw danych z pliku XSD
webservice/.../rass/proxy/service/ServiceImpl.java
implementacja operacji webservice'u
webservice/..../ProxyServiceMessageReceiverInOut.java
wygenerowana klasa interpretujca komunikaty SOAP
webservice/target/proxy.aar gotowy plik webservice'u

27 padziernika 2010

Implementacja Proxy-WS/Client

27/31

Krtki przegld kodu

client/domain/ProxyService.h
wygenerowane klasy typw danych z pliku XSD

client/ws/WSClient.h klient webservice'u

client/rass/RassClient.h klient Proxy-WS

common/wsdl/ProxyService.wsdl definicja webservice'u

common/xsd/ProxyService.xsd definicja typw danych

webservice/resources/services.xml
wygenerowany deskryptor webservice'u

27 padziernika 2010

Implementacja Proxy-WS/Client

28/31

Modyfikacja struktury webservice'u


1) Modyfikacja pliku ProxyService.wsdl
2) Wygenerowanie Proxy-WS
3) Modifkacja ServiceImpl.java
4) Przebudowanie Proxy-WS
5) Modifkacja RassClient.cpp
6) Uruchomienie serwera Axis2 z nowym plikiem .aar

27 padziernika 2010

Implementacja Proxy-WS/Client

29/31

Modyfikacja typw danych


1) Modifikacja pliku ProxyService.xsd
2) Wygenerowanie Proxy-WS
3) Modyfikacja ServiceImpl.java
4) Przebudowanie Proxy-WS
5) Wygenerowanie data binding dla Proxy-Client
6) Modifkacja RassClient.cpp

27 padziernika 2010

Implementacja Proxy-WS/Client

30/31

Dzikuj za uwag
(w nagrod wiszcz w trampkach)

Ryc.1MarmotaMonax
27 padziernika 2010

Implementacja Proxy-WS/Client

31/31

You might also like