2007/11/10
JGear LiveSource - Namodelujte si své Java EE aplikace!
Na portálu java.cz jsem publikoval recenzi na JGear LiveSource, Eclipse plugin, který je pokračovatelem populárního TogetherJ a je základním kamenem nového JBuilderu 2007:JGear LiveSource je nový modelovací nástroj firmy CodeGear. LiveSource umožňuje modelování a vizuální návrh Java /Java EE aplikací pomocí modelovacího jazyka UML. Tento produkt je distribuován jako plugin pro vývojové prostředí Eclipse. V tomto příspěvku bych chtěl popsat svoje dojmy a zkušenosti z tohoto produktu.
Celou recenzi naleznete zde:
JGear LiveSource – Namodelujte si své Java EE aplikace! (java.cz)
Zde se můžete podívat na screenshoty.
Štítky: eclipse, IDE, JBuilder, JGear, programovani, recenze, software
2007/10/14
Web Services Standards Poster
WS-Standards Poster 2007-02.pdf
který vytvořila a dala k dispozici německá firma innoQ.
Pro zajímavost. Před pár měsíci jsem procházel nové WS standardy a projekty a pro přehledné vyjádření vzájemných souvislostí jsem použil kontextové mapy vytvořené pomocí CMapTools (více zde).

Příklad: kontextová mapa pro projekty Metro a Tango
Štítky: programovani, standards, webservices
2007/07/02
Eclipse - nefunkční "hot code replace"
Remote Debugging
Vzdálené debugování (remote debugging) je užitečný nástroj pro ladění "vzdálených" aplikací - "vzdálených" v tom smyslu, že se pomocí svého debuggeru připojujete do jiné běžící Java Virtual Machine nejspíše s úmyslem ladění dané aplikace ;) Nebudu nosit dříví do lesa: Více si o tomto tématu přečtete například v článku Debugging v praxi - opravdu samozřejmost?! od otce Fura či Eclipse a drobné maličkosti - vzdálené debugování od Dagiho.
Hot Swap
S remote debuggingem souvisí další funkcionalita, která z mé vlastní zkušenosti dokáže ušetřit obrovské množství času. Tato funkcionalita se jmenuje hot swap. Hot swap umožňuje "vpašovat" do běžící aplikace novou verzi přeloženého kódu a nahradit jí tak kód původní.
Pro lepší představu, proč považuji hot swap za maximálně efektivní pomůcku, uvedu jeden příklad z mé praxe. Pracoval jsem na Ariba projektu, kde restart modulu Ariba aplikace (to jest jedné instance Weblogicu) na které jsem pracoval, trval na laptopu přibližně 9-10 minut (díky tomu, že se inicializovaly různé adaptéry, Tibco repositories, kontrolovala se XML metadata,...).
Součástí typického úkolu na tomto projektu byl vývoj nějakého vysoce sofistikovaného ;) java kódu, který používá pokud možno public API aplikace a na konci dosáhne kýženého výsledku, za aplausu business consultantů :) V uvedené konfiguraci, kdy jedním restartem ztratíte tolik času, si musíte dávat sakra dobrý pozor na jakékoliv triviální chyby (na netriviální chyby si často pozor dát ani nemůžete, například z toho důvodu, že API není zrovna dobře zdokumentované a až stacktrace při testování vás upozorní na možný problém) ;)
Zde se pomalu dostávám k jádru věci. Hot swap vám v těchto případech velice dobře poslouží: triviální problém - zapomněli jste test na
null? Chcete přidat debugovací řádku...? S hrůzou zjistíte že nerovnost v podmínce je přesně obráceně? Bez remote debuggingu (aneb tak jak jsem to viděl kupodivu u velkého množství kolegů konzultantů) musíte shodit server, opravit, překompilovat, zrestartovat a dvacet minut je pryč. Následnovně zjistíte, že o pár řádků dále je problém podobný a tak pořád dokola. Ti rozumnější (případně ti pracující v módu fixed fee a ne time&material :D ) využijí hot swap: kód v IDE jednoduše opravíte, upravíte, přeložíte, a pokud jste debuggerem připojeni do JVM v které běží aplikace, hot swap nahraje novou verzi byte-kódu do JVM a nahradí jí kód původní. V těchto jednoduchých případech vám hot swap nezanedbatelně šetří čas. (Samozřejmě zde existuje mnoho omezení, která když porušíte, debugger zobrazí varování, že daná změna není podporována (změny v hierarchii tříd ale i například přidání public metody atd.) a restartu se stejně nevyhnete).
Hot Swap v Eclipse
Zatímco v Intellij Idee hot swap fungoval bez problémů a intuitivně, po přechodu na Eclipse mi hot code replace (jak se tato feature v eclipsu nazývá) v mnoha případech nefungoval. Po rekompilaci třídy se mi místo očekávaného nahrání nového byte-kódu na server zobrazovalo často následující varování:
Trochu jsem pátral co je příčinou a dopátral jsem se. Na obranu debuggingu v Eclipsu můžu uvést, že je v tom (částečně nevinně).
Scheme change not implemented
Zásadní problém je ten, že Eclipse pro kompilaci nepoužívá sunovský
javac, nýbrž svůj kompilátor (součást JDT Core component). Vyprodukovaný byte kód se liší (nezkoumal jsem do detailů jak...) od byte kódu class přeložených javac kompilátorem. Tyto rozdíly jsou pro debugger ale podstatné tak, že neumožní záměnu byte kódu za běhu. Podobný problém viz např. na news.eclipse.tools.jdt: Scheme change not implemented.(Nutno podotknout, že důvod proč se mi na serveru objevuje kód kompilovaný jiným kompilátorem (
javac než z IDE (eclipse compiler), je fakt, že instalace a deployment této aplikaci je poměrně komplikovaný proces a je pro něj přepdřipravena sada nástrojů (Ant skriptů), které je nutné ve správném pořadí použít v závislosti na prováděné změně).Řešení
Řešení problému spočívá v použití stejného kompilátoru v obou případech.
První možnost je donutit Eclipse kompilovat pomocí
javac. To jde podle mě jednoduše pouze pomocí nového ANT builderu a custom Ant scriptu. Což není zrovna elegantní.Druhá varianta je donutit existující produkt, který obsahuje vlastní "Ant" build systém, kompilovat pomocí Eclipse kompilátoru.
To jde celkem jednoduše:
- stáhnout
ecj.jar(JDT Core Batch Compiler)z eclipse.org
- donutit Ant použít tento compiler: tzn. nastavit hodnotu Ant property
build.compilernaorg.eclipse.jdt.core.JDTCompilerAdapter
- a nakonec samozřejmě přidat
ecj.jardo classpath (tip pro lenochy: nahrát tento jar do adresáře ant/lib)
Tímto donutíme Ant kompilovat pomocí Eclipse kompilátoru a hot swap neboli hot code replace funguje tak jak má.
Malá poznámka na konec. Rozhodně bych nedoporučoval měnit použitý compiler na produkčním server, o čem tu pojednávám, je prostředí vývojáře!
Více kompilování v Eclipse o možnostech použití vně Eclipse IDE se lze dočíst v online nápovědě: JDT Plug-in Developer Guide > Compiling Java code.
Štítky: eclipse, programovani
2007/05/18
TunnelliJ a Idea plugin API
Napadlo mě tedy, že se mrknu jaká je situace v Idee, zda ještě pořád funguje plugin Tunnellij (TCP tunnel integrovaný do IDE), který jsem napsal před pár lety pro verzi Idea 3.5 (jakožto pomůcku pro sniffování SOAP zpráv). Mrknul jsem na stránky Jetbrains a zjistil jsem, že udělali v této oblasti velký kus práce. Nové a pěkně udělané stránky plugin repository, relativně velké množství pluginů (vzhledem k tomu že Idea je komerční IDE).
Takže jsem vzal poslední build Idea verze 7 a zkusil jsem, zda můj Tunnellij (popis) plugin bude i nadále fungovat. Funguje bez problému, takže plugin API v Idee se zda být celkem stabilní, minimálně pro featury které jsem použil. Lehce se změnil a rozšířil plugin XML descriptor, takže jsem doplnil chybějící údaje (vsuvka - na zmiňované přednášce se mi líbilo, že Jarda zdůraznil, že návrh API není jenom o Java kódu a public interfacech, ale týká se mnohem více věcí, od proměnných prostředí OS přes různé deskriptory, konfigurace atd...) a znova rebuildoval celou package a nahrál do plugin centra. Paradoxem je, že tento build Idea pluginu jsem již dělal z Eclipsu ;-)
A co mě nakonec příjemně překvapilo je počet downloadů - přes 5700 downloadů je pěkné číslo ;-)
Štítky: aplikace, programovani
2006/11/21
JBuilder 2007 aneb veletoc Borlandu
Proč bychom si ho ale měli chtít vyzkoušet? Sám nevím. JBuilder nebyl špatné IDE, ale v časech kolem verzí 6, 7, 8 (ano Borland chrlil major verze každý půlrok) podle mě zaspal dobu. Co nám může nabídnout za nemalé peníze dnes? Nejdříve se podívejme, co jsou to ty nemalé peníze. Licenční model zůstáva zachován, verze Enterprise, Professional a nejchudší Developer stojí 1.999 resp. 799 resp. 399 dolarů (cena za nové licence, ceny za upgrade jsou o něco nižší). Poplatky za podporu nejsou v této sumě zahrnuty a nemalé peníze se platí se zvlášť. Čtyřista babek za Developer verzi, určenou pro individuální a open-source uživatele mi přijde jako silná káva a nerozumím nikomu, kdo by do toho tyto peníze investoval. Podíváteli se na seznam funkcí, je tato verze silně okleštěná (či vykleštěná ;-)) a argument, že můžete IDE rozšířit o pluginy produkované eclipse komunitou zde jaksi nemá smysl.
Dalším důvodem proč podlě mě NEinvestovat do JBuilderu je evidentní nejistota co se týče směřování tohoto produktu a potažmo celé firmy. Investovali byste (sta)tisíce dolarů do software firmy, která v únoru tohoto roku oznamovala, že se zbaví své divize zabývající se vývojovými nástroji (JBuilder, Delphi, C++Builder, C#Builder,...) protože to, co je podle nich "hot", je trh application life management (ALM) softwaru. Tento týden (o devět měsíců později) naopak Borland oznámil, že nejlepší bude divizi nástrojů si ponechat, ale vyčlenit jí jako samostatnou odnož se jménem CodeGear. Pěkný veletoč ;-) Tyto zvraty jsou pro Borland celkem typické, vzpomeňme několikaletou neúspěšnou přeměnu v Inprise a pozdější návrat k původnímu firemnímu jménu Borland.
Nyní se podívejme na technickou stránku věci. Co nového JBuilder 2007 přinese. Čerpám pouze z dostupné dokumentace, což je především web a pdfka: Data Sheet a Feature Matrix.
Již úvodní věta je celkem odvážná :)
The latest JBuilder is the first application server independent enterprise class IDE built on open source Eclipse.
Pokračujme dále:
It provides all the economic benefits of an open source platform, with the reliability of a trusted, turnkey solution provider.
S výše zmiňovanou cenovou politikou mi přijde poukazovat na ekonomické benefity open source platformy také celkem zcestné ;-)
Krásné fráze.
Z inzerovaných featur:
- postavený na platformě Eclipse 3.2
- podpora JEE5,
- podpora JSE5
- oboustranné modelování v UML 2.0
- Visual Web Services Designer
- vizualizace usnadňující EJB development (Visual EJB Workbench)
- integrovaný OptimizeIt 2007 (což může být celkem zajímavý argument)
- ProjectAssist a
- další čím dál víc enterprise-abstraktně-marketingové funkce.
Jak už jsem řekl jsem k osudu JBuilderu dost skeptický. Ani ne kvůli Eclipse a Netbeans, které jsou zdarma. Ani ne kvůli IntellJ Idee, která je o dost levnější a v některých věcech stále nepřekonaná, ale podle mě míří na trochu jiný segment trhu. Skutečná konkurence pro JBuilder jsou produkty jako IBM RAD nebo Oracle JDeveloper. Jenže ti to mají snazší. IBM i Oracle mají sílu s dalšími produkty a službami protlačit svá IDE k zákazníkovi. Borland tuto sílu už dávno nemá!
Štítky: aplikace, programovani, software
2006/02/03
quick oracle tip - how to move tablespaces
ALTER TABLESPACE DATA02 OFFLINE;
ALTER TABLESPACE DATA02
RENAME DATAFILE 'D:\oracle\oradata\mboruvka\DATA021.ORA' TO 'G:\oracle\oradata\mboruvka\DATA021.ORA';
ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
ALTER TABLESPACE DATA02 ONLINE;
note: with this procedure it is not necessary to shutdown db.
Štítky: programovani, software
2005/11/27
Sněžka!
Výstup na Sněžku v zimě má svoje kouzlo - viz následující fotky:
![]() | ![]() |
![]() | ![]() |
Štítky: cestovani, programovani, software
2005/10/06
Ajax - lehký úvod
Fakta:
Rozdíl mezi tradiční webovou aplikací a webovou aplikací podle Ajaxu je na následujícím diagramu:

