Grzegorz Kossakowski skrev:
Daniel Fagerstrom napisał(a):
Grzegorz Kossakowski skrev:
Daniel Fagerstrom napisał(a):


Yes, we did. Here I'm talking about fall-back mechanism so called servlet does not have to deal with SAX. The idea was to POST serialized SAX stream in request body. However, this solution is problematic if we have to merge that data with the one sent by browser.

This fallback mechanism was to still stay compliant with standard HTTP technique and adding SAX handling just for a sake of performance.

WDYT?

I agree.

Actually, I was asking about "problematic" part. ;-)
In order to avoid unnecessary serializing of SAX buffer we could implement lazy creation of request body so only if servlet asks for it (becase it's dumb and does not handle SAX extension to the request object) the serialization occurs. However, if original request contained parts we must forward it. If called servlet tries to parse parts (only to handle uploads) and already got SAX buffer we have no option to serialize it because we need to return complete set of parts.

Do you have idea how to avoid this?

I don't see where the problem you describe would occur. Could you please give an concrete example of it.

AFAICS there are two main cases. First case is that you call a servlet service from a reader (or generator) in a sitemap e.g.:

<map:read type="servletService">
  <map:parameter name="service" value="servlet:test:/service"/>
</map:read>

This is essentially a redirection. In this case you just pass on the unparsed request body from the caller to the callee. Typically the calling servlet will just have used read access from the header of the http request in order to execute matchers and selectors. In this case the request body could as an example be an unparsed multi part mime or an unparsed XML document that the callee then takes responsibility to parse

The second case is that you call a servlet service transformer (or serializer). In this the generator of the caller pipeline (or an action or a flowscript) will already have done the parsing needed of the request body and then transformed it to whatever XML format that the called servlet service is supposed to use as input (request body). I don't see why the called servlet service should need to have access to the callers request body in this situation.

Anyway I need some concrete example to get able to help with the "problematic" part.

I'm not sure if I follow you here. Do you want to say that parts parsing should work in lazy mode, so if caller of service does not deal with parts double parsing is avoided, right?

That would also be a possibility. I rather meant that instead of indiscriminately parsing all multi part mimes in a filter, the actual parsing should be done first in the servlet service that actually is intending to use the parts.

Right but we know if particular sitemap's servlet is going to use parts?

If we do the actual parsing in e.g. an action within a sitemap instead of in a filter, we don't need to know.

/Daniel

Reply via email to