Zdravím,
odpovídám na zprávu ze čtvrtka, 26. ledna 2006,
kterou Martin Kuba napsal(a) v 12:08:43:

 Díky za cenné rady.

 Pokouším se místo Mapy přenášet tedy dvourozměrné pole, zatím taky ne s moc 
velkých úspěchem.

 Ale mimochodem, když napíšu třídu v Javě, tak s toho Axis vygeneruje toto:


  <schema targetNamespace="http://xml.apache.org/xml-soap"; 
xmlns="http://www.w3.org/2001/XMLSchema";>
   <import namespace="urn:ws.bazartip.atomsoft.cz"/>
   <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
   <complexType name="mapItem">
    <sequence>
     <element name="key" nillable="true" type="xsd:anyType"/>
     <element name="value" nillable="true" type="xsd:anyType"/>
    </sequence>
   </complexType>
   <complexType name="Map">
    <sequence>
     <element maxOccurs="unbounded" minOccurs="0" name="item" 
type="apachesoap:mapItem"/>
    </sequence>
   </complexType>
  </schema>


 Mě to přijde zcela shodné jako vaše gSoap s jediným rozdílem, že u klíče a 
hodnoty není přesně uveden jaký typ tam vlastně bude, což je proto, že Axis 1.3 
nepodporuje generické typy. Takže bych viděl jako mnohem snazší cestu upravit 
to, co Axis vygeneruje. Pořád tomu na první pohled rozumím daleko více než 
gSoapu.

  Podle mě takto definovaný zápis musí jít použít i třeba v .Netu, jen by se 
tam na to musela napsat třída která odpovídá mapě a k ní něco co tohle na ní 
namapuje, ne?

  Nebo se fakt SOAP používá jen k přenášení základních typů jako String a 
Integer?

  Já právě myslel, že použít pro přenos jakoukoliv třídu je běžná věc, jen je 
potřeba napsat něco, co to serializuje do XML a zpětně.

  Jak jsem psal, potřebuji najednou přenést větší množství položek, jsou to 
čísla, řetězce a datumové položky. Jak se to v tom případě řeší? Posílá se to 
po jednom?

   

--------------------------- Původní zpráva ---------------------------
 Odesilatel: Martin Kuba <[EMAIL PROTECTED]>
    Předmět: webové služby
      Datum: 26. ledna 2006, 12:08:43 (GMT +0100)
    Přílohy: <none>
      msgid:[EMAIL PROTECTED]
    
M> Tomáš Procházka wrote:
>>  Takže AXIS, obě verze, jsou dnes vyvíjené kým? Sponzoruje je jen Apache, 
>> nebo už nikdo?

M> Sice do toho moc nevidím, ale obávám se, že moc vyvíjené nejsou. Axis 
M> sice používají všichni z akademické sféry, protože je zadarmo, a
M> lidi z projektu Globus (což je největší amrický projekt zabývající se 
M> gridy) nad Axisem postavili svoji implementaci, ale komerční firmy
M> nemají zájem na schopném konkurenčním nástroji zdarma.


>>  A Indigo je předpokládám komerční. Dalo mi chvilku zabrat tak často 
>> používané slovo najít ve správném spojení, ale nakonec jsem ho našel ve 
>> spojení s 'Windows Communication Foundation', takže je to jasné.

M> Indigo je od Microsoftu, viz třeba
M> http://itmanagement.webopedia.com/TERM/I/Indigo.html

>> O> Ano. Axis 1 je humus a SUNi referencni implementace JAX* jsou uplne, jak 
>> se to 
>> O> rekne slusne, no proste jsou k nicemu jiz pri zatezi 5 zprav za sekundu.

M> Ještě ke kvalitě Axisu. Srovnávám ho s gSOAPem. gSOAP je asi 30x 
M> rychlejší, a to ne protože je v Céčku, ale protože používá pokročilé 
M> techniky optimalizace zpracování XML, v podstatě si předgeneruje
M> jednoúčelový kód pro rozebírání i generování SOAP zpráv, teď o tom
M> měl na posledním Supercomputingu jeho autor článek.
M> Zato Axis používá standardní XML parser, který je sice univerzální,
M> ale zato velice pomalý.
M> A když pominu rychlost, tak gSOAP generuje WSDL mnohem líp.
M> Dnes jsem ve stavu, kdy si napíšu Céčkový .h soubor
M> s direktivami pro gSOAP, gSOAPem z toho vygeneruju WSDL, a
M> pomocí WSDL2Java z Axisu pak tvořím javovou implementaci.
M> A to proto, že Java2WSDL produkuje dost zhůvěřlosti a některé
M> věci ani neumí.
M> Ano, nepíšu WSDL ručně, takový masochista nejsem, ale
M> vím, že když se omezím na jisté konstrukce, tak mi gSOAP
M> vygeneruje zcela čistý WSDL podle WS-I a nebudou s kompatibilitou
M> problémy.

>> O> Naprosty souhlas. Vsem vyvojarum zacinajicim v WebServisama bych 
>> doporucil: 
>> O> naucte se XML Schema, naucte se WSDL, sezente si nastroj, ktery umi 
>> O> XMLSchema2Java nebo XMLSchema2WSDL a WSDL2Java. Usetri Vam to spoustu, 
>> ale 
>> O> opravdu spoustu neprijemnosti.
>> 
>> Právě že, já napíšu na serverové části třídu a díky ANTu a nástrojům, které 
>> Axis má se s toho vygeneruje WSDSL a z něj následně klientské třídy na 
>> straně klienta. Já si to ručně nevymýšlím a ani se mi do toho moc nechce.

M> A to je právě špatně. Nesmíte začít z třídy a z ní udělat WSDL. Musíte 
M> nejdřív udělat WSDL a z něj pak třídy.
M> Já bych to udělal tak, že v gSOAPu bych si napsal definici rozhraní

