You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Henri Biestro (Jira)" <ji...@apache.org> on 2021/02/02 20:52:00 UTC

[jira] [Commented] (JEXL-340) JexlException message access is incomplete and reversed

    [ https://issues.apache.org/jira/browse/JEXL-340?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17277447#comment-17277447 ] 

Henri Biestro commented on JEXL-340:
------------------------------------

Garret, is the proposed solution (per previous commit) something you can work with? Have you been able to check the JexlInfo provided features, etc ?

> JexlException message access is incomplete and reversed
> -------------------------------------------------------
>
>                 Key: JEXL-340
>                 URL: https://issues.apache.org/jira/browse/JEXL-340
>             Project: Commons JEXL
>          Issue Type: Improvement
>    Affects Versions: 3.1
>            Reporter: Garret Wilson
>            Assignee: Henri Biestro
>            Priority: Trivial
>             Fix For: 3.2
>
>
> I need to wrap {{JexlException}} and provide a nice error message to the user. If I have an expression using a variable {{foobar}} not present in the context, here is what {{JexlException.getMessage()}} returns:
> {quote}io.guise.mesh.JexlMexlEvaluator.evaluate@1:1 undefined variable foobar{quote}
> This is not a pretty error message. It has lots of things a user doesn't care about. I just want the real error message:
> {quote}undefined variable foobar{quote}
> But there is no way to get just that simple error message from {{JexlException}}. If you look at the source code for {{JexlException.getMessage()}}, you'll see that the "simple" message comes from {{JexlException.detailedMessage()}}.
> Unfortunately {{JexlException.detailedMessage()}} is {{protected}}—there is no way to access it from outside. Moreover the semantics of "message" and "detailed message" are reversed! The "message" should provide fewer details than the "detailed message".
> Here is what should be done:
> * {{JexlException.getMessage()}} should provide what {{detailedMessage()}} provides now. (You'll note that {{detailedMessage()}} already calls {{super.getMessage()}}; this criss-cross overriding is not the best practice. My suggestion would therefore improve and even reduce the code.)
> * A new {{JexlException.getDetailedMessage()}} should provide what {{getMessage()}} provides now.
> That would be simpler and more correct. And it would give me the simpler error message I need. If you absolutely must leave {{JexlException.getMessage()}} the way it is for backwards compatibility, at least provide a {{getSimpleMessage()}} that returns what {{detailedMessage()}} returns now. (That way you can leave {{detailedMessage()}} hidden, because it returns the _opposite_ of a detailed message.)
> I would guess that this issue of {{detailedMessage()}} returning the opposite of a "detailed message" arose out of confusion of the API docs of {{Throwable}} and {{Exception}} referring to a "detail message". But "detail message" and "detailed message" mean different things. The API docs of {{Throwable}} et. al. are referring to the message providing a detail about the {{Throwable}}. The message itself is the "detail". But when you change "detail message" to "detailed message", the "detailed" now means that the message provides additional details than a normal message. So by adding the "ed" to "detail" it changed the sense of what "detail message" originally meant (the message providing detail).



--
This message was sent by Atlassian Jira
(v8.3.4#803005)