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 --------------------------------------------------------------
smime.p7s
Description: S/MIME Cryptographic Signature
