18
listopada
2009
Któż z nas nie testował WebService'ów, a któż z nas nie używał do tego SoapUI :) Ok, z rzeczami oczywistymi dyskutować nie będę, ale przy okazji jednego projekciku okazało się, że fajnie by było gdyby mój mock potrafił zrobić coś więcej niż tylko odpowiedzieć na nadesłany komunikat.
Oczywiście sam SoapUI posiada dosyć spory wachlarz możliwości, bo może wysłać losowy request spośród wprowadzonych, lub wysyłać wedle sekwencji, itp.
Problem w tym, że moim wysublimowanym życzeniem było aby korelować komunikaty określonego typu na podstawie jednego pola z XMLa - nazwijmy je polem "X". Jeśli w polu X przyszła wartość, której do tej pory nie widzieliśmy - odpowiedz jednym komunikatem, jeśli ta wartość już została przez nas odebrana (ostatnio :) ), to prześlij trochę inną odpowiedź.
Na pomoc przyszedł mi wbudowany interpreter Grooviego, którym to można oskryptować kilka fragmentów aplikacji, między innymi tworzone MockService.
No cóż, rozwiązaniem mojego problemu okazało się wrzucenie poniższego skryptu do "OnRequest" konkretnego WebService'u.
import groovy.sql.Sql
import java.sql.*;
def url = 'jdbc:oracle:thin:@localhost:1521:XE'
def driver = 'oracle.jdbc.OracleDriver'
def user = 'mnp_data'
def password = 'mnp_data'
def sql = Sql.newInstance(url, user, password, driver)
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
def holder = groovyUtils.getXmlHolder( mockRequest.requestContent)
holder.declareNamespace("xxx", "http://www.ftang.com/example")
def props = mockRunner.mockService
context.put('props', props);
def _phoneNumber = holder.getNodeValue( "//xxx:number")
log.error(_phoneNumber)
if (_phoneNumber != null) {
if (context.phoneNumber != _phoneNumber) {
context.setProperty('phoneNumber', _phoneNumber)
context.setProperty('responseType', 0)
} else {
context.setProperty('responseType', 1)
}
sql.eachRow("select * from cases where phone_number = ?", [_phoneNumber]) {
log.error(it)
context.setProperty("caseId", it['case_id'])
}
}
def _getPhoneNumber = {
return props.getPropertyValue('phoneNumber')
}
context.setProperty("getPhoneNumber", _getPhoneNumber);
def _getOpenCasesResponse = {
if(context.get('responseType')==1)
return " ";
}
context.setProperty("getOpenCasesResponse", _getOpenCasesResponse);
Prawda, że proste? :)
A czy Wy używacie grooviego? A może SoapUI?
15
listopada
2009
Nieee... to po prostu udało mi się uruchomić BPEL Designera - plugin
do Eclipse'a. Co prawda wymagało to grzebnięcia w źródłach, które nie
były aktualizowane już od dłuższego czasu. Zmiany polegały głównie na
poprawie zależności. Niemniej, plugin z wersją 3.5 Eclipse'a działa
sprawnie. W poprzednich wersjach miał tendencje do zacinania się, a
przyczyny tego nie udało mi się namierzyć.
Business Process Expression Language. Czyli XML do
opisywania przepływu długotrwałych procesów w przedsiębiorstwie, itp.
Dużo bełkotu marketingowego sprowadzającego się do tego, że jest to
ciężki w obejściu twór, którego główną zaletą są:
Wszystko to oczywiście musi działać w jakimś kontenerze. Ja akurat, ze
względu na miejsce pracy mam styczność z ODEO
(http://top.touk.pl/confluence/display/top/ODEO), które bazuje na Apache
ODE (http://ode.apache.org). Ot taki engine do uruchamiania procesów
biznesowych.
Na ostatnim JUGu koledzy z pracy mieli nawet prezentację na temat
rozwiązań, których używamy - między nimi również ODEO:
http://top.touk.pl/confluence/display/top/BPEL+in+Practice
Jest on o tyle fajnym narzędziem - a przynajmniej powinien być, bo
pozwala na graficzne przedstawienie procesu, co powinno ułatwić jego
ogarnięcie. Oczywiście kwestia z którą można swobodnie polemizować ;-)
Plugin nie jest też zdecydowanie doskonały, bo nie wszystko w nim
działa. A co w pluginie nie działa?
Co mogłoby działać lepiej.
No cóż, żeby nie psioczyć, zamierzam te włąśnie wyżej wymienione rzeczy
poprawić. Zobaczymy co z tego wyjdzie :) W tej chwili projekt na
eclipse.org jest od dłuższego czasu nieaktywny (brak zmian w CVS oraz
postów na grubie projektu), a szkoda, bo to jedyna na tyle kompleksowa
implementacja narzędzia do BPELa. Oczywiście z tych open-source.
13
listopada
2009
Wczoraj byłem w TR (http://www.trwarszawa.pl/). Na wejściówki, po
taniości. Obejrzałem spektakl Solaris, bo to Lem, bo znam, bo jako jedną
z niewielu rzeczy Lema czytałem. Powody były.
Wrażenia? Bardzo fajnie się oglądało. Problem jedynie w tym, że z
wydawałoby się dosyć prostej fabularnie książki zrobiono spektakl,
którego nie da się w całości zrozumieć z powodu niedopowiedzeń. Czy to
jest domena nowoczesnych interpretacji teatralnych??
21 kwietnia 2010, 18:01:59 | Reaktywacja o-filmoramy? |
Mam nadzieję, że wreszcie jednak ruszę z blogiem filmowym, po raz kolejny należy mu się reaktywacja.
http://o-filmorama.blogspot.com