On 8/25/11 11:15 PM, Sébastien Brisard wrote:
> Hi,
>
>> One thing that I think we all agree on; however, is that we should not be
>> designing exceptions or APIs that throw exceptions with the intent that
>> applications catching exceptions should parse the messages or search
>> the message content for specific strings.
>>
> I do apologize, I am not sure I fully understand. Please let me try
> again. I agree, parsing e.getMessage() would be horrible, but that was
> not what I had in mind.
>
> Let's say that a NonPositiveDefiniteLinearOperatorException e is
> raised, and I want to retrieve the operator in question. One way to do
> it would be to have a getter
> e.getOffendingLinearOperator()
> In MATH-581, following the discussion entitled "Implementation of
> Conjugate Gradient (MATH-581)" (started aug, 4), we finally went for
> the more flexible
> e.getContext().getValue("offending operator")
>
> The issue then is a proper handling of the key names ("offending
> operator" in the present case). Should the key names be assigned
> arbitrarily by the method which throws the exception, or stored (as a
> constant String) in the exception itself. My point is that in some
> circumstances, it is possible to have the exception store "typical"
> keys, which can be consistently used by everyone throwing such an
> exception, with the further possibility to add supplementary context
> to this exception, with freely chosen key names.
>
> Is it what you understood from my previous message?

I am sorry, Sebastien, I completely missed your point.  I was
confusing message keys with context object keys.  I now understand
what you are getting at.  I agree with Gilles that user code
catching a contexted exception can just use getKeys to retrieve the
keys, but that leaves open the question of how the client code is
supposed to know what it is looking for.  This may be an
over-simplification, but I would see the following as natural:

0) key/value pairs that are  "consistently used by everyone throwing
such an exception" should be named properties of the exception.  So
in your example of the offending linear operator in
NonPositiveDefiniteLinearOperatorException, the exception should
expose a getOffendingOperator method.
1) key/value pairs that represent optional or context-variable
properties of an exception *may* have key names defined in the class
that throws the exception.
2) Whenever keys are "named" and included in API specification, we
should ask whether or not specialized exceptions or named properties
of the exceptions being thrown should be defined (i.e. it is a
warning sign when these names surface in API documentation).

Sorry I did not understand your original post and did not comment on
the earlier discussion.  

Phil
> Best regards,
> Sébastien
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> For additional commands, e-mail: dev-h...@commons.apache.org
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to