- From: <noah_mendelsohn@us.ibm.com>
- Date: Mon, 9 Sep 2002 11:07:30 -0400
- To: Jacek Kopecky <jacek@systinet.com>
- Cc: XMLP Dist App <xml-dist-app@w3.org>
I understand that this needs serious thought, but I think it's a mistake
to do this "by cases", with one rule for bad args vs. ID faults, another
rule for other pairs, etc. We can easily get into a spec that grows in a
combinatorial way. Furthermore, it's trivial to create situations in
which there are multiple MUST faults for a given message. I think we need
an encompassing rule, that covers the whole system, that says what to do
when a given message would or could, per the spec, result in multiple
faults. I think the rule I've proposed is the sensible one. Otherwise,
in all your processing, you have to keep going even after you know you're
going to fault. You have to keep going through other headers and other
application processing to verify that you don't later discover a fault
that is somehow more important. I think that's a really unfortunate
constraint to put on processors.
Accordingly, I think the best rule is: you can build your implementations
with any structure and order of processing you want, as long as it does
not violate the rules for correct processing of a correct message, or the
chapter 2 rules for things like mU checking. I'm not sure I'd even force
an envelope well-formedness check. What if you've build a streaming
processor, so you deal with all the headers before you even read in the
(potentially very large) body. Even a well formed-ness check on the
envelope requires checking the spelling of </Body> and </Envelope>. I
really, really think you want to allow the processor to just fault when it
finds something wrong in the header, even if it's something as seemingly
secondary as a duplicate id in an encoding. It seems like a great
burden, once you already know you're faulting, to run the whole rest of
your processing logic against some prioritized list of faults.
Furthermore, you need to be very careful if you do such additional
processing that it has no side effects, as you probably will want to do
nothing now that you know the message is in error.
So, I remain very skeptical that we either want to (a) have very many
special-case rules about pairs of faults and their priority or (b) with
the exception of things like mU faults, for which order of detection is
truly fundamental to the processing model, I think we should allow great
lattitude for processors to report any of the potentially several faults
that might be found in a message. In any case, messages can have more
than one MUST fault, and if anyone is interpreting that as "must return
all of them" I think we need a clarification to the contrary. Having
gotten that far, I think it's not disconcerting at all to say: actually
you can return any reason you like for rejecting a message, whether it
rated a MUST or not.
Does this make sense?
------------------------------------------------------------------
Noah Mendelsohn Voice: 1-617-693-4036
IBM Corporation Fax: 1-617-693-8676
One Rogers Street
Cambridge, MA 02142
------------------------------------------------------------------
Jacek Kopecky <jacek@systinet.com>
09/08/2002 08:12 AM
To: noah_mendelsohn@us.ibm.com
cc: XMLP Dist App <xml-dist-app@w3.org>
Subject: Re: Issue 292: Analysis and proposal
Noah,
I'm a bit nervous about the part I've left of your message below.
Please see my comments.
Jacek Kopecky
Senior Architect, Systinet Corporation
http://www.systinet.com/
On Sat, 2002-09-07 at 01:29, noah_mendelsohn@us.ibm.com wrote:
> I know this seems a bit tricky, but it's really quite natural to
implement,
> and it does what one wants I think. Specifically: there's no way that
one
> of the faults was labeled MUST, but you didn't get any fault at all. If
> any fault was labeled "MUST", then you'll definitely get some fault. For
> the reason cited in the discussion above, the fault you get may or may
not
> be one of the MUST faults, as your implementation may hit a SHOULD or
MAY
> fault before it even notices that there would have been a MUST, but
sooner
> or later it will definitely fault.
If the spec says that if something happens a particular fault MUST be
generated, the above text contradicts the MUST. I think a reader of the
spec will expect BadArguments even in MissingID cases if the RPC
convention is used.
I agree that what I proposed would have effect on the implementations,
but (having implemented SOAP myself) I honestly think this effect does
not outweigh the seriousness of the contradiction above.
Now I think what you want to achieve can be achieved nevertheless, only
not as simply as you're proposing. RPC always uses SOAP Data Model,
therefore it can say in the RPC Faults section that if SOAP Data Model
encoding deserialization results in a fault, that fault MAY be generated
instead of any of the RPC faults, e.g. when efficiency concerns are
present. Either this, or relax the MUST to a SHOULD and the issue goes
away.
Hope my point is clear,
Jacek
Received on Monday, 9 September 2002 11:09:56 UTC