Levá strana diagramu popisuje klasickou webovou aplikaci tak jak ji všichni známe: browser posílá HTTP requesty na server, server vrací HTML+CSS, které je zobrazeno v browseru.
Pravá strana diagramu ukazuje model s použitím Ajaxu. Na první pohled přibyla do části web browseru další vrstva - Ajax engine. Požadavky z uživatelského rozhraní jsou převedeny na volání metod JavaScriptu v Ajax enginu, který komunikuje se serverem. Server odpovídá ve formátu XML dokumentu, který Ajax engine transformuje na browserem zobrazitelné HTML a CSS.
Zásadní rozdíl je v tom, že v klasické webové aplikaci je nutné pro přechod mezi dvěma stavy aplikace načíst celou stránku. To je jak všichni známe zdlouhavé a otravné. Ajax umožňuje změnu pouze části stránky. Wikipedia na toto téma uvádí jako příklad webovou aplikaci umožňující přídávat k obrazkům popisky (viz. např Flicker).
Tradiční pojetí: obrázek a formulář pro přidání popisku. Odeslání formuláře (submit) způsobí přechod aplikace do nového stavu, který představuje nová stránka zobrazující ten samý obrázek s přidaným popiskem.
V pojetí Ajaxu: obrázek a formulář pro přidání popisku. Odeslání formuláře nezpůsobí nový HTTP call, ale pouze volání JavaScript metody na Ajax enginu. Ten aniž by zatím jakkoliv měnil zobrazenou stránku, odešle data na server a počká na odpověď v XML. Pomocí webových technologií DHTHML a CSS zobrazí popisek u obrázku na aktuálně zobrazené stránce, aniž by se znova načítala. Odezva aplikace je mnohem kratší, uživatel nemusí čekat na znovunačtení stránky, což v případě obrázku nemusí být zanedbatelná doba (ano, asi je v cachi browseru, ale i tak...:-).
Protože šedá je teorie a zelený je strom praxe, nyní se mrkneme na příklad, kde si Ajax můžete vyzkoušet v praxi: Typickým příkladem použití konceptu Ajax je Google Suggest. O této vychytávce, která je jako beta stále pod Google labs, jsem psal asi před půl rokem (viz Google napovídá). Bohužel jsem v té době nepátral, jak je to udělané. Vody web designu a developmentu nejsou tak stojaté jak se zdá a já jsem tak trošku zaspal dobu :-)
Jak to teda funguje: Google stránka vypadá stejně jak ji důvěrně znáte. Začnete na klávesnici vyťukávat heslo které hledáte a browser vám napovídá. Ale nenapovídá vám pomocí historie dotazů uložené ve vašem browseru (to co jste hledali někdy v minulosti). Napovídá Google a to tak, že po jednotlivých písmenkách na pozadí zavolá službu na Google serveru, která mu vrátí sadu nejčastěji hledaných hesel podle písmen, které jste zadali. Podstatné je, že to funguje - a funguje to rychle. A vysledný dojem pro uživatele: stránka se ani nehne, tzn. nenačítá se znovu celá, pouze se obnovují dropdowny s nabízenými hesly.
Příklad jak použití Ajaxu vývojáři Googlu neuvádím nahodou. Google se Ajaxu chopil zodpovědně a je výkladní skříní Ajax aplikací. Posuďte sami:
Pokračování příště: Zrovna zkouším AjaxTags, což je knihovna JSP tagů, která umožňuje použít jednoduché Ajaxové triky v JavaServerPages.
Štítky: programovani
2005/05/10
IT: JBuilder open sourcem
Co je v pozadí? Samozřejmě je to vítězné tažení Eclipsu.
I když CEO Borlandu se tváří stále optimisticky - viz článek Žiješ jenom třikrát - bude to podle mě mít Borland hodně těžké a osobně nedávám JBuilderu moc šancí.
Zároveň je mi JBuilderu trošku líto, protože to bylo moje první IDE. Díky práci na pluginu WASP Developer jsem si důkladně prošel každou verzi JBuilderu od verze 4 (s Porsche Boxster ve splash screenu ;-), 5, 6, 7, 9, X). VSUVKA: Jako malé ocenění tohoto (dnes už dále nevyvíjejícího se) pluginu je pro mě fakt, že samotný html/php/xml/... guru Jirka Kosek použil náš tehdehší plugin ve své diplomce na téma webové služby! ;-) Ale to jsem odbočil.
Otázka která mě napadá: můžete v dnešní době existovat firma soustředící se primárně na vývojové prostředí (IDE)?
...eclipse pod rouškou open source, za zády sponzorovaný všemocnou IBM zabíjí všechny ;-) není to dumping? kdo ještě zbývá? je ted řada na intellij? Co na to jan tleskač?...
Štítky: programovani, software
2005/03/03
IT: Excel v Jave? POI!
V rámci projektu na kterém teď pracuju jsem potřeboval dostat z 10 megového Excel sheetu tisíce hodnot a transformovat je do výstupních CSV souborů. Podle výstupního souboru se lišila kombinace sloupců a jejich transformace. Samozřejmě že by to šlo vyřešit a smést ze stolu rychlým sledem copy&pastů v Excelu a maximálně použitím nějakého makra.
Dostávám se k jádru věci. Rozhodl jsem se pro řešení v javě. Zasvěcení asi vědí, že se k práci s Microsoft Office soubory používá open-source knihovna Jakarta POI.
Takže moje poznatky: pro práci s Excelovskými tabulkami vás zajímá jen jedna část POI - POI-HSSF. Načíst Excelovský dokument a vybrat z něj hodnoty které potřebujete je po rychlém nahlédnutí do Quick guidu záležitost pár minut. Co mě potěšilo je, že to opravdu funguje.
Jenom jsem musel pro načtení 10 MB XLS souboru jsem musel zvětšit heap VM (
-Xmx196M zabralo).Další malou záludností je iterátor přes buňky v řádku (
hssfRow.cellIterator()). Nevracel buňky tak jak byste čekali, ale v jakémsi fyzickém pořadí a na v logickém. Zatím jsem nestudoval o co jde. Stačí použít hssfRow.getCell(int).A nakonec abyste měli představu jak vypadá API sem dávám malý příklad:
FileInputStream fis = new FileInputStream(xlsFile)
POIFSFileSystem fs = new POIFSFileSystem(fis);
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFSheet sheet = wb.getSheetAt(0);
HSSFRow row = sheet.getRow(rowNumber);
HSSFCell codeCell = row.getCell(COLUMN_CODE);
Prostě jednoduché a funkční.
Dále jsem potřeboval jeden velký CSV soubor načíst a jiný zapsat.
S tímto formátem POI nepracuje. Takže jsem pro zápis použil normální
PrintWriter a pro čtení knihovnu z ostermiller.org. K ní jedna malá poznámka - CSVParser vrací jen String[][], takže nebude zrovna moc vhodný pro veliké dokumenty.Štítky: programovani, software
2005/03/02
IT: titulek okna v *.bat
(*.bat, *.cmd) ve windowsech. Stavá se vám taky, že máte najednou otevřených šest oken s příkazovou řádkou a zuřivě mezi nimi přepínáte přes Alt+Tab a hledáte to jediné správné? Tak teď už to bude jednodušší. Dodnes jsem netušil že existuje příkaz title [string]. Je to asi tím, že jsem se tyhle příkazy učil na MS-DOSu 5.0. A to tam ještě nebyl. Nebo ano? :-) Pro ty z Vás, co mají potíže vyznat se v oknech i po změně titulků, existuje ještě jedno řešeni: použít
color [XX], kde XX jsou hexa-číslice reprezentující barvy.Opakování je matka moudrosti.
Štítky: programovani, software
2005/02/28
IT: Apache vs. Skype
C:\Program Files\Apache Group\Apache2\bin>Apache.exe
(OS 10048)Only one usage of each socket address (protocol/network address/port)
is normally permitted. : make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
No a bohužel nemáte moc času na řešení tohoto problému. Naštěstí se to povedlo. Takže jak postupovat? První co mě napadlo bylo že si port 80 obsadil Microsoft IIS. Jenže ten neběžel. Takže jsem si pustil utilitu TCPView z kolekce www.sysinternals.com Výborný pomocník. Z něj jsem už jednoduše zjistil, že si port 80 obsadil Skype. Zajímavé. Děje se to jenom v případě, že notebook nemám v síti. Usuzuju z toho, že Skype zkouší pro vytvoření spojení použít svoje standardní porty, ale když se mu to nepovede (notebook není v síti), obsadí si port 80 a i když se nikam nepřipojí a je ve stavu offline - zůstane viset na portu 80.
Štítky: programovani, software
IT: Oracle a jeho služby ve windows
Startup Type) z Automatic na Manual. Oracle Tip Manage Oracle9i services under Windows vám na pár řádcích udělá jasno k čemu která služba je a jestli se vám vyplatí jí spouštět automaticky, ručně nebo nikdy.
Na konci článku jsou dva jednoduché skripty pro startování a stopování služeb Oraclu. Ušetří vám zdlouhavé klikání v managementu
Service.Štítky: programovani, software
2005/01/21
IT: Maly kviz pro znalce batch filu - reseni
Pozdrzet vykovavani
*.bat skriptu napr. na nekolik vterin neni zrovna jednoducha zalezitost. Na princip reseni prisel po nekolika iteracich prisel jako prvni Fil.
Princip reseni je nasledujici. Protoze zadne
pause [time] bohuzel neexistuje a ani choice /t:time uz ve Windows XP/2k nemuzete pouzit, musite si pomoci sami trosku vetsim hackem :-)
Rob van der Woude poskytuje skript obsahujici reseni - v cyklu volate prikaz
ping s nastavenym timeoutem proti neexistujici IP adrese:
ping -n 1 -w [timeout] [neexistujici.ip.adresa]
Chce to duvtip! :-)
Štítky: programovani, software
2005/01/19
IT: Maly kviz pro znalce batch filu
*.bat) smycku, ktera v kazde iteraci ceka rekneme 5 vterin. Jde mi o to cekani, nejde mi o tu smycku ;-)
Štítky: programovani, software
2005/01/02
IT: Refactoring
Knizka pojednava o refactoringu, neboli upravach existujiciho kodu za ucelem zvyseni jeho kvality aniz by tim vsak utrpelo jeho vnejsi chovani. Je pekne strukturovana: tzn. zacina tim proc je refactoring uzitecny, jak ho praktikovat, co je k nemu potreba. Dulezite jsou ale dve casti knihy - seznam tzv. bad smells a seznam jednotlivych refactoringu, ktere tyto zapachy odstranuji. Vsechno je doplnene srozumitelnyma prikladama v Jave.
Jak jsem si tak procital jednotlive bad smelly, vybavovaly se mi casto i classy, na kterych bych jednotlive zapachy :-) dobre ilustroval :-)
Pokud zrovna nemate tuto knizku po ruce, doporucuju se podivat do helpu ke svym IDE. Idea, Eclipse i JBuilder refactoring uz dnes podporuji a velmi ho zjednodusily - vetsinou na pouhou klavesovou zkratku (kdyz vite co oznacit ;-)). Pro Ideu existuje pekny tutorial ktery ukazuje refactoring pomoci tohoto IDE.
Koho zajima refactoring vic, muze se mrknout na web ktery shromazduje veskere materialy na dane tema: www.refactoring.com. A kdo chce, muze se subscribnout na RSS feed ktery informuje o novinkach na webu.
Tabulka SmellsToRefactorings ukazuje seznam nejcastejsich bad smellu a zaroven prinasi rady jak se jich pomoci refactoringu zbavit.
No a nakonec abecedni seznam refactoringu s jejich popisy.
Štítky: programovani, software
2004/12/23
IT: WseWsdl2.exe troubles
I would like to point out few problems which I've experienced during my experiments with WseWsdl2.exe tool. I am using WseWsdl2.exe from Microsoft Web Services Enhancements 2.0 SP2. The WseWsdl2.exe is WSDL to SoapClient Tool. It should replace current .NET Wsdl.exe tool. What I find quite disappointing are the error messages produced by this tool. WSDLs we use in our project are compilable without any problems with Wsdl.exe but WseWsdl2.exe complains. What is worse, that the error messages are very unclear. Documentation didn't help us, neither the Google search. We had to take our WSDLs and remove element after element to find out what's wrong with them. Here are the findings, maybe it will help someone having similar troubles. This is the reason for this post.
First problems occur when the WSDL definition contains more than one message part in the (SOAP) message. But the error message says this:
An error occurred processing this WSDL. More information:
System.Exception: Invalid WSDL file from SoapService
at ClientGen.ClientGen.GetBindingType(...)
at ClientGen.ClientGen.WriteCSOperationBinding(...)
at ClientGen.ClientGen.WriteOperationBinding(...)
at ClientGen.ClientGen.WriteClass(...)
at ClientGen.ClientGen.GenerateCode(...)
at ClientGen.ClientGen.GenerateCode(...)
at ClientGen.Class1.Main(String[] arguments)
I know that WSDLs describing messages with more than one message part (referring element) in SOAP body should not be used. It is stated in the WS-I Basic Profile 1.1. We can change the WSDL to wrapped-literal, no problem. But the tool should not produce this general error!
The second problem I would like to point occurs when the WSDL contains unsupported extension element. We are using custom extesion elements within the soap:binding. The extension element present in our WSDL is not marked with wsdl:required="true". So it should be silently ignored if the consumer does not understand him or cannot process him (as stated in the WS-I Basic Profile 1.1, which also clarifies and tights up the rules from the WSDL specification). WseWsdl2.exe does not ignore them - but fails:
An error occurred processing this WSDL. More information:
System.InvalidCastException: Specified cast is not valid.
at ClientGen.ClientGen.WriteCSOperationBinding(...)
at ClientGen.ClientGen.WriteOperationBinding(...)
at ClientGen.ClientGen.WriteClass(...)
at ClientGen.ClientGen.GenerateCode(...)
at ClientGen.ClientGen.GenerateCode(...)
at ClientGen.Class1.Main(String[] arguments)
Again, the error message is very, very unclear! For me it seems that the level of WSDL specifications support is much lower than it was in previous version. Without any warning in the documentation. Or Am I missing something?
Štítky: programovani, software
2004/12/11
Google napovida
Google Suggest prinasi dalsi vylepseni ve vyhledavani na internetu. Vlastne to neni nic jineho nez autocomplete - automaticke doplnovani. V okamziku kdy zadavate do formulare vyhledavaci stranky Googlu svuj dotaz, on vam napovida. Muze vam to usetrit psani, ale taky vidite, jaka souslovi lide nejcasteji hledaji.
Fuknce autocomplete je vetsine uzivatelum PC dobre znama. Setkate se s ni napriklad kdyz zadavate adresu do browseru nebo treba kdyz pisete adresu prijemce v emailu. Vlastne logicky - pouziti i ve vyhledavani v internetu - udelal az Google. Vsadim se, ze se do roka se s touto featurou setkame taky v nejednom z ceskych vyhledavacu.
Co me na tom zarazi jsou dve veci: zpusob jakym byl tento napad prenesen do praxe a taky - ze to vazne pekne funguje.
Jak autor myslenky pise, cela vec ho napadla behem obeda. V Googlu maji udajne pravo venovat az 20% sveho pracovniho casu vlastnim projektum. To je jiste velmi lakave (zde bych jen podotknul, ze se nelze domnivat, ze by vam Google platil za vase soukrome projekty, ale jde o projekty ktere jsou ve vysledku ve vlastnictvi company). Takze za par mesicu svuj napad dovedl do konce.
To ze to funguje skutecne pekne si zkuste sami. Zadejte si jedno slovo a za chvilku se dozvite, v jakych souslovich se nejcasteji vyhledava. Kdyz vezmeme v uvahu kolik miliard stranek Google indexuje a za jakou chvilicku vam nabidne relevantni slova, tak je to vazne k neuvereni. Je jasne, ze napriklad domnivat se, ze po napsani slova Milan se dockam sveho prijmeni, je zatim zcestne :-) I kdyz nekteri znami jiz na Googlu maji slusny page rank, takze u nich to funguje.
Takze, vyzkousejte si sami!
Štítky: programovani, software



