Hi Matthias,
you are right, this would be a nice option. But there should be a
generic solution; because this could also be useful for velocity
representations, for JAXB, JiBX and perhaps other representations.
best regards
Stephan
Matthias Wauer schrieb:
Hi Matthias,
IMO it is not useful, because this needs a lot of memory.
If you are streaming data from a database, a file system or something
else and get an error from the storage, then you also can not send
status 500 because the transmission is already startet.
best regards
Stephan
Thanks Stephan for your comment.
Okay, that makes sense for streaming large representations. However, for
my use case correct HTTP status codes are a necessity, so i had to
reimplement that. At least the loading of the template file can be done
earlier. But I guess it would clutter up the API if a preprocess option
would be incorporated, so i suppose it's better to leave it untouched -
extending it to match my needs wasn't a big deal.
regards,
Matthias
Matthias Wauer schrieb:
Hi,
my first post here, so first of all, thanks guys for working on &
releasing Restlet, fine thing.
Until now i was able to solve my issues on my own, but i think this one
might need to be discussed.
Issue:
I use the FreeMarker extension to generate representations.
Unfortunately,
the processing of the template (with the supplied model) is done in
TemplateRepresentation.write(), which is called after
Resource.getRepresentation(), and even after the response header is
written in HttpServerCall.sendResponse.
Specific problem:
So, after creating a subclass of TemplateRepresentation and moving my
error handling from Resource.getRepresentation to
MyTemplateRepresentation.write(), i was faced with the issue that
obviously i cannot send a Status.SERVER_ERROR_INTERNAL if the processing
fails completely - i can only alter the reponse body (= the entity).
Possible solution:
A solution _might_ be to process the template in the constructor of
MyTemplateRepresentation or in a separate method, storing the result in
a
StringBuffer or ByteArray, which is then copied to OutputStream in the
write() method. I suspect performance would suffer, but at least we had
all options for exception handling.
What do you think? Did i miss some point? Is there some better way?
Regards,
Matthias