cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Reinhard Poetz <reinh...@apache.org>
Subject Re: [cForms] Errors coming from service layer
Date Mon, 14 Mar 2005 15:50:37 GMT
Sylvain Wallez wrote:
> Reinhard Poetz wrote:
> 
>> Vilya Harvey wrote:
>>
>>> Reinhard Pötz wrote:
>>>
>>>>
>>>> Imagine following scenario: You have a service layer that is exposed 
>>>> as web services. cForms already does as much validation as possible 
>>>> but some complex checks can only be performed by the backend.
>>>>
>>>> If I call a webservice (via Axis client) this webservice can return 
>>>> errors (how this is done hasn't been defined yet).
>>>>
>>>> Are there any best practices or experiences how to map errors coming 
>>>> from the service or domain layer to cForms widgets? (The error has 
>>>> to appear at widget level.)
>>>
>>>
>>>
>>>
>>> In your flowscript, you can create your own ValidationError object 
>>> and explicitly set that on the apppropriate widget.
>>>
>>> What we did was to define our own type of exception which included 
>>> information about all validation errors that were found, then wrote a 
>>> simple(-ish) flowscript function which handled looking up the 
>>> relevant widgets, creating the error objects and setting them into 
>>> the widgets.
>>
>>
>>
>> Thank you!
>>
>> This means that the service layer is aware of which widgets exist? I'm 
>> not sure if I (and especially my customer) likes this bi-directional 
>> dependency...
> 
> 
> 
> Nono! Your validation code has to catch the exception and translate it 
> into a validation error. This means you can have "regular" validation 
> errors (i.e. the backend could be reached but detected invalid data) and 
> communication-level errors, e.g. "could not validate data, try again 
> later".


let's try to express this using some pseudo-code:

var form = new Form(...);
var businessObject = getBusinessObjectFromServiceLayer();
form.load(businessObject);
form.show(...);

form.save(businessObject);
var errorType;
try {
   saveBusinessObjectInBackend(businessObject);
} catch(ex) {
   errorType = ex.getErrorType();
}

if(errorType == "user.already.exists") {
   form.lookupWidget("user").setValidationError("User already exists!");
}

form.show(...);

Do you mean something like this? The problem with this is that the service layer
can return *a lot* of different error types and I would have to write dozens of
ifs ... :-(

-- 
Reinhard Pötz           Independant Consultant, Trainer & (IT)-Coach

{Software Engineering, Open Source, Web Applications, Apache Cocoon}

                                        web(log): http://www.poetz.cc
--------------------------------------------------------------------


Mime
View raw message