M> //gsoap scb service name:       MapovaSluzba
M> //gsoap scb service type:       PrenosMap
M> //gsoap scb service port:       http://localhost:10001/
M> //gsoap scb service namespace:  http://www.ja.cz/mapa
M> //gsoap scb service documentation: Uzasna sluzba
M> struct scb__Polozka {
M>      char* klic 1:1;
M>      char* hodnota 1:1;
M> };
M> struct scb__Mapa {
M>      int    __sizepolozka;
M>      struct scb__Polozka* *polozka 0;
M> };

M> //gsoap scb service method-documentation: posliMapu posle mapu.
M> int scb__posliMapu( struct scb__Mapa* tam, struct scb__posliMapuResponse 
M> { struct scb__Mapa* zpatky; } *);

M> a vygeneroval z toho krásný WSDL:
M> ...
M> <schema ..
M>    <complexType name="Polozka">
M>     <sequence>
M>       <element name="klic" type="xsd:string" minOccurs="1" maxOccurs="1" 

M>       <element name="hodnota" type="xsd:string" minOccurs="1" 
M> maxOccurs="1" nillable="false"/>
M>     </sequence>
M>    </complexType>
M>    <complexType name="Mapa">
M>     <sequence>
M>       <element name="polozka" type="scb:Polozka" minOccurs="0" 
M> maxOccurs="unbounded" nillable="true"/>
M>     </sequence>
M>    </complexType>
M>    <!-- operation request element -->
M>    <element name="posliMapu">
M>     <complexType>
M>      <sequence>
M>       <element name="tam" type="scb:Mapa" minOccurs="0" maxOccurs="1" 

M>      </sequence>
M>     </complexType>
M>    </element>
M>    <!-- operation response element -->
M>    <element name="posliMapuResponse">
M>     <complexType>
M>      <sequence>
M>       <element name="zpatky" type="scb:Mapa" minOccurs="0" maxOccurs="1" 

M>      </sequence>
M>     </complexType>
M>    </element>
M>   </schema>
M> <message name="posliMapu">
M>   <part name="parameters" element="scb:posliMapu"/>
M> </message>

M> <message name="posliMapuResponse">
M>   <part name="parameters" element="scb:posliMapuResponse"/>
M> </message>

M> <portType name="PrenosMap">
M>   <operation name="posliMapu">
M>    <documentation>posle mapu.</documentation>
M>    <input message="tns:posliMapu"/>
M>    <output message="tns:posliMapuResponse"/>
M>   </operation>
M> </portType>
M> ...

M> tohle bych předhodil Axisu, ať se s tím porve. Tím bych měl zajištěno,
M> že tu mapu můžu předat nejen z Javy do Javy, ale třeba i z Céčka do .NETu.


>>  Já chápu, že smyslem SOAPu je především smést rozdíly mezi platformami. 
>> Proto je mi jasné, že si nemůžu přenášet zcela libovolné věci, ale pokud 
>> vím, tak SOAP umožňuje přenášet složitější věci než řetězce a čísla.
>> 
>> Potřebuji prostě přenést něco jako pole Map. Potřebuji totiž napsat 
>> synchronizaci databáze mezi serverem a klientem. Prostě jen to, aby se 
>> zjistilo, kde došlo ke změně a poslali se na druhou stranu změněná data. Pak 
>> taky budu potřebovat přenášet obrázky, na to jsem taky hodně zvědav.
>> 
>>  A pokud možno chci v tuto chvíli co nejméně zabřednout do studia toho, jak 
>> to přesně na pozadí funguje, protože mi mezitím uteče zákazník. Hold tohle 
>> se ve školách neučí, takže se to teď učím přímo za pochodu.
>> 
>>  V současnosti mám na obou stranách Axis a doufal jsem, že když už HashMap 
>> podporuje, tak že to bez problému zvládne.

M> Pak použijte RMI, když máte na obou stranách Javu a chcete toho zneužít.
M> V tom případě nemá cenu si hrát na webservicy a platformovou 
M> nezávislost. A naopak, pokud si chcete hrát na platformovou nezávislost,
M> nepřenášejte HashMapu, která v jinýchjazycích nemusí existovat.

>> O> Pokud nepotrebujete nic vic, nez jenom vystavit server pro http soap a 
>> jeste 
>> O> navic bez autentizace, jdete do ceho chcete, je to vicemene burt. Klidne 
>> i do 
>> O> JBossu, protoze J2EE 1.4 ma JAXM.
>> 
>>  Autentizace patrně bude nutná, ale HTTP autentizaci umí i AXIS a citlivá 
>> data se přenášet nebudou. Jinak by přece ale stačil SSL? To je další věc, 
>> kterou jsem zatím nepochopil. Proč pro SOAP existuje speciální rozšíření 
>> týkající se šifrování, když to jde hodit přes SSL. Ale předpokládám, že to 
>> bude kvůli rychlosti.

M> Speciální šifrování pro SOAP neexistuje kvůli rychosti, je naopak velice
M> pomalé. Existuje ze dvou důvodů. SOAP je XML a v XML můžete chtít
M> šifrovat jen části zprávy, ne vždycky celou. A druhý důvod je,
M> že SSL neumí dokumenty podepisovat, jen šifrovat. A pokud
M> potřebujete zprávu podepsat, s SSL si nevystačíte a musíte
M> použít XML-Signature.

M> Makub

------------------------ Konec původní zprávy ------------------------

-- 
---------------------------------------------------------------------
 Tomáš Procházka


 E-mail: [EMAIL PROTECTED]
    WWW: http://atom.sf.cz
    ICQ: 87147320
---------------------------------------------------------------------

Odpovedet emailem