Možností, jak v Javě vygenerovat SOAP klienta z WSDL, je několik. Já jsem se rozhodl použít JAX-WS maven plugin, protože to mi přijde nejjednodušší. Postup je následující:
1. Vytvořit nový maven projekt:
Tím vznikne nový projekt s názvem soap-test.
2. Upravit pom.xml, který vznikne, tak aby vypadal následovně:
Přidali jsme dependence na jaxws-rt a policy, referenci na plugin jaxws-maven-plugin a řekli maven-compiler-pluginu, že chceme pro build použít Javu 1.6, protože JAX-WS potřebuje nejmíň Javu 5. Sun repository (maven2-repository.dev.java.net) je tam pro případ, že by si maven stěžoval na unresolved dependency na com.sun.xml.ws-rt, jinak není potřeba.
3. Zkopírovat do vytvořeného projektu WSDL soubor
V adresáři src v nově vygenerovaném projektu vytvoříme podadresář wsdl a do něj zkopírujeme náš WSDL soubor. Výsledná cesta k WSDL souboru je pak tedy:
soap-test/src/wsdl/my-service.wsdl
Teď už stačí jen spustit build (mvn install nebo mvn jaxws:wsimport) a vygenerované .java soubory najdeme v adresáři:
soap-test/target/jaxws/wsimport/java/cz/vancisin/schema/
18. 11. 2014
4. 11. 2014
Java metoda pro normalizaci českých stringů v Javě
Jeden z požadavků v aplikaci trénujpaměť.cz je, aby při vyhodnocování odpovědí nebyla brána v úvahu velká a malá písmena a diakritika. Takže pokud je správná odpověď například kočárek, systém by měl uznat kocarek, kočárek i Kočárek.
Vytvořil jsem proto následující metodu, která provádí normalizaci stringů - upraví je tak, že:
Jak funguje je nejlépe vidět v unit testu:
A samotná implementace vypadá takto:
Použití je jednoduché - oba porovnávané řetězce (v případě trénujpaměť.cz správnou a zadanou odpověď) napřed normalizovat a až pak porovnat:-)
Vytvořil jsem proto následující metodu, která provádí normalizaci stringů - upraví je tak, že:
- odstraní whitespacy na začátku a konci stringu (trim)
- odstraní diakritiku
- převede celý řetězec na malá písmena
- odstraní zero-width no-break space znak (U+FEFF)
Jak funguje je nejlépe vidět v unit testu:
A samotná implementace vypadá takto:
Použití je jednoduché - oba porovnávané řetězce (v případě trénujpaměť.cz správnou a zadanou odpověď) napřed normalizovat a až pak porovnat:-)
29. 10. 2014
GIT a SVN - nastavení proxy serveru
GIT
Proxy server pro GIT se nastaví příkazem:Kde:
- proxyuser je uživatel, pod kterým se má git na proxy přihlásit
- proxypwd je heslo tohoto uživatele
- proxy.server.com je url proxy serveru
- 8080 je port proxy serveru
Nastavení je možné zrušit (vyčistit) příkazy:
Zda se nastavení povedlo je možné zkontrolovat příkazem
Ve výpisu by nastavené hodnoty měly být vidět.
Příklad pro lokálně rozjetou cntlm proxy (uživatelské jméno a heslo pro remote proxy server má nastaveno ve své konfiguraci):
SVN
Proxy pro SVN se nastavuje v konfiguračním souboruservers
, jehož
umístění závisí na operačním systému. Na Linuxu je v adresáři
~/.subversion
, ve Windows je to %APPDATA%\Subversion
. Kde je adresář
AppData se zjistí příkazem:
Téměř na konci tohoto souboru v sekci
[global]
je potřeba odkomentovat a
nastavit správné hodnoty u řádků:
Opět příklad pro lokální CNTLM proxy:
21. 10. 2014
Limit v SQL dotazu na Oraclu a chyba ORA-00933
Máme následující SQL dotaz:
V PostgreSQL i MySQL projde správně a vrátí nám prvních deset uživatelů, jejichž uživatelské jméno začíná na "a". Na Oraclu ale skončí chybou:
Je to proto, že Oracle nezná klauzuli LIMIT. V určitých případech je možné místo ní použít pseudosloupeček ROWNUM:
Je ale potřeba si dát pozor, že ne vždy funguje ROWNUM stejně jako LIMIT. Obzvlášť ve spojení s ORDER BY:
Tenhle dotaz nám může vrátit jiná data, než jaká bychom očekávali. Napřed se totiž vyhodnotí podmínka na ROWNUM a až pak se provede ORDER BY. To je rozdíl oproti původnímu dotazu, kde se napřed nalezené záznamy seřadí a až pak se aplikuje LIMIT.
Správný postup je původní dotaz vnořit do nového, který přidá podmínku s ROWNUM:
Více informací:
http://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns009.htm
http://www.oracle.com/technetwork/issue-archive/2006/06-sep/o56asktom-086197.html
V PostgreSQL i MySQL projde správně a vrátí nám prvních deset uživatelů, jejichž uživatelské jméno začíná na "a". Na Oraclu ale skončí chybou:
Je to proto, že Oracle nezná klauzuli LIMIT. V určitých případech je možné místo ní použít pseudosloupeček ROWNUM:
For each row returned by a query, the ROWNUM pseudocolumn returns a number indicating the order in which Oracle selects the row from a table or set of joined rows. The first row selected has a ROWNUM of 1, the second has 2, and so on.Například:
Je ale potřeba si dát pozor, že ne vždy funguje ROWNUM stejně jako LIMIT. Obzvlášť ve spojení s ORDER BY:
Tenhle dotaz nám může vrátit jiná data, než jaká bychom očekávali. Napřed se totiž vyhodnotí podmínka na ROWNUM a až pak se provede ORDER BY. To je rozdíl oproti původnímu dotazu, kde se napřed nalezené záznamy seřadí a až pak se aplikuje LIMIT.
Správný postup je původní dotaz vnořit do nového, který přidá podmínku s ROWNUM:
Více informací:
http://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns009.htm
http://www.oracle.com/technetwork/issue-archive/2006/06-sep/o56asktom-086197.html
Přihlásit se k odběru:
Příspěvky (Atom)