Tomáš Procházka wrote:
 Takže AXIS, obě verze, jsou dnes vyvíjené kým? Sponzoruje je jen Apache, nebo 
už nikdo?

Sice do toho moc nevidím, ale obávám se, že moc vyvíjené nejsou. Axis sice používají všichni z akademické sféry, protože je zadarmo, a lidi z projektu Globus (což je největší amrický projekt zabývající se gridy) nad Axisem postavili svoji implementaci, ale komerční firmy
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é.

Indigo je od Microsoftu, viz třeba
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.

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

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

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

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

a vygeneroval z toho krásný WSDL:
...
<schema ..
  <complexType name="Polozka">
   <sequence>
<element name="klic" type="xsd:string" minOccurs="1" maxOccurs="1" nillable="false"/> <element name="hodnota" type="xsd:string" minOccurs="1" maxOccurs="1" nillable="false"/>
   </sequence>
  </complexType>
  <complexType name="Mapa">
   <sequence>
<element name="polozka" type="scb:Polozka" minOccurs="0" maxOccurs="unbounded" nillable="true"/>
   </sequence>
  </complexType>
  <!-- operation request element -->
  <element name="posliMapu">
   <complexType>
    <sequence>
<element name="tam" type="scb:Mapa" minOccurs="0" maxOccurs="1" nillable="true"/>
    </sequence>
   </complexType>
  </element>
  <!-- operation response element -->
  <element name="posliMapuResponse">
   <complexType>
    <sequence>
<element name="zpatky" type="scb:Mapa" minOccurs="0" maxOccurs="1" nillable="true"/>
    </sequence>
   </complexType>
  </element>
 </schema>
<message name="posliMapu">
 <part name="parameters" element="scb:posliMapu"/>
</message>

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

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

tohle bych předhodil Axisu, ať se s tím porve. Tím bych měl zajištěno,
ž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.

Pak použijte RMI, když máte na obou stranách Javu a chcete toho zneužít.
V tom případě nemá cenu si hrát na webservicy a platformovou nezávislost. A naopak, pokud si chcete hrát na platformovou nezávislost,
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.

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

Makub
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Supercomputing Center Brno             Martin Kuba
Institute of Computer Science    email: [EMAIL PROTECTED]
Masaryk University             http://www.ics.muni.cz/~makub/
Botanicka 68a, 60200 Brno, CZ     mobil: +420-603-533775
--------------------------------------------------------------

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Odpovedet emailem